--- /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