wvuing/wvuiave/AppSrc/CCAGroupUtils.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/CCAGroupUtils.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,361 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Group handling utilities
+*
+*/
+
+
+
+#ifndef CCAGROUPUTILS_H
+#define CCAGROUPUTILS_H
+
+//  INCLUDES
+#include "MCAInviteConflictResolver.h"
+#include "TEnumsPC.h"
+
+#include <e32base.h>
+#include <badesca.h>
+
+// FORWARD DECLARATIONS
+class MCAViewSwitcher;
+class CCAAppUi;
+class MCAConversationMessage;
+class MCAServerContactsArrayPC;
+class MCAGroupPC;
+class MCAGroupUtilsPC;
+// CLASS DECLARATION
+
+/**
+*  Group properties editing and displaying utilities
+*
+*  @lib chatng.app
+*/
+class CCAGroupUtils : public CBase,
+            public MCAInviteConflictResolver
+    {
+    public:  // constructor
+
+        /**
+        * Static constructor.
+        * @param aEngine Handle to application engine
+        * @param aViewSwitcher General interface for switching chat-client views
+        * @return Instance of this class
+        */
+        static CCAGroupUtils* NewLC( MCAViewSwitcher& aViewSwitcher );
+
+        /**
+        * Destructor
+        */
+        ~CCAGroupUtils();
+
+    public:
+
+        // simple group generation ("SGC") FSM states
+        enum TSGCState
+            {
+            ESGCInviteContacts = 0, // choose contacts to invite (Begin state)
+            ESGCGroupName,          // select group name
+            ESGCInviteMessage,      // invite message query
+            ESGCScreenName,         // screenname query or alias usage
+            ESGCCreateGroup,        // create the group
+            ESGCDoSendInvite,       // send the invitations, if any
+            ESGCDoJoin,             // actually join the group
+            ESGCError,              // error state
+            ESGCQueryCancel,        // ask for cancelling
+            ESGCNone                // no state
+            };
+
+        // Chat group join mode
+        enum TJoinMode
+            {
+            EStoredId = 0,  // Group id received from some store
+            EManualId       // Group id entered manually by user
+            };
+
+    public: //from MCAInviteConflictResolver
+
+        /**
+         * @see MCAInviteConflictResolver for details
+         */
+        void ResolveInviteConflictL( const TDesC& aGroup,
+                                     CDesCArray& aArray );
+
+    public:  // new methods
+
+        /**
+         * This method checks if user is admin of the group
+         * @param aGroupId: id of the group whose admin status has to be checked
+         * @return ETrue if favourite else EFalse
+         */
+        TBool IsAdmin( const TDesC& aGroupId ) const;
+
+        /**
+         * Get the User Ids of participants of the group (joined users)
+         * Makes copies of the descriptors.
+         * @param aParticipantList - list of all the participants in a group
+         * @param aGroupID - groupid for which participantlist is required
+         */
+        void GetParticipantsL( CDesCArray& aParticipantList,
+                               const TDesC& aGroupID ) const ;
+
+        /**
+         * Leave the given group.
+         * @param aGroupId The group to leave
+         * @return IMPS error code from LeaveL
+         */
+        TInt LeaveGroupL( const TDesC& aGroupId );
+
+        /**
+         * This method displays pop-up list containing joined members
+         * @param aGroupId The group whose members have to be displayed
+         */
+        void DisplayJoinedMembersL( const TDesC& aGroupId );
+
+        /**
+         * Delete the given group
+         * @param aGroupId The group id of the group to delete
+         * @return The errorcode
+         */
+        TInt DeleteGroupL( const TDesC& aGroupId );
+
+        /**
+        * Find the group name of group with given group id
+        * @Param aGroupId: group id
+        * @return : name of the group
+        */
+        TPtrC GetGroupName( const TDesC& aGroupId ) const;
+
+        /**
+         * Find a group from the store
+         * @param aGroupId the ID of the group to find
+         * @return true if group has been found else return false
+         */
+        TBool FindGroup( const TDesC& aGroupId ) const;
+
+        /**
+         * Saves the focused general chat group as favourite
+         * @param aGroupId: id of the group which has to be saved
+         */
+        void SaveAsFavouriteL( const TDesC& aGroupId );
+
+        /**
+         * This method checks if group is favourite
+         * @param aGroupId: id of the group whose favorite status has to be checked
+         * @return ETrue if favourite else EFalse
+         */
+        TBool IsFavouriteChatGroup( const TDesC& aGroupId );
+
+        /**
+         * This method checks if the user has joined to the group
+         * @param aGroupId: id of the group whose joined status has to be checked
+         * @return ETrue if joined else EFalse
+         */
+        TBool IsJoinedToGroup( const TDesC& aGroupId );
+
+        /**
+         * This method checks if group owned(created) by the user
+         * @param aGroupId: id of the group whose owner status has to be checked
+         * @return ETrue if owned else EFalse
+         */
+        TBool IsOwnGroup( const TDesC& aGroupId ) const;
+
+        /**
+         * Launch chat group properties editor
+         * @param aGroupId GroupID for target group
+         */
+        TInt EditChatGroupPropertiesL( const TDesC& aGroupId );
+
+        /**
+        * Launch chat group properties editor and create new chat
+        * @param aResourceId Resource id for title text
+        * @param aViewId ViewId of current view
+        * @param aContactListID - invitation should be sent to all
+        * online contacts of this list. aContactListID should be null
+        * if focus was not on a contact list in singlelist view
+        * @return WVID of newly created group or NULL if not successful
+        *         The ownership is passed to calling function!
+        */
+        HBufC* CreateNewChatL(  TInt aResourceId, const TUid aViewId,
+                                TBool aContactFound,
+                                TEnumsPC::TListSelectionType aSelType = TEnumsPC::EMultiSelect,
+                                TInt aSelectedListIndex = 0 );
+
+        /**
+        * Joins the specified chat group and switches the view
+        * @param aGroupId GroupID
+        * @param aScreenName Default screenname for query
+        * @param aFwdMessage Forwarded message.
+        * @param aJoinMode Is group id entered manually by user
+        *                  or received from some storage.
+        * @return Return value of real join-request
+        */
+        TInt JoinGroupL( const TBool aFromFwd,
+                         const TDesC& aGroupId,
+                         const TDesC& aScreenName = KNullDesC,
+                         const MCAConversationMessage* aFwdMessage = NULL,
+                         TJoinMode aJoinMode = EStoredId );
+
+        /**
+        * Switches to joined group
+        * @param aGroupID GroupID
+        * @param aFwdMessage forwarded message
+        * @param aInviteQuery If ETrue, launch the invite query
+        */
+        void SwitchToJoinedGroupL( const TBool aFromFwd,
+                                   const TDesC& aGroupID,
+                                   const MCAConversationMessage* aFwdMessage = NULL,
+                                   TBool aInviteQuery = EFalse );
+
+        /**
+        * Displays a delete query of user created chat rooms
+        */
+        TInt DisplayCreatedChatRoomsListL();
+
+        /**
+        * Displays chat room info dialog
+        * @param aGroupId GroupID
+        */
+        void DisplayChatInfoL( const TDesC& aGroupId );
+
+        /**
+         * Do the asynchronous joining process via CAsyncCallBack.
+         * Uses iErr, iAsync* variables.
+         */
+        TInt DoAsyncJoin();
+
+        /**
+         * Helper method for querying the screen name or alias.
+         * Uses variation to determine the default value.
+         * @param aScreenName Pointer to the screen name buffer
+         */
+        TInt ScreenNameQueryL( TDes& aScreenName );
+
+        /**
+         * Helper method for switching back to the view again
+         * @param aGroupID
+         * @param aPrevView View where to switch when pressing back
+         * @param aNextView View which is switched to next
+         */
+        void PrepareToSwitchBackL( const TDesC& aGroupID,
+                                   TUid aPrevView,
+                                   TUid aNextView );
+       TPtrC GetJoinGroupID();
+
+    private: // new methods
+
+        /**
+         * Helper Asks screen name
+         * @param aScreenName Reference to a descriptor where
+         *        screen name will be stored.
+         * @return EAknSoftkey enumeration
+         */
+        TInt AskScreenNameL( TDes& aScreenName );
+
+        /**
+         * Launch chat group properties editor and create new chat,
+         * the normal style (with access and editor lists, etc.)
+         * @param aResourceId Resource id for title text
+         * @param aViewId ViewId of current view
+         * @return WVID of newly created group or NULL if not successful
+         *         The ownership is passed to calling function!
+         */
+        HBufC* CreateNewChatNormalL( TInt aResourceId, const TUid aViewId );
+
+        /**
+         * Launch chat group properties editor and create new chat,
+         * simplified version.
+         * @param aResourceId Resource id for title text
+         * @param aViewId ViewId of current view
+         * @param aContactListID listid for which the list of online contacts is required
+         * for sending invitations
+         * @return WVID of newly created group or NULL if not successful
+         *         The ownership is passed to calling function!
+         */
+        HBufC* CreateNewChatSimpleL( TInt aResourceId, const TUid aViewId,
+                                     TBool aContactFound,
+                                     TEnumsPC::TListSelectionType aSelType,
+                                     /*MCAServerContactsArrayPC*  aOnlineContacts = NULL*/
+                                     TInt aSelectedListIndex = 0  );
+
+        /**
+         * FSM state change logic wrapper.
+         * @param aAknResult The result from user query (Avkon enum),
+         *                   to handle Cancels
+         * @param aErrorCode The network error code from previous operation, if
+         * any. Use KErrNone to force skipping of error state transition.
+         * @param aNewState The new state to change to when successful
+         */
+        void StateChange( TInt aAknResult, TInt aErrorCode,
+                          TSGCState aNewState );
+
+    private: // constructors and destructors
+
+        /**
+        * constructor
+        */
+        void ConstructL();
+
+        /**
+         * Default constructor
+         * @param aEngine Handle to engine
+         * @param aViewSwitcher Handle to view switcher
+         */
+        CCAGroupUtils( MCAViewSwitcher& aViewSwitcher );
+
+    private:    // Data
+
+        // Doesn't own. Handle to appui
+        CCAAppUi* iAppUi;
+
+        // Handle to view switcher
+        MCAViewSwitcher& iViewSwitcher;
+
+        // Owns. Used temporarily in CreateNewChatL.
+        HBufC* iGroupId;
+        HBufC* iJoinGroupId;
+        // error for asynchronous group joining
+        TInt iErr;
+
+        // leave error for asynchronous group joining
+        TInt iAsyncLeave;
+
+        // parameters used with asynchronous group joining: group id and group name
+        HBufC* iAsyncGroupId;
+        HBufC* iAsyncScreenName;
+
+        // Not owned. ref to forwarded message.
+        const MCAConversationMessage* iAsyncFwdMessage;
+
+        // Members are required for asynchronous call call backs
+        CAsyncCallBack* iAsyncCb;
+        CActiveSchedulerWait iWait;
+
+        // simplified group creation FSM stuff
+        TSGCState iCurrState;       // current state for FSM
+        TSGCState iPrevState;       // previous state for FSM
+        TInt iNwError;              // error from network
+
+        // Screen name
+        TPtr iScreenNamePtr;
+
+        //Doesnt own. Pointer to group process component.
+        MCAGroupPC* iGroupPC;
+
+        //Doesnt Own. Pointer to group utils process component
+        MCAGroupUtilsPC* iGroupUtilsPC;
+    };
+
+#endif      // CCAGROUPUTILS_H
+
+// End of File