--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/menufw/hierarchynavigator/hnmetadatamodel/inc/hnmdmodel.h Wed Sep 01 12:32:46 2010 +0100
@@ -0,0 +1,549 @@
+/*
+* 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:
+*
+*/
+
+
+
+#ifndef C_HNMDMODEL_H
+#define C_HNMDMODEL_H
+
+#include <e32base.h>
+#include <xmlengelement.h>
+#include <liwgenericparam.h>
+#include <eikenv.h>
+#include "hnglobals.h"
+
+class CHnMdLocalization;
+class CHnSuiteModelContainer;
+class CHnFilter;
+class THnIdGenerator;
+class CHnMdSuite;
+class CHnMdModel;
+class CHnItemId;
+class MHnSuiteObserver;
+class CHnXmlModelProvider;
+class CHnMdModel;
+class MHnMdModelEventObserver;
+class CHnSuiteModel;
+class CHnRepositoryObserver;
+class MHnEditModeInterface;
+class CHnBitmapIdCache;
+
+/**
+ * Type of the property.
+ *
+ * @ingroup group_hnmetadatamodel
+ */
+enum TPropertyType
+ {
+ EUndefined = 0,
+ EGenre,
+ EVisualItemCount
+ };
+
+/**
+ * Mode type.
+ *
+ * @ingroup group_hnmetadatamodel
+ */
+enum TMdMode
+ {
+ EMdModeNormal = 0,
+ EMdModeEdit
+ };
+
+/**
+ * Common pointers.
+ *
+ * @since S60 5.0
+ * @ingroup group_hnmetadatamodel
+ */
+struct THnMdCommonPointers
+ {
+ /**
+ * Not own - Localization.
+ */
+ CHnMdLocalization* iLocalization;
+
+ /**
+ * Not own - Query generator.
+ */
+ THnIdGenerator* iIdGenerator;
+
+ /**
+ * Not own - Suite model container.
+ */
+ CHnSuiteModelContainer* iContainer;
+
+ /**
+ * Not own - Meta data model.
+ */
+ CHnMdModel* iModel;
+
+ /**
+ * Not own - Xml model provider.
+ */
+ CHnXmlModelProvider* iXmlModelProvider;
+
+ /**
+ * Not own - Cache for bitmap and mask ids.
+ */
+ CHnBitmapIdCache* iBitmapIdCache;
+
+ /**
+ * Not own - Model event observer.
+ */
+ MHnMdModelEventObserver* iModelEventObserver;
+
+ /**
+ * Not own - Edit mode interface.
+ */
+ MHnEditModeInterface* iEditModeInterface;
+
+ /**
+ * Not own - Handler to file server session;
+ */
+ RFs& iFs;
+
+ /**
+ * Gets static pointer from TLS.
+ */
+ static THnMdCommonPointers* Static() {return (THnMdCommonPointers*)Dll::Tls(); }
+
+ /**
+ * Sets pointer to TLS.
+ *
+ * @param aCmnPtrs Pointer to set
+ */
+ static void SetStatic( THnMdCommonPointers* aCmnPtrs ) { Dll::SetTls(aCmnPtrs); }
+
+ private:
+
+ // only model can create it
+ friend class CHnMdModel;
+
+ /**
+ * Standard C++ consturctor.
+ */
+ THnMdCommonPointers() : iFs( CEikonEnv::Static()->FsSession() )
+ {
+ iLocalization = NULL;
+ iIdGenerator = NULL;
+ iContainer = NULL;
+ iModel = NULL;
+ iXmlModelProvider = NULL;
+ iModelEventObserver = NULL;
+ iEditModeInterface = NULL;
+ }
+
+ /**
+ * Copy constructor declared as private to disallow copying.
+ *
+ * @param aCmnPtrs Pointer to set.
+ */
+ THnMdCommonPointers( const THnMdCommonPointers& aCmnPtrs ):iFs( aCmnPtrs.iFs ) { }
+
+ /**
+ * Assignment operator
+ */
+ THnMdCommonPointers& operator=( const THnMdCommonPointers& ){return *this;}
+ };
+
+/**
+ * Id generator.
+ *
+ * @lib ?library
+ * @since S60 5.0
+ * @ingroup group_hnmetadatamodel
+ */
+struct THnIdGenerator
+ {
+ /**
+ * Standatrd C++ constructor.
+ */
+ THnIdGenerator()
+ {
+ iId = 0;
+ }
+
+ /**
+ * Gets next id.
+ * @return Next id.
+ */
+ TInt GetNextId()
+ {
+ return iId++;
+ }
+ private:
+
+ /**
+ * Copy constructor declared as private to disallow copying.
+ * @param aGenerator Id generator;
+ */
+ THnIdGenerator(const THnIdGenerator& aGenerator);
+
+ /**
+ * Assignment operator.
+ */
+ THnIdGenerator& operator=(const THnIdGenerator&);
+
+ /**
+ * Id
+ */
+ TInt iId;
+ };
+
+/**
+ * Model event observer.
+ *
+ * @since S60 5.0
+ * @ingroup group_hnmetadatamodel
+ */
+class MHnMdModelEventObserver
+ {
+ public:
+
+ /**
+ * Handles modlde event.
+ *
+ * @since S60 5.0
+ * @param aEventName Event name.
+ * @param aParams Parameters.
+ */
+ virtual TInt HandleModelEventL( const TDesC& aEventName,
+ CLiwGenericParamList& aParams ) = 0;
+ };
+
+/**
+ * Meta data model
+ *
+ * This is the main class of the Meta Data Model component.
+ *
+ * This class is the entry point for building the meta data model
+ * and for evaluation.
+ *
+ * @since S60 5.0
+ * @ingroup group_hnmetadatamodel
+ */
+NONSHARABLE_CLASS( CHnMdModel ) : public CBase
+ {
+public:
+ enum TForegroundGainTriggeringEvent
+ {
+ EWhenAnySuiteIsEvaluated,
+ EWhenCurrentTopSuiteIsEvaluated,
+ ENever
+ };
+public:
+
+ /**
+ * Two-phase constructor.
+ *
+ * @since S60 5.0
+ * @param aModelObserver Model observer.
+ * @param aSuiteModelContainer Suite model container.
+ * @return Fully constructed object.
+ */
+ IMPORT_C static CHnMdModel* NewL( MHnMdModelEventObserver* aModelObserver,
+ CHnSuiteModelContainer * aSuiteModelContainer );
+
+ /**
+ * Two-phase constructor.
+ *
+ * @since S60 5.0
+ * @param aModelObserver Model observer.
+ * @param aSuiteModelContainer Suite model container.
+ * @return Fully constructed object.
+ */
+ IMPORT_C static CHnMdModel* NewLC( MHnMdModelEventObserver* aModelObserver,
+ CHnSuiteModelContainer * aSuiteModelContainer );
+
+ /**
+ * Standard C++ virtual destructor.
+ *
+ * @since S60 5.0
+ */
+ virtual ~CHnMdModel();
+
+ /**
+ * Evaluates the model. Takes filter as a parameter.
+ *
+ * @since S60 5.0
+ * @param aFilter Filter.
+ */
+ IMPORT_C void EvaluateL( CHnFilter& aFilter );
+
+ /**
+ * Manages evaluation lock.
+ *
+ * @param aLock Locks evaluation if set to ETrue.
+ * @param aEvaluate Runs evaluation if aEvaluate == ETrue.
+ */
+ IMPORT_C void SetEvaluationLockL( TBool aLock, TBool aEvaluate = ETrue );
+
+ /**
+ * Evaluates the model.
+ *
+ * @since S60 5.0
+ */
+ IMPORT_C void EvaluateL();
+
+ /**
+ * Switches between edit mode and normal mode
+ *
+ * @since S60 5.0
+ * @param aMode Suite model container.
+ */
+ IMPORT_C void SetModeL( TMdMode aMode );
+
+
+ /**
+ * Gets suite's meta data model.
+ *
+ * @since S60 5.0
+ * @return Suite meta data model.
+ */
+ IMPORT_C CHnMdSuite* GetLastSuite();
+
+ /**
+ * Gets suite's meta data model.
+ *
+ * @since S60 5.0
+ * @param aPosition Position of the suite in the stack.
+ * @return Suite meta data model.
+ */
+ CHnMdSuite* GetSuite( TInt aPosition );
+
+ /**
+ * Gets suite's parameters..
+ *
+ * @since S60 5.0
+ * @param aPosition Position of the suite in the stack,
+ * from which gets parameters.
+ * @return Suite meta data model.
+ */
+ IMPORT_C CLiwGenericParamList& GetSuiteParameters( TInt aPosition );
+
+
+ /**
+ * Handles back event.
+ *
+ * @since S60 v3.2
+ * @param aMulContainer Suite model container.
+ * @param aGenre Name of the suite.
+ * @param aIterations Number of iterations.
+ * @return Error code.
+ */
+ IMPORT_C TInt HandleBackEventL( CHnSuiteModelContainer* aMulContainer,
+ const TDesC& aGenre, TInt aIterations = KModelCountForRoot );
+
+ /**
+ * Handles sis installation event.
+ *
+ * @since S60 v3.2
+ * @param aMulContainer Suite model container.
+ */
+ IMPORT_C void HandleSisInstallationEventL(
+ CHnSuiteModelContainer* aMulContainer );
+
+ /**
+ * Loads a suite from xml data.
+ *
+ * @since S60 v5.0
+ * @param aGenre Name of the suite.
+ * @param aSuiteParams Suite parameters.
+ * @return Error code.
+ */
+ IMPORT_C TInt LoadSuiteL( const TDesC& aGenre, CLiwGenericParamList* aSuiteParams = NULL );
+
+ /**
+ * Check if suite model exists.
+ *
+ * @since S60 5.0
+ * @param aSuiteModel Suite model name.
+ * @return ETrue if suite model exists, otherwise EFalse.
+ */
+ IMPORT_C TBool SuiteModelExistsL( const TDesC8& aSuiteModel );
+
+ /**
+ * Gets suite's meta data model.
+ *
+ * @since S60 5.0
+ * @param aUri Current ui.
+ * @return Suite meta data model.
+ */
+ IMPORT_C void GetCurrentUriL( TDes& aUri );
+
+ /**
+ * Deletes last loaded suite model from data model.
+ *
+ * @since S60 5.0
+ */
+ IMPORT_C void DeleteLastSuite();
+
+ /**
+ * Informs metadatamodel to ignore evaluations or
+ * to performing evaluations, according to the
+ * given parameter.
+ *
+ * @since S60 5.0
+ * @param aIgnore Metadatamodel ignores evaluations when set to ETrue.
+ */
+ IMPORT_C void IgnoreEvaluations( TBool aIgnore );
+
+ /**
+ * Request that menu goes to foreground when evaluation completes.
+ *
+ * Default behavior is not to go to foreground when evaluation
+ * completes. A change of this behavior requested with this method is
+ * only effective until the menu is sent to foreground (once). Then the
+ * default behavior is assumed again.
+ * Subsequent calls override previous changes.
+ *
+ * @since S60 5.0
+ * @param aWhen Determines when the foreground should be gained.
+ * Possible values are defined in the
+ * TForegroundGainTriggeringEvent enum. The value ENever
+ * simply means not to bring menu to foreground.
+ */
+ IMPORT_C void QueueForeground( TForegroundGainTriggeringEvent aWhen );
+
+ /**
+ * Is there a queue for foreground gain.
+ *
+ * @since S60 5.0
+ * @return should foreground be gained after evaluation.
+ */
+ IMPORT_C TBool IsForegroundQueued() const;
+
+ /**
+ * Notifies this metadata model that suite evaluation has completed.
+ *
+ * @param aJustEvaluatedSuite pointer to the suite whose evaluation
+ * has completed
+ */
+ void SuiteModelReadyToShowL( CHnSuiteModel* aJustEvaluatedSuite );
+
+ /**
+ * Counts number of loaded suites.
+ *
+ * @since S60 5.0
+ * @return Number of loaded suites
+ */
+ TInt LoadedSuitesCount();
+
+ /**
+ * Evaluates the suite model on top of the stack.
+ *
+ * @since S60 5.0
+ */
+ void EvaluateTopSuiteL();
+
+private:
+
+ /**
+ * Standard C++ constructor.
+ *
+ * @since S60 5.0
+ */
+ CHnMdModel( );
+
+ /**
+ * Standard symbian 2nd pahse constructor.
+ *
+ * @since S60 5.0
+ * @param aModelObserver Model observer.
+ * @param aSuiteModelContainer Model container.
+ */
+ void ConstructL( MHnMdModelEventObserver* aModelObserver,
+ CHnSuiteModelContainer * aSuiteModelContainer );
+
+private: // data
+
+ /**
+ * Id generator.
+ */
+ THnIdGenerator iIdGenerator;
+
+ /**
+ * Own - Localization.
+ */
+ CHnMdLocalization* iLocalization;
+
+ /**
+ * Own - Xml model provider.
+ */
+ CHnXmlModelProvider* iXmlModelProvider;
+
+ /**
+ * Own - bitmap and mask ids cache.
+ */
+ CHnBitmapIdCache* iBitmapIdCache;
+
+ /**
+ * Not Own - Event observer.
+ */
+ MHnMdModelEventObserver* iModelEventObserver;
+
+ /**
+ * Stores pointers to common objects in the system
+ * This object is shared throut the whole system.
+ */
+ THnMdCommonPointers iCmnPtrs;
+
+ /**
+ * Stores information about mode.
+ */
+ TMdMode iMode;
+
+ /**
+ * Loaded Suites stack.
+ * Object and content owned.
+ */
+ RPointerArray<CHnMdSuite> iLoadedSuites;
+
+ /**
+ * Repository widget type observer.
+ */
+ CHnRepositoryObserver* iRepositoryWidgetTypeObserver;
+
+ /**
+ * Repository folder change observer.
+ */
+ CHnRepositoryObserver* iRepositoryShowFolderObserver;
+
+ /**
+ * When set, forces metadatamodel to skip evaluations.
+ */
+ TBool iIgnoreEvaluations;
+
+ /**
+ * Queues foreground gain action.
+ */
+ TBool iForegroundQueued;
+
+ /**
+ * Not own - pointer to the suite model that must be evaluated
+ * before matrix menu can be brought to foreground.
+ *
+ * When NULL, then any suite evaluation brings menu to foreground.
+ * It is only meaningful when iForegroundQueued is ETrue.
+ */
+ CHnSuiteModel* iForegroundTriggeringSuite;
+
+ };
+
+#endif // C_HNMDMODEL_H