idlehomescreen/nativeuicontroller/inc/nativeuicontroller.h
changeset 0 f72a12da539e
child 4 4d54b72983ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/nativeuicontroller/inc/nativeuicontroller.h	Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,327 @@
+/*
+* Copyright (c) 2005-2007 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:  Native UI controller.
+*
+*/
+
+
+#ifndef C_NATIVEUICONTROLLER_H
+#define C_NATIVEUICONTROLLER_H
+
+
+#include <aisystemuids.hrh>
+#include "aiuicontroller.h"
+#include "aiuiframeworkobserver.h"
+#include "aicontentobserver.h"
+
+#include <aiutility.h>
+
+class MAiPropertyExtension;
+class MAiPSPropertyObserver;
+
+namespace AiNativeUiController
+{
+
+class CAiNativeRenderer;
+class CAiStatusPanel;
+class CAppUi;
+class CAiToolbarRenderer;
+
+const TInt KImplementationUidNativeUiController = AI_UID_ECOM_IMPLEMENTATION_UICONTROLLER_NATIVE;
+
+const TUid KUidNativeUiController = { KImplementationUidNativeUiController };
+
+/**
+* Native UI controller.
+* This class works as a secondary UI controller. It implements 
+* the MAiContentObserver interface thus handling and forwarding the data coming
+* from the publishers.
+*
+* @since Series 60 3.2
+*/
+class CNativeUiController : public CAiUiController, 
+                            public MAiSecondaryUiController, 
+                            public MAiMainUiController, 
+                            public MAiUiFrameworkObserver,
+                            public MAiContentObserver
+	{
+public:
+
+    static CNativeUiController* NewL();
+
+	virtual ~CNativeUiController();
+
+// from base class CAiUiController
+
+    void PrepareToExit();
+
+    void LoadUIDefinitionL();
+
+    void GetPluginsL(RAiPublisherInfoArray& aPlugins);
+
+    void GetSettingsL(const TAiPublisherInfo& aPubInfo, 
+                        RAiSettingsItemArray& aSettings);
+
+    void ActivateUI();
+
+    MAiContentObserver& GetContentObserver();
+
+    void SetEventHandler(MAiFwEventHandler& aEventHandler);
+
+    MAiFwEventHandler* FwEventHandler();
+
+    void RemovePluginFromUI( MAiPropertyExtension& aPlugin );
+
+    MAiMainUiController* MainInterface();
+
+    MAiSecondaryUiController* SecondaryInterface();
+    
+    void HandleLoadedPlugins(const RAiPublisherInfoArray& /*aRequiredPlugins*/ ) {};
+    
+// from base class MAiMainUiController
+
+    void RunApplicationL();
+
+    CCoeEnv& CoeEnv();
+
+    void SetUiFrameworkObserver( MAiUiFrameworkObserver& aObserver );
+    
+    TBool IsMenuOpen();
+
+// from base class CAiSecordaryUiController
+
+    void SetCoeEnv( CCoeEnv& aCoeEnv );
+
+    MAiUiFrameworkObserver* UiFrameworkObserver(); 
+
+// from base class MAiUiFrameworkObserver
+
+    void HandleResourceChange( TInt aType );
+
+    void HandleForegroundEvent( TBool aForeground );
+
+// from base class MAiContentObserver
+       
+    TInt StartTransaction(TInt aTxId);
+
+    TInt Commit(TInt aTxId);
+
+    TInt CancelTransaction(TInt aTxId);
+
+    TBool CanPublish(MAiPropertyExtension& aPlugin, TInt aContent, TInt aIndex);
+
+    TInt Publish(MAiPropertyExtension& aPlugin, TInt aContent, TInt aResource, TInt aIndex );
+
+    TInt Publish(MAiPropertyExtension& aPlugin, TInt aContent, const TDesC16& aText, TInt aIndex );
+
+    TInt Publish(MAiPropertyExtension& aPlugin, TInt aContent, const TDesC8& aBuf, TInt aIndex );
+
+    TInt Publish(MAiPropertyExtension& aPlugin, TInt aContent, RFile& aFile, TInt aIndex );
+
+    TInt Clean(MAiPropertyExtension& aPlugin, TInt aContent, TInt aIndex );
+
+    TAny* Extension(TUid aUid);
+
+    TBool RequiresSubscription( const TAiPublisherInfo& aPublisherInfo ) const;
+    
+// new methods
+
+    /**
+     * Set app ui instance to this class.
+     *
+     * @since S60 3.2
+     * @param aAppUi is pointer to app ui.
+     */
+    void SetAppUi( CAppUi* aAppUi )
+        {
+        iAppUi = aAppUi;
+        }
+        
+    void VariateToMainUiController();
+
+    void Exit();
+
+private:
+
+    CNativeUiController();
+
+    static CApaApplication* NewApplication();
+
+    /**
+     * Add renderer.
+     *
+     * Ownership transferred.
+     *
+     * @since S60 3.2
+     * @param aRenderer is pointer to renderer.
+     */
+    void AddRendererL( CAiNativeRenderer* aRenderer );
+
+    /**
+     * Remove a renderer. Renderer is only
+     * removed from the array and is deleted ONLY
+     * when aDelete = ETrue
+     *
+     * @since S60 5.0
+     * @param aRenderer is pointer to the renderer to be removed
+     * @param aDelete is ETrue when the renderer will be deleted
+     * @return ETrue upon successful removing.
+     */
+    TBool RemoveRenderer( CAiNativeRenderer *aRenderer, TBool aDelete = EFalse );
+
+    /**
+     * Recreates the toolbar renderer
+     */
+    TBool RecreateToolbarRendererL();
+
+    /**
+     * Deletes and removes the toolbar renderer from
+     * renderer array.
+     */
+    void DeleteToolbarRenderer();
+    
+    /**
+     * Template function for publish.
+     *
+     * @since S60 3.2
+     * @param aPlugin is publishing plugin.
+     * @param aContent is content id
+     * @param aData is published data
+     * @param aIndex is index in the control, not used by Native UI Controller.
+     * @return KErrNone if publishing was successful.
+     */
+	template<class T>
+    TInt DoPublish( MAiPropertyExtension& aPlugin, TInt aContent, T& aData, TInt aIndex );
+    
+    /**
+     * Handles idle state changes.
+     *
+     * @since S60 v3.2
+     */
+    static TInt HandleIdleStateEvent( TAny* aPtr );
+    
+    /**
+     * Handles keylock state changes.
+     *
+     * @since S60 v3.2
+     */
+    static TInt HandleKeylockStateEvent( TAny* aPtr );
+
+    static TInt HandlePluginConfChange( TAny* aPtr );
+    
+    static TInt ExitTimerCallBack( TAny* aSelf );
+    void GetSettingsFromCRL( const TAiPublisherInfo& aPubInfo,
+                                                  RAiSettingsItemArray &aPluginSettings );
+
+private:     // Data
+
+    /**
+     * Array of renderers.
+     * Own.
+     */
+    RPointerArray<CAiNativeRenderer> iRenderers;
+
+    /**
+     * Offset of resource file.
+     */
+    TInt iResourceOffset;
+
+    /**
+     * Status panel
+     * Own.
+     */
+    CAiStatusPanel* iStatusPanel;
+    
+    /**
+     * Reference to available CONE environment object. Not own.
+     */
+    CCoeEnv* iCoeEnv;
+    
+    /**
+     * Idle state PS observer.
+     * Own.
+     */
+    MAiPSPropertyObserver* iIdleStatusObserver;
+    
+    /**
+     * Keylock state PS observer.
+     * Own.
+     */
+    MAiPSPropertyObserver* iKeylockStatusObserver;
+    
+
+    /**
+     * ExtHS plugin configuration PS observer.
+     * Own.
+     */
+    MAiPSPropertyObserver* iExtHsPluginConfChange;
+
+    /**
+     * Native UI controller plug-ins
+     */
+    RAiPublisherInfoArray iPlugins;
+    
+    /**
+      * Plug-in event handler.
+      * Doesn't own.
+      */
+    MAiFwEventHandler* iFwEventHandler;
+    
+    /**
+     * Pointer to this, when role is main ui controller.
+     */
+    MAiMainUiController* iMain;
+
+    /**
+     * Ui framework observer. Not own.
+     */
+    MAiUiFrameworkObserver* iUiFrameworkObserver;
+    
+    /**
+     * Pointer to app ui.
+     * Not own.
+     */
+    CAppUi* iAppUi;
+    
+    /**
+     * Indicates if Native UI Controller takes responsibilities of 
+     * Main UI Controller.
+     */
+    TBool iRunningAsMain;
+    
+    /**
+    * Timer to call AppUi's exit
+    **/
+    CPeriodic *iExitTimer;
+    
+    /**
+    * To prevent double loading of the UI
+    **/
+    TBool iUiLoaded;
+    
+    /**
+     * Pointer to our toolbar renderer. Do not delete
+     * renderer through this pointer
+     */
+    CAiToolbarRenderer *iToolbarRenderer;
+
+    };
+
+#include "nativeuicontroller.inl"
+
+} // namespace AiNativeUiController
+
+#endif
+
+// End of File.