mpx/viewframework/viewutility/inc/mpxviewutilityimp.h
changeset 0 a2952bb97e68
--- /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