--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/viewframework/viewutility/inc/mpxviewutilityimp.h Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,431 @@
+/*
+* Copyright (c) 2006 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: MPX view utility implementation
+*
+*/
+
+
+
+#ifndef CMPXVIEWUTILITYIMP_H
+#define CMPXVIEWUTILITYIMP_H
+
+
+// INCLUDES
+#include <mpxcustomcommandobserver.h>
+#include <mpxpluginhandlerobserver.h>
+#include "mpxviewutility.h"
+
+// FORWARD DECLARATIONS
+class CMPXViewPluginHandler;
+class CRepository;
+class CMPXViewPlugin;
+class CMPXViewHistory;
+
+// CLASS DECLARATION
+
+/**
+ * MPX view utility implementation.
+ *
+ * @lib mpxviewutility.lib
+ * @since S60 v3.1
+ */
+NONSHARABLE_CLASS( CMPXViewUtilityImp ) : public CBase,
+ public MMPXViewUtility,
+ public MMPXCustomCommandObserver,
+ public MMPXPluginHandlerObserver
+ {
+public:
+
+ /**
+ * Retrieves view utility from TLS. Creates if it's not there.
+ *
+ * @since 3.1
+ * @return Pointer to a view utility object.
+ */
+ static MMPXViewUtility* UtilityL();
+
+private:
+
+ /**
+ * C++ default constructor.
+ */
+ CMPXViewUtilityImp();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CMPXViewUtilityImp();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Two-phased constructor.
+ * Intentionally make this API private as this class is a singleton.
+ * To get a view utility instance, UtilityL() should be called.
+ *
+ * @return Pointer to newly created object.
+ */
+ static CMPXViewUtilityImp* NewL();
+
+ /**
+ * Store view utility to TLS.
+ *
+ * @param aUtility View utility object. Ownership not transferred.
+ */
+ static void StoreViewUtility( MMPXViewUtility* aUtility );
+
+// from base class MMPXViewUtility
+
+ /**
+ * From MMPXViewUtility
+ * This method must be called when the client no longer needs the utility
+ * instance. This object will be destroyed when no one is using it.
+ *
+ * @since 3.1
+ */
+ void Close();
+
+ /**
+ * From MMPXViewUtility
+ * Activate view by resolving passed uid.
+ *
+ * @since 3.1
+ * @param aUid Uid to be resolved. This uid can be plugin implementation
+ * uid, plugin type uid or specific view plugin uid.
+ * @param aParam Parameter passed to the view on activation
+ * @leave KErrNotFound if a matching plugin cannot be found
+ */
+ void ActivateViewL(
+ const TUid& aUid,
+ const TDesC* aParam = NULL );
+
+ /**
+ * From MMPXViewUtility
+ * Activate view by resolving passed uids.
+ *
+ * @since 3.1
+ * @param aUids List of Uids to be resolved, this uid can be plugin uid,
+ * plugin type uid or specific view plugin uid.
+ * @param aParam Parameter passed to the view on activation
+ * @leave KErrNotFound if a matching plugin cannot be found
+ */
+ void ActivateViewL(
+ const RArray<TUid>& aUids,
+ const TDesC* aParam = NULL );
+
+ /**
+ * From MMPXViewUtility
+ * Set view as default view, not bring to foreground. This is only valid
+ * if there are no views previously activated
+ *
+ * @since 3.1
+ * @param aUid Uid of item to be activated. This uid can be plugin implementation
+ * uid, plugin type uid or specific view plugin uid.
+ * @leave Error code KErrAlreadyExist when there are views already
+ * activated
+ * @leave Error code KErrNotSupported for views that doesn't support
+ * default view (such as dialogs)
+ */
+ void SetAsDefaultViewL( const TUid& aUid );
+
+ /**
+ * From MMPXViewUtility
+ * Set view as default view, not bring to foreground. This is only valid
+ * if there are no views previously activated
+ *
+ * @since 3.1
+ * @param aUid Uids of item to be activated. This uid can be plugin implementation
+ * uid, plugin type uid or specific view plugin uid.
+ * @leave Error code KErrAlreadyExist when there are views already
+ * activated
+ * @leave Error code KErrNotSupported for views that doesn't support
+ * default view (such as dialogs)
+ */
+ void SetAsDefaultViewL( const RArray<TUid>& aUids );
+
+ /**
+ * From MMPXViewUtility
+ * Activate previous view.
+ *
+ * @since 3.1
+ *
+ * @leave Error code KErrNotFound if there's no history.
+ */
+ void ActivatePreviousViewL();
+
+ /**
+ * From MMPXViewUtility
+ * Pre-load view plug-ins that have KMPXVpFeaturePreLoaded flag set.
+ *
+ * @since 3.1
+ */
+ void PreLoadViewsL();
+
+ /**
+ * From MMPXViewUtility
+ * Pre-load view plug-ins that have KMPXVpFeaturePreLoaded flag set and also by resolving aUid.
+ *
+ * @param aUid Uid of specific applicaiton to be resolved
+ */
+ void PreLoadViewsL(const TUid& aUid);
+
+ /**
+ * From MMPXViewUtility
+ * Pre-load view plug-in by resolving passed uid.
+ *
+ * @since 3.1
+ * @param aUid Uid to be resolved. This uid can be plugin uid, plugin type
+ * uid or specific view plugin uid.
+ * @leave if no match is found.
+ */
+ void PreLoadViewL( const TUid& aUid );
+
+ /**
+ * From MMPXViewUtility
+ * Get a reference to view plugin manager.
+ *
+ * @since 3.1
+ * @return Reference to view plugin manager.
+ */
+ MMPXViewPluginManager& ViewPluginManager();
+
+ /**
+ * From MMPXViewUtility
+ * Constructs default view history
+ *
+ * @since 3.1
+ * @return if defined, the default view UID. KNullUid if not defined
+ */
+ TUid ConstructDefaultViewHistoryL();
+
+ /**
+ * From MMPXViewUtility
+ *
+ * Push default history to view history. The current browse history
+ * is erased and the default browsing path is loaded as the current history
+ *
+ * @since 3.1
+ */
+ void PushDefaultHistoryL();
+
+ /**
+ * From MMPXViewUtility
+ * Gets default view's UID
+ *
+ * @return if defined, the default view UID. KNullUid if not defined
+ *
+ * @since 3.1
+ */
+ TUid DefaultViewUid();
+
+ /**
+ * From MMPXViewUtility
+ * Returns the current history depth
+ * if depth is greater than 1, the client should call ActivatePreviousViewL
+ * on a back command
+ *
+ * if depth is 1, the client should exit the app on a back command instead
+ * of calling ActivatePreviousViewL
+ *
+ * @since 3.1
+ *
+ * @return The current browsing history depth.
+ */
+ TInt ViewHistoryDepth();
+
+ /**
+ * From MMPXViewUtility
+ * Returns the last activated view type
+ *
+ * @return previous view type if defined. KNullUid if not.
+ *
+ * @since 3.1
+ */
+ TUid PreviousViewType();
+
+ /**
+ * From MMPXViewUtility
+ * Returns the view type of the active view.
+ *
+ * @return current view type if defined. KNullUid if not.
+ *
+ * @since 3.1
+ */
+ TUid ActiveViewType();
+
+ /**
+ * From MMPXViewUtility
+ * Returns the implementation uid of the active view.
+ *
+ * @return current view implementation id if defined. KNullUid if not.
+ *
+ * @since 3.1
+ */
+ TUid ActiveViewImplementationUid();
+
+ /**
+ * From MMPXViewUtility
+ * Add view activation observer.
+ *
+ * @since 3.1
+ * @param aObserver Pointer to an observer object
+ */
+ void AddObserverL(
+ MMPXViewActivationObserver* aObserver );
+
+ /**
+ * From MMPXViewUtility
+ * Remove view activation observer.
+ *
+ * @since 3.1
+ * @param aObserver Pointer to an observer object
+ */
+ void RemoveObserver(
+ MMPXViewActivationObserver* aObserver );
+
+ /**
+ * From MMPXCustomCommandObserver
+ * Handle custom commands.
+ *
+ * @since 3.1
+ * @param aUid Command category Uid. Different command set will have
+ * different Uid to avoid clash.
+ * @param aCommand Command to be handled.
+ * @param aData data for the specific command
+ */
+ void HandleCustomCommand(
+ const TUid& aUid,
+ const TInt aCommand,
+ const TDesC8& aData = KNullDesC8 );
+
+ /*
+ * From MMPXPluginHandlerObserver
+ * @see MMPXPluginHandlerObserver
+ */
+ void HandlePluginHandlerEvent(TPluginHandlerEvents aEvent, const TUid& aPluginUid,
+ TInt aLoaded, TInt aData);
+
+private:
+
+ /**
+ * Activate view by resolving passed uids.
+ *
+ * @since 3.1
+ * @param aUids List of Uids to be resolved, this uid can be plugin uid,
+ * plugin type uid or specific view plugin uid.
+ * @param aIsActivatingPreviousView ETrue if activating previous view
+ * @param aUpdatedPreviousView ETrue iPreviousView has been updated or no need
+ * EFalse will update iPreviousView
+ * @param aParam Parameter passed to the view on activation
+ */
+ void ActivateViewL(
+ const RArray<TUid>& aUids,
+ TBool aIsActivatingPreviousView,
+ TBool aUpdatedPreviousView,
+ const TDesC* aParam = NULL );
+
+ /**
+ * Marks the view closed. This does not actually close the view.
+ * When a dialog is closed, it should call this method to indicate it has been closed.
+ *
+ * @since 3.1
+ * @param aPlugin a pointer to the current dialog
+ */
+ void MarkViewAsClosedL( CMPXViewPlugin* aPlugin );
+
+ /**
+ * Notify observers on view activation.
+ *
+ * @param aCurrentViewType Current view type Uid
+ * @param aPreviousViewType Previous view type Uid
+ */
+ void NotifyObservers(
+ const TUid& aCurrentViewType,
+ const TUid& aPreviousViewType );
+
+ /**
+ * Notify observers on view update events (addition/update/removal).
+ *
+ * @param aViewUid Identifies the view.
+ * @param aUpdateEvent Identifies the event (addition/update/removal).
+ * @param aLoaded ETrue if the view is currently loaded
+ * @param aVersion View version (new for addition and update and old for removal)
+ */
+ void NotifyViewUpdate(
+ const TUid& aViewUid,
+ MMPXViewActivationObserver::TViewUpdateEvent aUpdateEvent,
+ TBool aLoaded,
+ TInt aVersion = 0);
+
+ /**
+ * Insert/Append to default view history array
+ *
+ * @param aData data to append/insert
+ * @param aLoc location to insert (default append)
+ *
+ * @return if successful, returns the plulgin type uid
+ */
+ TInt AddToDefaultViewHistoryL( const TDesC& aData, TInt aLoc = -1 );
+
+ /**
+ * Updates previous view info
+ *
+ * @param aIndex index in current view history to store
+ */
+ void UpdatePreviousViewInfoL( TInt aIndex );
+
+ /**
+ * Find if the view exist in current history
+ *
+ * @param aType type to search for
+ * @return index of the plugin in history if found, KErrNotFound otherwise
+ */
+ TInt FindCurrentHistoryEntryByTypeL( const TUid aType );
+
+private: // data
+
+ /**
+ * View plugin handler.
+ * Own.
+ */
+ CMPXViewPluginHandler* iPluginManager;
+
+ /**
+ * Reference count.
+ */
+ TInt iRefCount;
+
+ /**
+ * History paths
+ */
+ RPointerArray<CMPXViewHistory> iDefaultHistoryPath;
+ RPointerArray<CMPXViewHistory> iCurrentHistoryPath;
+
+ /**
+ * List of observers
+ * Owned.
+ */
+ RPointerArray<MMPXViewActivationObserver> iObservers;
+
+ CMPXViewHistory* iPreviousView;
+ CMPXViewHistory* iCurrentView;
+ CMPXViewHistory* iDefaultView;
+ };
+
+#endif // CMPXVIEWUTILITYIMP_H
+
+// End of File