menufw/hierarchynavigator/hnpresentationmodel/inc/hnsuitemodel.h
changeset 0 f72a12da539e
child 54 1b758917cafc
--- /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 <e32base.h>
+#include <e32hashtab.h>
+#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<CHnActionModel>* >& GetActions();
+    
+    /**
+     * Gets actions models.
+     * 
+     * @param aId Event id
+     * @return Array of actions models corresponding to event id
+     */
+    IMPORT_C CArrayPtr<CHnActionModel>* 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<CHnActionModel>* > iActions;
+    
+    /**
+     * Id of "empty" item
+     */
+    TInt iEmptyItemId;
+    
+    /**
+     * Suite observers.
+     * Not own.
+     */
+    RPointerArray<MHnSuiteObserver> iSuiteObservers;
+    
+    /**
+     * Observer priorities array.
+     */
+    RArray<TThreadPriority> 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