diff -r 000000000000 -r f72a12da539e menufw/hierarchynavigator/hnpresentationmodel/inc/hnsuitemodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/menufw/hierarchynavigator/hnpresentationmodel/inc/hnsuitemodel.h Thu Dec 17 08:40:49 2009 +0200 @@ -0,0 +1,598 @@ +/* +* Copyright (c) 2007-2008 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: suite presentation model +* +*/ + + +#ifndef C_HNSUITEMODEL_H +#define C_HNSUITEMODEL_H + +#include +#include +#include "hnsuiteobserver.h" +#include "hnglobals.h" +#include "hnitemmodel.h" + +class CHnSuiteModelContainer; +class CHnItemModel; +class MHnMenuItemModelIterator; +class CHnActionModel; +class CHnEventHandler; +class MHnSuiteObserver; +class CHnItemsOrder; +class CHnItemFocusHandler; + +/** + * Suite model class. + * + * Represents suite. Evaluated from CHnMdSuite class, contains + * all data from services and xml configuration. It is used to fill data + * displayed on the screen. + * + * @lib hnpresentationmodel + * @since S60 5.0 + * @ingroup group_hnpresentationmodel + */ +NONSHARABLE_CLASS( CHnSuiteModel ) : public CBase + { + +public: + + /** + * Two-phased constructor. + * + * @since S60 5.0 + * @param aEventHandler Event handler. + * @param aGenreName Suite genre identifier. + */ + IMPORT_C static CHnSuiteModel* NewL( CHnEventHandler& aEventHandler, + const TDesC& aGenreName ); + + /** + * Virtual Destructor. + * + * @since S60 5.0 + */ + IMPORT_C ~CHnSuiteModel(); + + /** + * Return Suite's genre name. + * Used for identifying the Suite. + * + * @since S60 v5.0 + * @return The genre name. + */ + IMPORT_C const TDesC& SuiteName() const; + + /** + * Return Suite's name + * This should be displayed in Status Pane + * + * @since S60 v5.0 + * @return the name + */ + IMPORT_C const TDesC& Title() const; + + /** + * Sets the Suite's name + * + * @since S60 v5.0 + * @param aName the name + */ + IMPORT_C void SetTitleL( const TDesC& aName ); + + /** + * Return Suite's empty text + * + * @since S60 v5.0 + * @return empty text if defined o + */ + IMPORT_C const TDesC& EmptyText() const; + + /** + * Sets the Suite's empty text + * + * @since S60 v5.0 + * @param aName the name + */ + IMPORT_C void SetEmptyTextL( const TDesC& aName ); + + /** + * Notifies all of the observers. + * + * @since S60 v5.0 + * @param aEventType Event to be pushed to all observers. + */ + IMPORT_C void NotifyObserversL( THnCustomSuiteEvent aEventType ); + + /** + * Method used to indicate that item evaluation has finished. + * + * @since S60 v5.0 + * @param aModelItemNumber Index of the item model. + * @return True if observers were notified. + */ + IMPORT_C TBool ItemEvaluationFinishedL( TInt aModelItemNumber ); + + /** + * Method used to indicate that item evaluation has finished. + * + * @since S60 v5.0 + */ + IMPORT_C TBool SuiteEvaluationFinishedL(); + + /** + * Return Suite's Widget type + * + * @since S60 v5.0 + * @return the Widget type or EUnspecified if not set + */ + IMPORT_C TInt WidgetType() const; + + /** + * Sets the Suite's Widget type + * Also sets the correct template to the Widget Model + * + * @since S60 v5.0 + * @param aWidgetType Suite's Widget type + */ + IMPORT_C void SetWidgetType( THnSuiteWidgetType aWidgetType ); + + /** + * Gets menu structure for certain model + * + * @since S60 v5.0 + * @param aItemId Id of the item model + * @return Pointer to menu model + */ + IMPORT_C MHnMenuItemModelIterator* GetMenuStructureL( TInt aItemId ); + + /** + * Adds item both to Aakash model and Matrix model. + * + * @since S60 v5.0 + * @param aItemModel Item model. + * @param aId Item id + * @param aItemModelNumber Index of data model that creates the item. + * @param aItemModelPosition Position in the particular data model + */ + IMPORT_C void AddItemL( TInt aId, CHnItemModel* aItemModel, + TInt aItemModelNumber, TInt aItemModelPosition ); + + /** + * Updates item template with template from suite model. + * + * @since S60 v5.0 + * @param aId Id of the item to update template + */ + IMPORT_C void UpdateItemTemplateL( TInt aId ); + + /** + * Updates item in Aakash model. + * + * @since S60 v5.0 + * @param aPreviousItemCount Previous number of items in the suite. + */ + IMPORT_C void RefreshMulModelL( TInt aPreviousItemCount = 0 ); + + /** + * Sets template for suite. + * + * @since S60 v5.0 + * @param aValue template of the suite + */ + IMPORT_C void SetTemplateL( const TDesC8& aValue ); + + /** + * Gets template. + * + * @since S60 v5.0 + * @return template of the suite + */ + IMPORT_C const TDesC8& GetTemplate() const; + + /** + * Remove model by id both from Aakash model and Matrix model. + * + * @since S60 v5.0 + * @param aId Id of the item to remove + */ + IMPORT_C void RemoveItemL( TInt aId ); + + /** + * Removes all items from the suite model. + * + * @since S60 v5.0 + */ + IMPORT_C void RemoveAllItems(); + + /** + * Gets item model id by its position in Aakash model. + * + * @since S60 v5.0 + * @param aIndex Index of visual item in Aakash model + * @return Id of the item model for input parameter + */ + IMPORT_C TInt IdByIndex( TInt aIndex ); + + /** + * Gets item model count. + * + * @since S60 v5.0 + * @return Count of item models. + */ + IMPORT_C TInt GetItemModelsCount(); + + /** + * Gets actions models. + * + * @return List of all actions for every event. + */ + IMPORT_C RHashMap< TInt, CArrayPtr* >& GetActions(); + + /** + * Gets actions models. + * + * @param aId Event id + * @return Array of actions models corresponding to event id + */ + IMPORT_C CArrayPtr* GetActions( TInt aId ); + + /** + * Gets item model. + * + * @param aId Item model id + * @return Item model corresponding to id, if not found returns NULL + */ + IMPORT_C CHnItemModel* GetItemModel( TInt aId ); + + /** + * Returns visibility of toolbar for suite + * + * @return TRUE if visible, otherwise FALSE + */ + IMPORT_C TBool HasToolbar() const; + + /** + * Registers suite observer. + * + * @param aObserver observer + * @param aPriority priority + */ + IMPORT_C void RegisterSuiteObserverL( MHnSuiteObserver* aObserver, + TThreadPriority aPriority = EPriorityNormal); + + /** + * Unregisters suite observer + * + * @param aObserver observer + */ + IMPORT_C void UnregisterSuiteObserver( MHnSuiteObserver* aObserver); + + /** + * Checks if one of items between aIndexStart and + * aIndexEnd is move-locked + * + * @param aIndexStart starting item + * @param aIndexEnd ending item + * @return true if one of the preceeding items is locked + */ + IMPORT_C TBool IsItemBetweenMoveLocked( TInt aIndexStart, + TInt aIndexEnd ); + + /** + * Handles event. + * + * @since S60 5.0 + * @param aEventId Event id. + * @param aRecipientId Recipient Id. + * @param aEventParameters Parameters to event. + * @return Status code. + */ + TInt OfferHnEventL( + const TInt aEventId, const TInt aRecipientId, + CLiwGenericParamList* aEventParameters ); + + /** + * Reorders item. + * + * @param aFromIndex Index of the item to move. + * @param aToIndex Index of the item to shift to. + */ + IMPORT_C TInt ReorderItemsL( TInt aFromIndex, TInt aToIndex ); + + /** + * Returns items order object. + * + * @return items order object from suite model + */ + IMPORT_C CHnItemsOrder* GetItemsOrder(); + +public: + + /** + * Returns true if an item is move locked. + * + * @param aIndex item's index + * @return true if an item is move-locked otherwise false + */ + IMPORT_C TBool IsItemMoveLocked( TInt aIndex ); + + /** + * Returns type of an item. + * + * @param aIndex an item's index + * @return item's type + */ + IMPORT_C TMcsItemType GetItemType( TInt aIndex ); + + /** + * Returns highlighted item's id. + * + * @since S60 v5.0 + * @return highlighted item's id + */ + IMPORT_C TInt GetSuiteHighlight(); + + /** + * Set highlighted item's id. + * + * @since S60 v5.0 + * @param aHighLight sets highlighted item's id + */ + IMPORT_C void SetSuiteHighlightL( TInt aHighLight ); + + /** + * Add items index to focus queue. Item will be highlighted/focused + * during evaluation. + * + * @since S60 v5.0 + * @param aCustomId Custom Id of an item which will be highlighted + */ + IMPORT_C void QueueFocus( TInt aCustomId ); + + /** + * Sets suite's custom id. + * + * @since S60 v5.0 + * @param aCustomId Custom identifier to be set. + */ + IMPORT_C void SetCustomId( TInt64 aCustomId ); + + /** + * Returns custom identifier of the suite. + * + * @since S60 v5.0 + * @return Custom identifier of the suite. + */ + IMPORT_C TInt64 CustomId(); + + /** + * Activates highlight handling. + * Used for highlight events for items. + * + * @since S60 v5.0 + * @param aActive ETrue if active. + */ + IMPORT_C void SetActiveL( TBool aActive ); + + /** + * Returns the state of the suite. + * + * @since S60 v5.0 + * @return ETrue if active. + */ + IMPORT_C TBool IsActive(); + + /** + * Notifies the model that the suite is visible. + * Used for highlight events for items. + * + * @since S60 v5.0 + * @param aVisible ETrue if visible. + */ + IMPORT_C void SetVisibleL( TBool aVisible ); + + /** + * Returns item model matching given criteria. + * + * @param aCustomId Item's custom id. + * @param aIndex + * @return Item model matching given custom_id, otherwise null. + */ + IMPORT_C CHnItemModel* GetMatchingItemModelL( TInt64 aCustomId, TInt& aIndex ); + + /** + * Returns the suite's exit mode flag. + */ + IMPORT_C TExitMode ExitMode(); + + /** + * Sets the exid mode. + */ + IMPORT_C void SetExitMode( TExitMode aExitMode ); + + /** + * Removes all LIW objects owned by this object. + * + * LIW objects owned by non-LIW objects that are owned by + * this object are also removed. + * @since S60 5.0 + */ + void RemoveLiwObjects(); + +private: + + /** + * Struct holding highlight information. + * iWidgetIndex - index of the visible item in the UI widget. + * iItemId - presentation model ID of the item. + * iCustomId - custom ID from data provider. + * + * @since S60 v5.0 + */ + struct TSuiteHighlight + { + /** Widget index. */ + TInt iWidgetIndex; + /** Item Id. */ + TInt iItemId; + /** Custom Id. */ + TInt64 iCustomId; + }; + + /** + * C++ default constructor. + * + * @since S60 v5.0 + * @param aEventHandler Event handler. + */ + CHnSuiteModel( CHnEventHandler& aEventHandler ); + + /** + * Standard symbian 2nd phase constructor. + * + * @since S60 v5.0 + * @param aGenreName Genre name for model + */ + void ConstructL( const TDesC& aGenreName ); + + /** + * Launches the appropriate action if allowed. + * Used for highlight events for items. + * + * @since S60 v5.0 + * @param aItemId ID of the item. + * @param aFocused ETrue if focused. + */ + void HandleItemFocusL( TInt aItemId, TBool aFocused ); + + /** + * Set highlight on item. + * + * @since S60 v5.0 + * @param aCustomId Custom id of the item. + */ + void SetSuiteHighlightByCustomIdL( TInt64 aCustomId ); + +private: + + /** + * Genre name. + * Own. + */ + HBufC* iSuiteName; + + /** + * Suite name. + * Own. + */ + HBufC* iTitle; + + /** + * Suite empty text + * Own. + */ + HBufC* iEmptyText; + + /** + * Suite Widget type + */ + THnSuiteWidgetType iWidgetType; + + /** + * Template. + */ + RBuf8 iTemplate; + + /** + * Holds models evaluated from CHnMdItem objects + */ + RHashMap< TInt, CHnItemModel* > iItemsModels; + + /** + * Holds positions of item ids and suite id. + * Own. + */ + CHnItemsOrder* iItemsOrder; + + /** + * Actions corresponding to events + * event id <=> array of actions models + */ + RHashMap< TInt, CArrayPtr* > iActions; + + /** + * Id of "empty" item + */ + TInt iEmptyItemId; + + /** + * Suite observers. + * Not own. + */ + RPointerArray iSuiteObservers; + + /** + * Observer priorities array. + */ + RArray iObserverPriorities; + + /** + * Stores IDs of currently higlighted item. + */ + TSuiteHighlight iSuiteHighlight; + + /** + * Focus queue. + */ + TInt iFocusQueue; + + /** + * Custom id. + */ + TInt64 iCustomId; + + /** + * Event Handler from Suite Container. + * Used for executing item focused/unfocused events. + * + * Not Own. + */ + CHnEventHandler& iEventHandler; + + /** + * Indicates if the suite is active. + * Used for handling highlight events for items. + */ + TBool iIsActive; + + /** + * Indicates if the suite is visible. + * Used for handling highlight events for items. + */ + TBool iIsVisible; + + /** + * Exit mode. + */ + TExitMode iExitMode; + /** + * Active Focus Handler. + */ + CHnItemFocusHandler* iItemFocusHandler; + }; + +#endif // C_HNSUITEMODEL_H