diff -r 000000000000 -r 72b543305e3a messagingappbase/mce/inc/MceMessageListContainerBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/mce/inc/MceMessageListContainerBase.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,479 @@ +/* +* 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: +* Pure virtua class for message view to handle listbox. +* +*/ + + + +#ifndef MCEMESSAGELISTCONTAINERBASE_H +#define MCEMESSAGELISTCONTAINERBASE_H + +// INCLUDES +#include // CCoeControl +#include +//#include "MceListContainer.h" +//#include "MceMessageListContTimer.h" + +#include "mcetemplate.h" +#include "MceUtils.h" +#include "MceListItem.h" +#include //CRepository +#include +#include +#include + +// FORWARD DECLARATIONS +class CMceMessageListView; +class MMtmUiDataRegistryObserver; + +//CONSTS +//const TInt KMceSelectionReplacementSize = 5; +enum TMceContainerFlags + { + EMceOneRowFlagOptionsMenuOpen = 0x01, // options menu open status + EMceOneRowFlagFirstSubtitleOpen = 0x02 + }; + + +// CLASS DECLARATION + +/** +* Base class for all the message list containers. +* This class is used by message list view. +* @since S60 5.0 +*/ +class CMceMessageListContainerBase : + public CCoeControl, + public MEikCommandObserver + { + public: // Constructors and destructor + + /** + * Destructor. + */ + virtual ~CMceMessageListContainerBase(); + + public: + + /** + * TODO: Needed? + * 1 = two row + * 2 = hierachical list + */ + virtual TInt MceListId() const = 0; + + /** + * @return number of items in list (total list item count, including ALL the items with one row list) + */ + virtual TInt Count() const = 0; + + /** + * @return message count + */ + virtual TInt MessageCount() const = 0; + + /** + * @return folder count + * TODO: some other count also needed? Subtitle row count? + */ + virtual TInt FolderCount() const = 0; + + /** + * Changes currently opened folder + * @param aFolderId: id of the folder to be opened. + * TODO: should this open inbox in case of imap? + */ + virtual void SetFolderL( TMsvId aFolderId ) = 0; + + /** + * Returns id of the currently opened folder + * @return folder id + */ + virtual TMsvId CurrentFolderId() const = 0; + + /** + * Returns the currently opened folder entry. + * @return TMsvEntry of the opened folder. + */ + virtual const TMsvEntry& FolderEntry() const = 0; + + + /** + * Returns message id of the currently focused item + * @return TMsvId of the entry + * TODO: should this be TInt so that it could be used to subtitles? + */ + virtual TMsvId CurrentItemId() const = 0; + + /** + * TMessageListItemType + * different list item types, CurrentItemType + */ + enum TMessageListItemType + { + /** + * unknown item (list is empty?) + */ + EMessageListItemUnknown = 0, + + /** + * Item can be found from message store (CurrentItemId() returns TMsvId) + */ + EMessageListItemMsvItem, + + /** + * something else ( one row list; subtitle?) + */ + EMessageListItemSubtitle, + + /** + * Tree list root + */ + EMessageListItemRoot + }; + + /** + * @return Type of the currently focused item + */ + virtual TMessageListItemType CurrentItemType() const = 0; + + /** + * Changes focus to the entry of the given id. + * @return ETrue if aEntryId found otherwise EFalse. + */ + virtual TBool SetCurrentItemIdL( TMsvId aEntryId ) = 0; + + /** + * Changes focus to the first entry. + */ + virtual void ResetCurrentItemL() = 0; + + + /** + * Searches aMatchString from the list and returns first found entry id. + * Returns KErrNotFound if not found. + * TODO: container should move focus automatically? + */ + virtual TMsvId FindEntry( const TDesC& aMatchString ) const = 0; + + /** + * Finds first unread message from the opened folder. + * aEntry is set KErrNotFound if no unread messages in the folder, + * otherwise id of the first unread message. + * @return ETrue if exactly one unread message in current folder + * EFalse otherwise. + */ + virtual TBool FindFirstUnreadMessageL( TMsvId& aEntryId ) const = 0; + + /** + * TODO: that is not needed if container would be msv session observer + */ + virtual void ItemCountChangedL( TBool aItemsAdded ) = 0; + + /** + * Redraw the listbox. + */ + virtual void RefreshListbox() = 0; + + /** + * Returns array of currently selected (marked) messages. + * (Focus is added, if no other markings) + * Caller's responsibility to destroy array! + * @return Array of selected items. + */ + virtual CMsvEntrySelection* CurrentItemSelectionL() = 0; + + /** + * Refreshes selection by calling MarkItemSelectionL and + * then returns selection by calling CurrentItemSelectionL + * Caller's responsibility to destroy array! + * @return Array of selected items. + */ + virtual CMsvEntrySelection* CurrentItemSelectionRefreshL() = 0; + + /** + * Returns number of marked items including focus if no other selections. + * @return Number of items marked, if no marked items then 1 is returned (focus). + * 0 is returned only if list is empty. + */ + virtual TInt CurrentItemSelectionCount() const = 0; + + /** + * Returns number of selected/marked messages, focus is not included. + * @return Number of items selected (0 or more) + */ + virtual TInt SelectionCount() const = 0; + + /** + * Returns ETrue if aItemId is marked. + */ + virtual TBool IsItemSelected( TMsvId aItemId ) = 0; + + /** + * Clears selection. + */ + virtual void ClearSelection() = 0; + + /** + * Reads selected item indexes from the listbox and then stores + * selected items TMsvId's to iSelectedEntries array. + * If no items marked then currently selected item is added to array + * + * This can be called when for example opening options menu. Options menu + * can overlap whole list box and if then new message is received it is selected + * on background. Now if user selected 'Delete' then message which was selected + * before opening options menu is deleted, not just received message because + * it is stored by this function. + */ + virtual void MarkItemSelectionL() = 0; + + /** + * Adds currently focused item to marked array. + */ + virtual void AddCurrentItemToSelectionL() = 0; + + /** + * Removes currently selected item (== 'cursor') from selected array + */ + virtual void RemoveCurrentItemFromSelection() = 0; + + /** + * TODO: update description for more generic. Now it is only for old list: + * Updates selection indexes by reading selected message's TMsvIds from iSelectedEntries + * and creates new CSelectionIndexArray. + * @param aForceUpdate: set ETrue if index update is wanted to be done even when + * listbox's selection does not include any items. + * Usually this is set true only when calling from CMceBaseListView::HandleEntriesDeletedL + */ + virtual void RefreshSelectionIndexesL( TBool aForceUpdate ) = 0 ; + + /** + * Adds all the messages to listbox selection index array + */ + virtual void AddAllToSelectionL() = 0; + + /** + * Mark all read messages. + */ + virtual void MarkAllReadMessagesL() = 0; + + /** + * Return the count of marked items. if there is no marked item, returns 0; + */ + virtual TInt MarkedItemsCount() = 0; + + /** + * Checks if currently selected item is folder. + * @return ETrue if item aItemId is folder. + * NOTE: aItemId must be found from msg store. + * if item not found, returns EFalse; + */ + virtual TBool IsItemFolder( TMsvId aItemId ) const = 0; + + /** + * Returns ETrue if aItemId is under remote service + */ + virtual TBool IsItemRemote( TMsvId aItemId ) const = 0; + + /** + * checks if aFolderId is currently opened + * Return ETrue if currently opened folder is aFolderId + * For example if needs to be checked if outbox is opened call: + * IsOpenedFolder( KMsvGlobalOutBoxIndexEntryId ) + */ + virtual TBool IsOpenedFolder( TMsvId aFolderId ) const = 0; + + /** + * Sets sort order + * @param aSortType: from MceCommands.hrh + * @param aOrdering: sort ordering(ascending/descending) + */ + virtual void SetSortTypeL( TInt aSortType, TBool aOrdering ) = 0; + + /** + * + */ + virtual void SetMtmUiDataRegistry( MMtmUiDataRegistryObserver* aRegistryObserver ) = 0; + + /** + * Sets empty text for the listbox. + * @param aText: empty text + */ + virtual void SetListEmptyTextL(const TDesC& aText) = 0; + + /** + * TMessageListOperationType + * different mailbox operation types to handle cursor + */ + enum TMessageListOperationType + { + /** + * + */ + EMessageListOperationGeneral = 0, + + /** + * + */ + EMessageListOperationConnect, + + /** + * + */ + EMessageListOperationFetchSelected, + + /** + * + */ + EMessageListOperationFetchNew, + + /** + * + */ + EMessageListOperationDelete, + + /** + * Called when operation is completed + * NOTE: this is not 100% to be called when operation is ready. + * For example imap4 create connection operation is not completed + * when connection is created, onle when connection is closed! + */ + EMessageListOperationCompleted + }; + + + /** + * Called by application when operation is started. + * List container can set anchor item or what ever it wants to keep + * focus in sensible place during the operation. + * OPEN: + * Problem is that operation completion is not informed so + * listcontainer should handle that somehow...? + */ + virtual void SetAnchorItemIdL( + TMessageListOperationType aOperationType ) = 0; + + /** + * TODO: that is not needed if container would be msv session observer + * TODO: remove ItemCountChangedL + * @param aEvent: notified events: + * EMsvEntriesDeleted, EMsvEntriesCreated, EMsvEntriesChanged + * @param aSelection: CMsvEntrySelection of the entries changed/deleted/created. + * @param aDrawNow: EFalse means CMceUi has ViewUpdateSuppressionFlag ON + * so listbox should not redraw itself, then only update anchor item etc. + * When operation is completed then container will get + * SetAnchorItemIdL call with parameter EMessageListOperationCompleted. + * ETrue means that listbox can redraw itself if needed. + * See also SetAnchorItemIdL + */ + virtual void HandleMsvSessionEventL( + MMsvSessionObserver::TMsvSessionEvent aEvent, + CMsvEntrySelection& aSelection, + TBool aDraw ) = 0; + + /** + * Returns ETrue if empty list or there are items selected. + */ + virtual TBool DisplayOptionsMenuFromSelectionKey() const = 0; + + + /** + * Used to show different menu command offered by message list view + * At the moment there are only Expand and Collapse options menu items + * but there can be more... + */ + enum + { + /** + * Return TMessageListCommandNone if all the menu items dimmed, + * otherwise corresponding flag value. + */ + TMessageListCommandNone = 0, + /** + * TMessageListCommandExpand: return this if expand command is visible. + */ + TMessageListCommandExpand = 0x01, + /** + * TMessageListCommandCollapse1: return this if collapse, which is + * immediately after expand command, is visible. + */ + TMessageListCommandCollapse1 = 0x02, + /** + * TMessageListCommandCollapse2: return this if collapse, which is + * after reply command, is visible. + */ + TMessageListCommandCollapse2 = 0x04 + }; + + /** + * Return correct flag to set command visible in message + * list view's options menu. + * if expand valid command, then return TMessageListCommandExpand, + * if collapse valid command, then return either TMessageListCommandCollapse1 + * or TMessageListCommandCollapse2 but NOT both. + */ + virtual TUint OptionsCommandSupported() const = 0; + + /** + * + */ + virtual void HandleOptionsCommandL( TInt aCommand ) = 0; + + /** + * Called when time or date format has been changed or + * midnight is passed. + * @param aChangeFlag: flag defined in TChanges in e32const.h. + * Notifies only the following events: + * - EChangesLocale + * - EChangesMidnightCrossover + * - EChangesSystemTime + */ + virtual void DateTimeFormatChangedL( TInt aChangeFlag ) = 0; + + /** + * Returns container Msk + */ + virtual TInt SetSpecialMskL() = 0; + + /** + * Sets message list container flags + * @param aFlag: Name of the flag + * @param aState: State for the flag + */ + virtual void SetContainerFlag( TMceContainerFlags aFlag, TBool aState ) = 0; + + /** + * Updates icon array in case MTM is released (one row list) + */ + virtual void UpdateIconArrayL() = 0; + + protected: + + /** + * + */ + CMceMessageListContainerBase( CMceMessageListView& aOwningView ); + + protected: + + CMceMessageListView& iOwningView; + + }; + + +#endif + +// End of file