diff -r d189ee25cf9d -r 3533d4323edc ipsservices/ipssossettings/inc/ipssetuifoldersubscription.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsservices/ipssossettings/inc/ipssetuifoldersubscription.h Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,466 @@ +/* +* Copyright (c) 2007 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: Folder list array. +* +*/ + + +#ifndef IPSSETUIFOLDERSUBSCRIPTION_H +#define IPSSETUIFOLDERSUBSCRIPTION_H + +#include // TMsvId +#include // CAknDialog +#include // MEikListBoxObserver +#include + +/** + * Enumeration for folder icon indexes. + */ +enum TIpsSetUiFolderIconIndexes + { + EIpsSetUiFolderSingleUnsubbed = 0, + EIpsSetUiFolderSingleSubbed, + EIpsSetUiFolderSingleSubbedNew, + EIpsSetUiFolderSubfoldersUnsubbed, + EIpsSetUiFolderSubfoldersSubbed, + EIpsSetUiFolderSubfoldersSubbedNew, + EIpsSetUiFolderUnsubbedNew, + EIpsSetUiFolderSubfoldersUnsubbedNew, + }; + +class CBaseMtmUiData; +class CBaseMtmUi; +class CIpsSetUiFolderListArray; +class CIpsSetUiCtrlSoftkey; +class CClientMtmRegistry; +class CGulIcon; +class CAknTitlePane; +// +class CAknWaitDialog; +class CSubscriptionDialogActiveHelper; +// + + +/** + * Folder subscription dialog class + * + * @lib IpsSosSettings.lib + * @since FS v1.0 + */ +class CIpsSetUiSubscriptionDialog : + public CAknDialog, + public MEikListBoxObserver, + public MProgressDialogCallback, // + public MMsvSessionObserver + { +public: + + // + /** + * CIpsSetUiSubscriptionDialog keeps it's state using these enum values + */ + enum TSubsDialogState { EIdle, ESingleOperation, EMultipleStart, + EMultipleSubscribe, EMultipleUnsubscribe }; + // + + /** + * NewL() + * @param TMsvId + * @param CMsvSession& + * @return CIpsSetUiSubscriptionDialog* + */ + static CIpsSetUiSubscriptionDialog* NewL( + TUint64& aFlags, + TMsvId aServiceId, + CMsvSession& aSession, + CAknTitlePane& aTitlePane, + const TDesC& aTitlePaneText ); + + ~CIpsSetUiSubscriptionDialog(); + + + /** + * From MMsvSessionObserver + * HandleSessionEventL + * @param TMsvSessionEvent, event id + * @param TAny* + * @param TAny* + * @param TAny* + */ + virtual void HandleSessionEventL( + TMsvSessionEvent aEvent, + TAny* aArg1, + TAny* aArg2, + TAny* aArg3 ); + + /** + * SynchronisEIpsSetUiFoldersL() + */ + void SynchronisEIpsSetUiFoldersL(); + + /** + * DisplayFinalProgressDialog() + * To deal with final progress from suboperations + * @param CMsvOperation& + */ + void DisplayFinalProgressDialog( + CMsvOperation& aCompletedOperation) const; + + /** + * from CCoeControl + * OfferKeyEventL() + * @param TKeyEvent&, key event + * @param TEventCode + * @return TKeyResponse + */ + TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType); + + + /** + * From CAknDialog + * DynInitMenuPaneL() + * @param TInt, resource id + * @param CEikMenuPane* + */ + virtual void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ) ; + + /** + * From CAknDialog + * ProcessCommandL() + * @param TInt, command id + */ + virtual void ProcessCommandL( TInt aCommandId ); + + // + /** + * This method is called by CSubscriptionDialogActiveHelper, when async + * operation is completed + * @param TInt, error id + */ + void HandleAsyncRequestCompletedL( TInt aErrorId ); + + /** + * from MProgressDialogCallback + */ + void DialogDismissedL( TInt aButtonId ); + // + + +protected: + + /** + * From MEikListBoxObserver + * @param CEikListBox* + * @param TListBoxEvent + */ + virtual void HandleListBoxEventL( + CEikListBox* aListBox, + TListBoxEvent aEventType ); + + /** + * HandleSubscriptionL() + * @param TInt type of subscription, either subscribed or unsubscribed + * @param CMsvEntrySelection&, selection to subscribe + */ + void HandleSubscriptionL( TInt aSubType, CMsvEntrySelection& aSelection ); + + /** + * CheckAreAllFoldersIncludedL() + * Checks if all subfolders are either subscribed of unsubscribed + * @param TInt, type of subscription, either subscribed or unsubscribed + * @param CMsvEntrySelection*, selection to check + * @return TBool, ETrue if all subfolders have same subscription state + */ + TBool CheckAreAllFoldersIncludedL( TInt aSubType, CMsvEntrySelection* sel ); + +private: + + /** + * PreLayoutDynInitL() + */ + virtual void PreLayoutDynInitL(); + + /** + * PostLayoutDynInitL() + */ + virtual void PostLayoutDynInitL(); + + /** + * OkToExitL() + * @param TInt + * @return TBool + */ + virtual TBool OkToExitL(TInt aButtonId); + + /** + * C++ constructor + * @param TMsvId, mailbox id + * @param CMsvSession& session reference + */ + CIpsSetUiSubscriptionDialog( + TUint64& aFlags, + TMsvId aServiceId, + CMsvSession& aSession, + CAknTitlePane& aTitlePane ); + + /** + * ConstructL() + */ + void ConstructL( const TDesC& aTitlePaneText ); + + /** + * CreateOperationL() + * @param TInt, button id + */ + void CreateOperationL(TInt aButtonId); + + /** + * ContextHasChildFolders() + * @return TBool, ETrue if has children + */ + TBool ContextHasChildFolders() const; + + /** + * GetMtmUiL() + */ + void GetMtmUiL(); + + + /** + * AppendIconsL() + * Appends icons to icon array + * @param TFileName&: Bitmap filename with path + * @param CArrayPtrFlat*: icon array where bitmap is append + */ + void AppendIconsL( + TFileName& aFileName, + CArrayPtrFlat* aIcons); + + /** + * CurrentFolder() + * @return TMsvId, id of current folder + */ + TMsvId CurrentFolder(); + + /** + * HandleRefreshL + */ + void HandleRefreshL(); + + /** + * LaunchHelpL() + * Launches help + */ + void LaunchHelpL( const TDesC& aContext ); + + /** + * From CCoeControl, returns help context + * @param TCoeHelpContext&, help context + */ + void GetHelpContext(TCoeHelpContext& aContext) const; + + /** + * returns correct resource string for MSK + * @return MSK label + */ + TInt GetResourceForMiddlekey(); + + /** + * Solves which label should be shown in MSK + * @return state of MSK (Open/Subscribe/Unsubscribe/empty) + */ + TInt CheckMSKState(); + + // + /** + * cancels all async requests + */ + void CancelAllAsyncRequests(); + + /** + * Shows a waitnote + */ + void ShowWaitNoteL(); + // + +private: + + /** + * Flags to control dialog. Mainly for exiting the dialog. + */ + TUint64& iFlags; + + /** + * MTM registry object. + * Owned. + */ + CClientMtmRegistry* iMtmRegistry; + + /** + * Current service Id. + */ + TMsvId iServiceId; + + /** + * Message server session. + */ + CMsvSession& iSession; + + /** + * Current folder entry. + * Owned. + */ + CMsvEntry* iContextEntry; + + /** + * Base MTM object. + * Owned. + */ + CBaseMtm* iBaseMtm; + + /** + * Container for folders. + * Owned. + */ + CIpsSetUiFolderListArray* iFolderListArray; + + /** + * Softkey control. + * Pwned. + */ + CIpsSetUiCtrlSoftkey* iSoftkeys; + + /** + * Commonly used ordering. + */ + TMsvSelectionOrdering iOrdering; + + /** + * Currently open folder. + */ + TMsvId iOpenedFolderId; + + /** + * Previous folder subscription. + */ + TInt iPreviousSubscriptionRID; + + /** + * Previously opened folder. + */ + TInt iPreviousFolderOpenRID; + + + /** + * Previous view title pane text + */ + HBufC* iOldTitlePaneText; + + /** + * title pane control + */ + CAknTitlePane& iTitlePane; + + /** + * wait note for folder list refresh + */ + // + CAknWaitDialog* iAsyncWaitNote; + + /** + * Owned. Only one operation can be active at a time + */ + CSubscriptionDialogActiveHelper* iAsyncHelper; + + /** + * Current state of this object (which request is going on, if any) + */ + CIpsSetUiSubscriptionDialog::TSubsDialogState iState; + + /** + * True if fetch dialog is already dismissed, no need to call ProcessFinishedL + */ + TBool iFetchDialogDismissed; + + /** + * List of selected folder entries for subcribe/unsubscribe + */ + CMsvEntrySelection* iEntrySelection; + + /** + * Multiple commands to iBaseMtm are called during this active cycle + * with KIMAP4MTMStartBatch + */ + TBool iMultipleStarted; + + /** + * Original count in iEntrySelection when batch subscribe/unsubscribe command + * was started + */ + TInt iCount; + // + + }; + +// +/** +* This class is used by CIpsSetUiSubscriptionDialog for waiting its async tasks. +* CIpsSetUiSubscriptionDialog can't be made active because of multiple times CBase +* inheritance problems +*/ +class CSubscriptionDialogActiveHelper : public CActive + { +public: // public functions + + /** + * Constructor + */ + CSubscriptionDialogActiveHelper(CIpsSetUiSubscriptionDialog* aSubscriptionDialog); + + /** + * Destructor + */ + ~CSubscriptionDialogActiveHelper( ); + + /** + * Active object start + */ + void Start(CMsvOperation* aMsvOperation); + +private: // private functions + + /** + * Active object RunL + */ + void RunL(); + + /** + * Active object DoCancel + */ + void DoCancel(); + + /** + * pointer to CIpsSetUiSubscriptionDialog doesnt own + */ + CIpsSetUiSubscriptionDialog* iSubscriptionDialog; + + /** + * pointer to monitored operation, Owned + */ + CMsvOperation* iMsvOperation; + + }; +// + +#endif // IPSSETUIFOLDERSUBSCRIPTION_H