--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/mce/inc/MceMainViewListItemArray.h Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,496 @@
+/*
+* 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:
+* Item array for the message items to be displayed by mce.
+* Main view items are kept in memory (CArrayFixFlat<TMceListItem>) when created but
+* Message view list items are fetched from the msgs when needed in MdcaPoint function
+*
+*/
+
+
+
+#ifndef MCEMAINVIEWLISTITEMARRAY_H
+#define MCEMAINVIEWLISTITEMARRAY_H
+
+// INCLUDES
+
+#include <bldvariant.hrh>
+#include <msvapi.h> // MMsvSessionObserver
+#include <bamdesca.h> // MDesCArray
+#include <badesca.h> // CDesCArrayFlat
+
+
+#include "MceListItem.h"
+#include "MceUtils.h"
+#include "MceUtilsIdleClass.h"
+
+#include "mcetemplate.h"
+#include <PhCltTypes.h>
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class CMsvSession;
+class CMceBitmapResolver;
+class MMtmUiDataRegistryObserver;
+class CMtmUiDataRegistry;
+class CImumInternalApi;
+class CImumInSettingsData;
+class CMceLogEngine;
+class CRepository;
+class CCoeEnv;
+
+/**
+* Main view list item array observer.
+* Called when main view list item texts are updated
+* @since S60 5.0
+*/
+class MMceMainViewListItemArrayObserver
+ {
+ public:
+ /**
+ * Called when idle loader has changed main view text
+ * TODO: add what has happened, add, remove, update etc.?
+ */
+ virtual void MceListItemArrayChangedL(
+ ) = 0;
+ };
+
+
+// CLASS DECLARATION
+
+/**
+* Item array for the message items to be displayed by mce.
+* Main view items are kept in memory (CArrayFixFlat<TMceListItem>) when created but
+* Message view list items are fetched from the msgs when needed in MdcaPoint function
+*/
+class CMceMainViewListItemArray :
+ public CArrayFixFlat<TMceListItem>,
+ public MMsvSessionObserver,
+ public MDesCArray,
+ public MMceUtilsIdleClassObserver
+ {
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CMceMainViewListItemArray* NewL(
+ CMsvSessionPtr aSession,
+ TMsvId aFolderId,
+ TMceListType aListType,
+ CMceBitmapResolver& aBitmapResolver );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CMceMainViewListItemArray();
+
+ public:
+
+ /**
+ * Returns list index of the message
+ * @param aItemId: item to be searched.
+ * @return Index of the item.
+ */
+ TInt ItemIndex( TMsvId aItemId ) const;
+
+
+ /**
+ * Returns list index of the extra item:
+ * KMceWriteMessageListIdValue
+ * KMceNoMailboxesListIdValue
+ * KMceDeliveryReportsListIdValue
+ * @param aItemId: item to be searched.
+ * @return Index of the item.
+ * @since S60 v5.0
+ */
+ TInt ExtraItemIndex( TInt aItemId ) const;
+
+ /**
+ * Returns message id of the list item.
+ * @param aIndex: index of the item to be returned
+ * @return message id (TMsvId)
+ */
+ TMsvId ItemId( TInt aIndex ) const;
+
+ /**
+ * @param aIndex
+ * @return TMceListItem
+ */
+ const TMceListItem Item( TInt aIndex ) const;
+
+ /**
+ * Changes folder of the list.
+ * @param aFolderId: folder id to be changed.
+ */
+ void SetFolderL( TMsvId aFolderId );
+
+ /**
+ * Returns main view's extra item command text.
+ * See more details of main view extra items from
+ * mceextraitems project.
+ * @param aCommandId: command id received from the menu (CMceMainViewListView::StartAppL)
+ * @return: command text buffer. for example 'http://www.nokia.com'.
+ * if aCommandId not found, then empty buffer returned.
+ * @since S60 v5.0
+ */
+ HBufC* ExtraItemCommandLC( TInt aCommandId );
+
+private:
+ /**
+ * Add item not in msgs (CBS, ...).
+ * @param aNewItem: TMceListItem to be added to the list
+ * @param aIndex: index in the list to be added (0 = first)
+ */
+ void AddExtraItemL( TMceListItem& aNewItem, TInt aIndex );
+
+ /**
+ * Add item not in msgs (CBS, ...).
+ * @param aNewItem: TMceListItem to be added to the list
+ * @param aIndex: index in the list to be added (0 = first)
+ * @param aIconIndex: index of the icon in file MceExtraIcons
+ * @param aApplicationUid: Related Application uid. This is used
+ * when loading correct application icon. If this is not set,
+ * then icon is loaded from MceExtraIcons.
+ */
+ void AddExtraItemWithIconL(
+ TMceListItem& aNewItem,
+ TInt aIndex,
+ TInt aIconIndex,
+ TUid aApplicationUid );
+
+public:
+ /**
+ * Help needs info, if remote folder or own folder
+ */
+ TBool IsFolderRemote() const;
+
+ /**
+ * Checks if mail account is always online
+ * @param aAccount: service id
+ * @param aAlwaysOnlineSettings: CIMASettingsDataExtension reference
+ * Returns ETrue, if always online account
+ */
+ TBool AlwaysOnlineAccountL(
+ const TMsvId aAccount,
+ const CImumInSettingsData& aAlwaysOnlineSettings ) const;
+
+ /**
+ * Sets roaming flag
+ * @param aRoaming: roaming flag
+ */
+ void SetRoaming( TBool aRoaming );
+
+ /**
+ * Gets roaming flag
+ */
+ TBool Roaming() const;
+
+ /**
+ * Sets always online flag
+ * @param aAlwaysOnline: always online flag
+ */
+ void SetAlwaysOnline( TBool aAlwaysOnline );
+
+ /*
+ * Gets results from MceUtils::GetHealthyMailboxListL
+ * @para aCount: iMailboxArray.Count()
+ * @return err from MceUtils::GetHealthyMailBoxL()
+ * from 3.2
+ */
+ TInt GetHealthyMailboxListResult( TInt& aCount );
+
+
+ public: // Functions from base classes
+
+ /**
+ * From MDesCArray
+ */
+ virtual TInt MdcaCount() const;
+
+ /**
+ * From MDesCArray
+ */
+ virtual TPtrC MdcaPoint(TInt aIndex) const;
+
+ public: // Functions from base classes
+ /**
+ * From MMsvSessionObserver
+ */
+ virtual void HandleSessionEventL(
+ TMsvSessionEvent aEvent,
+ TAny* aArg1,
+ TAny* aArg2,
+ TAny* aArg3);
+
+ /**
+ * Reconstructs main view folder list
+ */
+ void ConstructMainViewL();
+
+ /**
+ * Help needs folder id
+ */
+ TMsvId FolderId() const;
+
+ /**
+ * Help needs info, if remote account is connected
+ */
+ TBool IsConnected() const;
+
+ /**
+ * Returns the pointer to Imum's internal email API
+ *
+ * @since S60 v3.2
+ * @return pointer to email API
+ */
+ CImumInternalApi* GetEmailApi();
+
+ /**
+ *
+ */
+ void ResetIconIndexL( TInt aIndex );
+
+ /**
+ *
+ */
+ void StartListUpdateL();
+
+ TBool MMceUtilsIdleClassStepL();
+ void SetListItemArrayObserver( MMceMainViewListItemArrayObserver* aObserver );
+
+ private:
+
+ /**
+ * By default Symbian OS constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ *
+ */
+ CMceMainViewListItemArray(
+ CMsvSessionPtr aSession,
+ TMsvId aFolderId,
+ TMceListType aListType,
+ CMceBitmapResolver& aBitmapResolver );
+
+ /**
+ * Adds TMsvEntry to the array (used only in Main view).
+ * @param aEntry TMsvEntry of the item to be added.
+ * @return nothing
+ */
+ void AddItemL( const TMsvEntry& aEntry );
+
+ /**
+ * Adds main view folders to the array (used only in Main view)
+ */
+ void AddFoldersL();
+
+ /**
+ * Adds folders Inbox and Documents to the array
+ * (used only in Main view).
+ */
+ void AddInboxDocumentsL();
+
+ /**
+ * Adds folders Draft, Sent, Outbox to the array
+ * (used only in Main view).
+ */
+ void AddDraftSentOutboxL();
+
+ /**
+ * Appends aSourceString to aTargetString and changes KColumnListSeparator
+ * characters to space characters.
+ * @param aTargetString buffer to append aSource string.
+ * @param aSourceString source buffer.
+ */
+ void StripAndAppendString(TDes& aTargetString, const TDesC& aSourceString) const;
+
+ /**
+ * Creates string for main view listbox. Called by MdcaPoint.
+ * @param aIndex: index of the message to be drawn
+ */
+ TPtrC MakeStringForMainView( TInt aIndex ) const;
+
+ /**
+ * Checks if always online account and always online date/time valid
+ * @param aAccount: service id
+ * @return ETrue,if always online account and always online date/time valid
+ */
+ TBool AlwaysOnlineDateTimeValidL( const TMsvId aAccount, TBool &aoDefined ) const;
+
+
+ /**
+ * Handles folders, messages string
+ * @param aBuffer: buffer to be append
+ * @param aEntry TMsvEntry of the item.
+ */
+ void HandleFolderMessagesStringL( TDes& aBuffer, const TMsvEntry& aEntry ) const;
+
+ /**
+ *
+ *
+ * @since S60 v3.2
+ * @param
+ * @return
+ * @leave &(leavedesc)s
+ */
+ void StoreIndex( const TInt aIndex );
+
+ /**
+ *
+ *
+ * @since S60 v3.1
+ * @param
+ * @return
+ * @leave
+ */
+ void MakeItemL(
+ TMceListItem& aListItem,
+ const TMsvEntry& aEntry ) const;
+
+ /**
+ *
+ *
+ * @since S60 v3.1
+ * @param
+ * @return
+ * @leave
+ */
+ void InsertItemL(
+ const TMsvEntry& aEntry,
+ const TInt aIndex );
+
+ /**
+ * Checks if the entry can be added to list
+ *
+ * @since S60 v3.1
+ * @param aEntry Entry to be checked
+ * @param aId Id to be checked
+ * @return ETrue when the entry can be added to list
+ * @return EFalse when the entry can NOT be added to list
+ */
+ TBool ShouldAddToListL(
+ const TMsvEntry& aEntry,
+ const TMsvId aId );
+
+
+ /**
+ * Gathers all the services that needs to be shown to the list
+ *
+ * @since S60 v3.1
+ * @leave KErrNoMemory when failed to add item to list
+ * @return Index of the draft folder
+ */
+ TInt CollectServicesL( const TMsvId aId );
+
+ /**
+ *
+ *
+ * @since S60 v3.1
+ * @param
+ * @return
+ * @leave
+ */
+ void AddMailboxesL( const TInt aMailboxIndex );
+
+ /**
+ *
+ */
+ void AppendMessageCountString( TDes& aBuffer, TInt aMessageCount) const;
+
+
+
+ /**
+ * Adds items 'Write message', 'Mailbox' and 'Delivery reports'
+ * from the string resource. Note that this is different
+ * than iExtraItemsArray despite naming...
+ * @since S60 v5.0
+ */
+ void AddExtraItemFromResourceL( TInt aResourceId, TInt aCommandId );
+
+
+ /**
+ * Adds items from mceextraitems resource file to iExtraItemsArray.
+ * That is done only on construct. If main view items needs to be refreshed
+ * then items are read from iExtraItemsArray and no need to
+ * open resource again.
+ * @since S60 v5.0
+ */
+ void ReadExtraItemsResourceL();
+
+ /**
+ * Adds mceextraitem from iExtraItemsArray to actual main view array.
+ * @param: aIndex: index of the item in iExtraItemsArray.
+ * @since S60 v5.0
+ */
+ void AddExtraItemCommandL( TInt aIndex );
+
+ /**
+ * Adds TMsvEntry item from message store to main view array
+ * @param: aEntryId: id of the entry to be added.
+ * @since S60 v5.0
+ */
+ void AddFolderItemL( TMsvId aEntryId );
+
+ /**
+ * Reads main view item order from the central repository.
+ * Order of the items are stored in iMainViewItems so
+ * when refresh is needed, no need to open cenrep file again.
+ * @since S60 v5.0
+ */
+ void ReadMainViewItemsFromRepositoryL();
+
+ //Calculates the visible count excluding FS email stuff
+ TInt FindVisibleCountL(TMsvId serviceId) const;
+ private: // Data
+ CMsvSessionPtr iSession;
+ CMsvEntry* iFolderEntry;
+ CMceBitmapResolver& iBitmapResolver;
+ MMtmUiDataRegistryObserver* iRegistryObserver;
+ HBufC* iListBoxText;
+ CDesCArrayFlat* iNumberOfMessagesStrings;
+ TBool iAlwaysOnline;
+ TBool iRoaming;
+ // Array of mailbox Ids
+ MImumInHealthServices::RMailboxIdArray iMailboxArray;
+ // Owned: Pointer to email API object
+ CImumInternalApi* iEmailApi;
+ TInt iErrGetHealthyMailBoxList;
+ TInt iMaiboxArrayCount;
+
+ CMceUtilsIdleClass* iIdleLoader;
+ TInt iIdleCounter;
+ MMceMainViewListItemArrayObserver* iListItemArrayObserver;
+
+ CCoeEnv* iCoeEnv;
+ CMtmUiDataRegistry* iUiRegistry;
+ CMsvEntrySelection* iMainViewItems;
+ CMceMainViewExtraItemArray* iExtraItemsArray;
+
+ TInt iDescriptionLength;
+ //FS Email stuff
+ TBool iSelectableEmail;
+
+ /**
+ * CMail Changes, it will be True if
+ * KFeatureIdFfEmailFramework is enabled
+ */
+ TBool iEmailFramework;
+ };
+
+#endif // MCEMAINVIEWLISTITEMARRAY_H
+
+// End of File