idlehomescreen/inc/xnviewmanager.h
changeset 0 f72a12da539e
child 1 5315654608de
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/inc/xnviewmanager.h	Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,337 @@
+/*
+* Copyright (c) 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:
+* Management of views in UiEngine
+*
+*/
+
+#ifndef XNVIEWMANAGER_H
+#define XNVIEWMANAGER_H
+
+// System includes
+#include <e32base.h>
+#include <babitflags.h>
+
+// Forward declarations
+class CXnUiEngine;
+class CXnComposer;
+class CXnODTParser;
+class CXnEditor;
+class CXnEcomHandler;
+class CXnRootData;
+class CXnViewData;
+class CXnPluginData;
+class CXnNode;
+class CXnODT;
+class CXnResource;
+class CXnControlAdapter;
+class CXnAppUiAdapter;
+class CHsContentInfo;
+class CXnViewAdapter;
+class CXnOomSysHandler;
+
+namespace hspswrapper
+    {
+    class CHspsWrapper;
+    }
+
+using namespace hspswrapper;
+
+// Classe declaration
+/**
+ * Notifies view changes
+ *
+ * @ingroup group_xnlayoutengine
+ * @lib xn3layoutengine.lib
+ * @since S60 5.0
+ */
+NONSHARABLE_CLASS( MXnViewObserver )
+    {
+public:
+    // new functions
+    virtual void NotifyViewActivatedL( const CXnViewData& aViewData ) = 0;
+
+    virtual void NotifyViewDeactivatedL( const CXnViewData& aViewData ) = 0;
+
+    virtual void NotifyConfigureWidgetL(
+        const CHsContentInfo& aContentInfo,
+        CXnPluginData& aPluginData ) = 0;
+
+    virtual void NotifyWidgetAdditionL( const CXnPluginData& aPluginData ) = 0;
+
+    virtual void NotifyWidgetRemovalL( const CXnPluginData& aPluginData ) = 0;
+    
+    virtual void NotifyViewAdditionL( const CXnPluginData& aPluginData ) = 0;
+
+    virtual void NotifyViewRemovalL( const CXnPluginData& aPluginData ) = 0;
+    };
+
+/**
+ * Manages views in UiEngine.
+ *
+ * @ingroup group_xnlayoutengine
+ * @lib xn3layoutengine.lib
+ * @since S60 5.0
+ */
+NONSHARABLE_CLASS( CXnViewManager ) : public CBase
+    {
+    // Friend classes
+    friend class CXnViewAdapter;    
+public:
+    /**
+     * Two-phased constructor.
+     */
+    static CXnViewManager* NewL(
+        CXnAppUiAdapter& aAdapter );
+        
+    static CXnViewManager* NewLC(
+        CXnAppUiAdapter& aAdapter );        
+
+    ~CXnViewManager();
+
+private:
+    CXnViewManager( CXnAppUiAdapter& aAdapter );
+    void ConstructL();
+
+public:
+    // New functions
+
+    inline void SetUiEngine( CXnUiEngine& aUiEngine );
+
+    inline CXnUiEngine& UiEngine() const;
+
+    inline CXnComposer& Composer() const;
+
+    inline CXnEditor& Editor() const;
+
+    inline CXnAppUiAdapter& AppUiAdapter() const;
+           
+    CXnODT* ODT() const;
+
+    CXnNode* RootNode() const;
+
+    CXnNode* ViewNode() const;
+    
+    CXnODTParser& Parser() const;
+
+    CXnEcomHandler& EcomHandler() const;
+    
+    const RPointerArray< CXnControlAdapter >& Controls() const;
+
+    RPointerArray< CXnNode >& PluginNodes() const;
+    
+    void PluginDataL( RPointerArray< CXnPluginData >& aList, 
+        TBool aGlobal = EFalse ) const;
+
+    RPointerArray< CXnNode >& AppearanceNodes() const;
+
+    CArrayPtrSeg< CXnResource >& Resources() const ;
+           
+    void LoadUiL();
+
+    void ReloadUiL();
+
+    TInt LoadWidgetToPluginL(
+        CHsContentInfo& aContentInfo,
+        CXnPluginData& aPluginData );
+
+    TInt UnloadWidgetFromPluginL(
+        CXnPluginData& aPluginData );
+        
+    TInt ReplaceWidgetToPluginL(
+        CHsContentInfo& aContentInfo,
+        CXnPluginData& aPluginData,
+        TBool aUseHsps = ETrue );
+
+    void ActivateNextViewL();
+
+    void ActivatePreviousViewL();
+
+    TInt AddViewL( CHsContentInfo& aInfo );
+    
+    void AddViewL();
+    
+    TInt RemoveViewL( const CHsContentInfo& aInfo );
+
+    void RemoveViewL();
+    
+    void AddObserver( const MXnViewObserver& aObserver );
+
+    void RemoveObserver( const MXnViewObserver& aObserver );
+
+    CXnRootData& ActiveAppData() const;
+    
+    CXnViewData& ActiveViewData() const;
+
+    void SetFirstPassDrawCompleteL();
+
+    void SetDataPluginLoadCompleteL( const CXnPluginData& aPluginData );
+
+    void UpdatePluginStateL( CXnPluginData& aPluginData );
+       
+    TInt ActivateAppL( const TDesC8& aPluginUid );
+    TInt ActivateViewL( const TDesC8& aPluginId );    
+    
+    TInt ViewAmount() const;
+
+    TInt ViewIndex() const;
+
+    CXnOomSysHandler& OomSysHandler() const;
+    
+    /**
+     * Get maximum pages allowed
+     * 
+     * @return number of pages allowed
+     */
+    TInt32 MaxPages();    
+
+private:
+    void NotifyContainerChangedL( CXnViewData& aViewToActivate );       
+
+    void NotifyViewActivatedL( const CXnViewData& aViewData );
+
+    void NotifyViewDeactivatedL( const CXnViewData& aViewData );
+
+    void NotifyViewAdditionL( const CXnViewData& aViewData );
+   
+    void NotifyViewRemovalL( const CXnViewData& aViewData );
+
+    void NotifyConfigureWidgetL(
+        const CHsContentInfo& aContentInfo,
+        CXnPluginData& aPluginData );
+
+    void NotifyWidgetAdditionL( const CXnPluginData& aPluginData );
+
+    void NotifyWidgetRemovalL( const CXnPluginData& aPluginData );
+
+    CXnViewData* ViewData( CXnNode& aNode ) const;
+
+    CXnViewData& PreviousViewData() const;
+
+    CXnViewData& NextViewData() const;
+
+    void UpdateCachesL();
+
+    void ValidateActiveViewL();
+    
+    void InvalidateActiveView();
+
+    void ReportWidgetAmountL( const CXnViewData& aViewData );
+    
+    void ShowDiskFullMessageL() const;
+       
+public:
+    void UpdatePageManagementInformationL();
+
+#if 0 // MSK icon change
+private:
+    TInt ResolveIconIndex( TInt aPageCount, TInt aPageNum ) const;
+#endif // MSK icon change
+        
+private:
+    // data
+
+    /**
+     * AppUi adapter.
+     * Not own.
+     */
+    CXnAppUiAdapter& iAppUiAdapter;
+
+    /**
+     * Application uid
+     */
+    TUid iApplicationUid;
+    
+    /**
+     * HSPS wrapper. 
+     * Not own.
+     */
+    CHspsWrapper* iHspsWrapper;
+
+    /**
+     * UiEngine.
+     * Not own.
+     */
+    CXnUiEngine* iUiEngine;
+
+    /**
+     * Comopser.
+     * Own.
+     */
+    CXnComposer* iComposer;
+
+    /**
+     * Editor.
+     * Own.
+     */
+    CXnEditor* iEditor;
+    
+    /**
+     * Application configuration root data.
+     * Own.
+     */
+    CXnRootData* iRootData;
+    
+    /**
+     * Widget amount trigger.
+     * Own.
+     */
+    CXnNode* iWidgetAmountTrigger;
+    
+    /**
+     * Resources for current view.
+     * Own.
+     */
+    mutable CArrayPtrSeg< CXnResource >* iResources;
+
+    /**
+     * Controls for current view.
+     * Own.
+     */
+    mutable RPointerArray< CXnControlAdapter > iControls;
+
+    /**
+     * Appearance nodes. This array needs to be updated when UI furniture
+     * is changed.
+     * Own.
+     */
+    mutable RPointerArray< CXnNode > iAppearanceNodes;
+
+    /**
+     * View observers.
+     * Own.
+     */
+    RPointerArray< MXnViewObserver > iObservers;
+
+    /**
+     * Failed plugins.
+     * Own.
+     */    
+    RPointerArray< CXnPluginData > iFailedPlugins;
+    
+    /**
+     * Flags
+     */
+    TBitFlags32 iFlags;
+
+    /**
+     * OOM system handler. Owned.
+     */
+    CXnOomSysHandler* iOomSysHandler;    
+    };
+
+// Inline functions
+#include "xnviewmanager.inl"
+
+#endif