diff -r 000000000000 -r 72b543305e3a messagingappbase/mce/inc/MceMessageListView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/mce/inc/MceMessageListView.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,691 @@ +/* +* Copyright (c) 2002 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: +* This view is created when user opens folder. +* +*/ + + + +#ifndef MCEMESSAGELISTVIEW_H +#define MCEMESSAGELISTVIEW_H + +// INCLUDES +//#include "MceBaseListView.h" +#include +#include +#include +#include + +#include "MceMessageListContainer.h" + +#include "mcetemplate.h" +#include "MceFolderItem.h" +#include "MceListboxTypeObserver.h" + +#include + +#include + +// CONSTANTS + +#define TDRVIEWID TVwsViewId( \ + TUid::Uid( KMceApplicationUidValue ), \ + TUid::Uid( KMceDeliveryReportViewIdValue ) ) + +enum TMessageFolderMessageStatus + { + MessageFolderAllRead, + MessageFolderAllUnread, + MessageFolderReadUnread + }; + +enum TMessageFolderDeleteMessageStatus + { + MessageFolderAllDelete, + MessageFolderAllUnDelete, + MessageFolderDeleteUnDelete + }; + +enum TMceTemplatesDialogStatus + { + MceTemplatesDialogClose, + MceTemplatesDialogOpen + }; +// DATA TYPES +typedef CArrayFixFlat CMceFolderItemArray; + +// FORWARD DECLARATIONS +class CMsvSession; +class CMceBitmapResolver; +class CMceMainViewListView; +class CAknLocalScreenClearer; +class CMceSessionHolder; +class CMceUi; +class CMceMessageListContainer; +class CMceMessageListContainerBase; +class CEnvironmentChangeNotifier; + +class CMceListboxTypeObserver; + +// CLASS DECLARATION + +/** +* This view is created when user opens folder. +*/ +class CMceMessageListView : + public CAknView, + public MEikListBoxObserver, + public MMsvSessionObserver, + public MMceListboxTypeObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CMceMessageListView* NewL( + CMsvSessionPtr aSession, + TMsvId aFolderId, + CMceSessionHolder& aSessionHolder, + CMceBitmapResolver& aBitmapResolver, + CMceMainViewListView& aMainView ); + + /** + * Destructor. + */ + virtual ~CMceMessageListView(); + + public: // New functions + + + /** + * Sets folder to be watched + * @param aFolderId: folder id + */ + void SetFolderL( TMsvId aFolderId ); + + /** + * Returns listbox type of the current folder. + * @return Folder listbox type + */ + TInt GetFolderListBoxType(); + + + /** + * Returns pointer to list container. + * @return Pointer to list container + */ + CMceMessageListContainerBase* ListContainer() const; + + /** + * Should be called by mce after message server startup. + * This adds view to session observer list and creates needed CMsvEntries. + */ + virtual void HandleMsgServerStartupL(); + + /** + * Checks if there are unread messages in the given folder + */ + TBool HasUnreadMessagesL(); + + /** + * Cancels remote mailbox timer. + */ + void CancelMailboxTimer() const; + + /** + * Checks if folder aName already exists + * @param aName folder name to be searched. + * @param aId id of the folder. Should be set when renaming. + * @return ETrue if name used. + */ + TBool IsFolderNameUsedL(const TDesC& aName, TMsvId aId = KErrNotFound) const; + + /** + * Changes currently opened folder and redraws the list. + * @param aNewFolderId: id of the folder name to be opened + */ + void ChangeFolderAndRefreshListboxL( TMsvId aNewFolderId ); + + /** + * Finds and selects message entry + * @param aMatchString: the matched string + */ + void FindAndSelectEntryL( const TDesC& aMatchString ) const; + + /** + * Checks, if SyncMl folder + * Returns ETrue, if SyncMl folder + */ + TBool IsSyncMl() const; + + /** + * Checks, if SyncMl Outbox or Inbox folder + * Returns ETrue, if SyncMl Outbox or Inbox folder + * @param aFolder: id of the folder + */ + TBool SyncMlOutboxInbox( TMsvId aFolder ) const; + + /** + * Checks, if MMS notification can be opened using selection key + */ + TBool CheckMMSNotificationOpenL( ) const; + + /** + * Opens remote mailbox settings + */ + void OpenMailboxSettingsL(); + + /** + * Is IMAP folder open + */ + TBool IsImapFolderOpenL( ) const; + + /** + * From CAknView: Sets the new size of Rect + */ + void HandleStatusPaneSizeChange(); + + inline void UpdateViewL(); + + public: // Functions from base classes + + /** + * From CAknView + */ + TUid Id() const; + + /** + * From CAknView + */ + void DoActivateL( + const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ); + + /** + * From CAknView + */ + void DoDeactivate(); + + /** + * From CAknView + */ + void DynInitMenuPaneL( + TInt aResourceId, + CEikMenuPane* aMenuPane ); + + /** + * From MEikCommandObserver + */ + void HandleCommandL( TInt aCommand ); + + /** + * From MMsvSessionObserver + */ + virtual void HandleSessionEventL( + TMsvSessionEvent aEvent, + TAny* aArg1, + TAny* aArg2, + TAny* aArg3 ); + + /** + * From MEikCommandObserver + */ + virtual void ProcessCommandL(TInt aCommand); + + /** + * From CAknView ?member_description + */ + void HandleClientRectChange(); + + /** + * Sets the label for the middle soft key in the folder view + * @since S60 3.1 + */ + void SetMSKButtonL(); + + /** + * Checks if current folder is emailmailbox for the middle soft key. + * @since S60 3.1 + * @return Etrue if mailbox + */ + TBool IsMSKMailBox(); + + /** + * Checks if current folder is syncMLmailbox for the middle soft key. + * @since S60 3.2 + * @return Etrue if syncMLmailbox + */ + TBool IsMSKSyncMlMailBox(); + + /** + * Store current item id for mailbox focus + * @since S60 3.0 + */ + void SetCurrentItemId(); + + /** + * Should be called by container when selection button is pressed so that + * exit command is not showed in context sensitive menu. iHideExitCommand set + * EFalse at the end of DynInitMenuPaneL function. + * @param aHideExitCommand: ETrue if exit not shown next time option menu displayed + */ + void SetHideExitCommand( TBool aHideExitCommand ); + + /** + * Check if the item is Unread + * @para aId: the item id + * @return ETrue if the item is unread, return EFalse if the item is read + * @since Taco + */ + TBool IsItemUnread( TMsvId aId ); + + /** + * Handle call by sendkey in email list + * @para aEntryId: current entry id + * @Since S60 5.0 + */ + void HandleSendkeyInMailboxL( TMsvId aEntryId ); + + /** + * Call-back function for CEnvironmentChangeNotifier class. + * @param object of CMceMessageListView. + */ + static TInt EnvironmentChanged( TAny* aObj ); + + /** + * From MMceListboxTypeObserver + */ + virtual void ListboxTypeChangedL(); + + /** + * For setting the ContextCommandFlag when clicked to get the context menu + */ + void SetContextCommandFlag(TBool aContextCommandFlag); + + protected: // Functions from base classes + + /** + * From MEikListBoxObserver + */ + void HandleListBoxEventL( + CEikListBox* aListBox, + TListBoxEvent aEventType ); + + private: + + /** + * Constructor is private. + */ + CMceMessageListView( + CMsvSessionPtr aSession, + TMsvId aFolderId, + CMceSessionHolder& aSessionHolder, + CMceBitmapResolver& aBitmapResolver, + CMceMainViewListView& aMainView ); + + /** + * Symbian OS constructor + */ + void ConstructL(); + + /** + * Handles different 'open's: Open folder or open message + */ + void HandleOpenL(); + + /** + * Called when user pressed Back and main view should be opened + */ + void HandleCloseL(); + + /** + * Changes currently opened folder. + * @param aOpenParent: ETrue if "CD .." wanted. + */ + void ChangeFolderL( TBool aOpenParent = EFalse ); + + /** + * User wants to open message and this call's Ui's EditMtmEntry function. + */ + void EditEntryL(); + + /** + * Called by DynInitMenuPaneL to delete unneccessary menu items. + * @param aMenuPane menu pane + */ + void FetchMenuL( CEikMenuPane* aMenuPane ) const; + + /** + * Called by DynInitMenuPaneL to delete unneccessary menu items. + * @param aMenuPane menu pane + */ + void FolderMenuL( CEikMenuPane* aMenuPane ); + + /** + * Called by FolderMenuL to delete unneccessary menu items. + * @param aMenuPane menu pane + */ + void FolderMenuNoItemsL( CEikMenuPane* aMenuPane ) const; + /** + * Called by FolderMenuL to delete unneccessary menu items. + * @param aMenuPane menu pane + */ + void FolderMenuOneItemL( + CEikMenuPane* aMenuPane, + TBool aRemoteMailboxOpened, + TBool aThirdPartEmail ); + /** + * Called by FolderMenuL to delete unneccessary menu items. + * @param aMenuPane menu pane + */ + void FolderMenuManyItemsL( + CEikMenuPane* aMenuPane, + TBool aRemoteMailboxOpened, + TBool aThirdPartEmail, + TBool aSetRead = EFalse ); + + /** + * Called by FolderMenuL to delete unneccessary menu items. + * @param aMenuPane menu pane, SyncML folder + */ + void FolderMenuSyncMLMain( CEikMenuPane *aMenuPane ); + + /** + * Called by FolderMenuL to delete unneccessary menu items. + * @param aMenuPane menu pane, SyncML folder + */ + void FolderMenuSyncMLFolderL( CEikMenuPane *aMenuPane ); + + /** + * Called by DynInitMenuPaneL to delete unneccessary menu items. + * @param aMenuPane menu pane + */ + void EditMenuL( CEikMenuPane* aMenuPane ) const; + + /** + * Called by DynInitMenuPaneL to delete unneccessary menu items. + * @param aMenuPane menu pane + */ + void OrganizeMenuL( CEikMenuPane* aMenuPane ); + + /** + * Returns ETrue if folder is opened by this view and + * back does not return to main view. + * If EFalse returned then this view needs to be closed + * and main view is activated. + */ + TBool FolderOpenedL(); + + /** + * Returns folder count in currently opened folder + */ + TInt SubfolderCount() const; + + /** + * Checks how many unread messages folder has. If only one then asks + * MceUi to open it. If more than one, select first unread. If none select first + * item of the folder + * @return ETrue if there is one message in inbox/mailbox folder and trying to open it, + * EFalse when just opening inbox/mailbox folder + * @param aId: message id + */ + TBool FindUnreadMessageAndOpenItL( const TMsvId aId ); + + /** + * Finds folder called 'Inbox' from current (IMAP4 remote mailbox) folder and opens it. + * Do not confuse with local service inbox! + */ + void FindInboxAndOpenItL(); + + /** + * Sets empty text of the list box. + * Empty text is different in Remote mailboxes than other folders. + */ + void SetEmptyTextL() const; + + /** + * Function for the CIdle class to be called, calls LaunchMceViewer. + * @param aSelf: pointer to CMceMessageListView object. + * @return see LaunchMceViewer. + */ + static TInt LaunchViewer( TAny* aSelf ); + + /** + * Tries to launch viewer (by calling Mce's EditMtmEntryL) + * for the unread message if there is only one unread + * message in the folder. Otherwise does not do nothing + * @return KErrNone if launch ok + */ + TInt LaunchMceViewer( ); + + /** + * Checks if selected entry can be opened and dims 'send via' menu if it can + * @param aEntryId: currently selected entry + * @param aMenuPane: menupane + */ + void HandleSendViaMenuItemL( TMsvId aEntryId, CEikMenuPane* aMenuPane ) const; + + /** + * Called by HandleSessionEventL if entries created or changed. + * @param aParentId: id of the parent + * @param aSelection: pointer to selection of messages changed. + */ + void MessageViewHandleEntriesCreatedOrChangedL( + TMsvId aParentId, + CMsvEntrySelection* aSelection ); + + /** + * Handles EMceCmdSortByDate,EMceCmdSortBySubject and EMceCmdSortBySender + * @param aCommand: id of the command + */ + void HandleSortCommandL( const TInt aCommand ); + + /** + * Open SyncMl Inbox folder + */ + void SyncMlFindInboxAndOpenItL(); + + /** + * + */ + TInt GetSetRead( const CMsvEntrySelection& aEntries ); + + /** + * Checks are the selected messages deleted or undeleted + * @since 3.2 + * @return Index of the selected message deletetion status + * otherwise KErrNotFound + */ + TInt GetDeleteFlagStatusL( const CMsvEntrySelection* aEntries ); + + /** + * Checks if there is only one unread message in current folder + * and starts viewer for it + * @since 3.2 + * @param aMsgMtmUid: filled with Message MTM Uid + * @return Index of the message if only one unread, + * otherwise KErrNotFound + */ + TInt LaunchViewerWhenOneUnreadL( TInt &aMsgMtmUid ); + + /** + * registers MceMessageListContainer to Msk observer + * @param aObserver: True if set MskObserver and False to remove it. + * @since 3.2 + */ + void SetMskObserver( TBool aObserver ); + + + /** + * Input parameter list for AIW plugin + */ + CAiwGenericParamList* AiwSyncParamListLC(TInt aId, const TDesC& aText); + + /** + * + */ + void HandleEntriesCreatedChangedL( const CMsvEntrySelection* aSelection ); + + /** + * + */ + void HandleEntriesDeletedL( ); + + /** + * + */ + void HandleEntriesMovedL( TMsvId aSourceFolderId, TMsvId aTargetFolderId ); + + + /** + * Creates either one row or two row listbox and sets it to iMsgListContainer + */ + void CreateListboxL(); + + /** + * Find all read messages and mark + * + * @since Taco + */ + void FindAllReadMsgAndMarkL(); + + /** + * Check if there is any selected item visible in current view + * @ msgIndexArray: the array of the index of selected item + * @since S60 5.0 + */ + TBool AnySelectedItemsVisible( CArrayFixFlat* msgIndexArray ); + + /** + * Check if it is in Inbox, Documents and user's own foldermark, + * if it is, enable mark read msg option from menu + * @currentEntry: current entry + * @currentfolderId: current Folder Id + * @aMenuPane: Menu pane to show the mark all read command + * @since S60 5.0 + */ + void EnableMarkAllReadMsgInInboxAndDocument( + TMsvEntry currentEntry, + TMsvId currentFolderId, + CEikMenuPane* aMenuPane ); + + + /** + * Set correct menu items for expand/collapse options + * @param aMenuPane: + * @since S60 5.0 + */ + void HandleContainerOptionsMenuL( CEikMenuPane* aMenuPane ); + + /** + * + */ + void HandleContainerOptionsCommandL( TInt aCommand ); + + /** + * called from EnvironmentChanged. + */ + TInt HandleEnvironmentChanged(); + + /* + * Check and Set Forward command for the selected item + * Forward is currently only available in Sent Item folder + * Since 5.0 + */ + void SetForwardMenuL( CEikMenuPane* aMenuPane, TMsvEntry& aEntry ); + + /* + * Dim Read/Unread command from options menu, prepare for further settings + * Since 5.0 + */ + void DimReadUnreadOptionsMenu( CEikMenuPane *aMenuPane ); + + /* + * Set Read/Unread command for options menu, when multiple msg/emails are selected + * Since 5.0 + */ + void SetReadUnreadOptionsMenu( CEikMenuPane *aMenuPane, TBool aIsEmail, TBool aSetRead ); +public: + /** + * Set the iReadUnread variable if Mark as read/unread appears twice + * if it is, enable mark read msg option from menu + * @aValue: The value to be set to iReadUnread variable + * Since 3.2 + */ + void SetMarkReadUnread( TBool aValue ); + + private: // Data + + CMceUi* iMceUi; + CMceMessageListContainerBase* iMsgListContainer; + + TInt iCurrentListboxId; + CMsvSessionPtr iSession; + TMsvId iFolderId; + CMceSessionHolder& iSessionHolder; + CMceBitmapResolver& iBitmapResolver; + TBool iMceViewActivated; + TBool iMsvSessionReady; + CAiwServiceHandler* iAiwServiceHandler; + TMceFlags iListViewFlags; + TMsvId iCurrentItemId; + + TInt iSelectedIndex; // index of the cursor when deactivated + + HBufC* iInboxName; + HBufC* iRemoteMailboxEmptyText; + HBufC* iEmptyText; + CMceMainViewListView& iMainViewListView; + TBool iHideExitCommand; + TBool iFetchMenuSelectionKeyPressed; + CPeriodic* iMessageViewerLauncher; + CAknLocalScreenClearer* iLocalScreenClearer; + TInt iLaunchViewerCounter; + CMceFolderItemArray* iFolderItemArray; + TBool iConnectionNote; + + TInt iSortOrder; + TBool iOrdering; + TBool iRunningEditFunction; + TBool iIsUnread; + + TInt iCurrentListType; + CMceListboxTypeObserver* iListboxMailTypeObserver; + CMceListboxTypeObserver* iListboxInboxTypeObserver; + + CEnvironmentChangeNotifier* iDateTimeNotifier; + //Variable that get set when Mark as read/unread appears twice + TBool iReadUnread; + //Variable for context command + TBool iContextCommand; + }; + +inline void CMceMessageListView::UpdateViewL() + { + if ( iMsgListContainer ) + { + iMsgListContainer->SetAnchorItemIdL( + CMceMessageListContainerBase::EMessageListOperationCompleted ); + iMsgListContainer->RefreshListbox(); + } + } + + + +#endif + +// End of file