idlehomescreen/xmluirendering/uiengine/inc/xneditor.h
branchRCL_3
changeset 83 5456b4e8b3a8
child 88 3321d3e205b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/xmluirendering/uiengine/inc/xneditor.h	Wed Sep 01 12:32:46 2010 +0100
@@ -0,0 +1,397 @@
+/*
+* 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:  Manages Ai3 personalization
+*
+*/
+
+
+#ifndef C_XNEDITOR_H
+#define C_XNEDITOR_H
+
+// System includes
+#include <e32base.h>
+#include <badesca.h>
+#include <hscontentcontroller.h>
+#include <hscontentinfo.h>
+#include <hscontentinfoarray.h>
+#include <AknsSrvClient.h>
+
+// User includes
+#include "hspswrapper.h"
+#include "cpswrapper.h"
+#include "xnviewmanager.h"
+
+// Forward declarations
+class CXnNode;
+class CAknListQueryDialog;
+class CXnViewManager;
+class CXnViewData;
+class CRepository;
+class CXnBackgroundManager;
+class CXnOomSysHandler;
+
+namespace hspswrapper
+    {
+    class CPropertyMap;
+    class CAddPluginResult;
+    class MHspsWrapperObserver;    
+    }
+
+namespace cpswrapper
+    {
+    class CCpsWrapper;
+    class CPublisherMap;
+    class CPublisherInfo; 
+    class MCpsWrapperObserver;
+    }
+
+using namespace hspswrapper;
+using namespace cpswrapper;
+
+// Class declaration
+
+/**
+ *  Editor handles ai3 personalization
+ *
+ *  @ingroup group_xnlayoutengine
+ *  @lib xn3layoutengine.lib
+ *  @since S60 5.0
+ */
+NONSHARABLE_CLASS( CXnEditor ) : public CBase, 
+    public MXnViewObserver,
+    public MCpsWrapperObserver,
+    public MHspsWrapperObserver,
+    public MHsContentController
+    {
+public:
+    //constructors and destructor
+    
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aViewManager View manager
+     * @param aWrapper HSPS wrapper
+     */
+    static CXnEditor* NewL( CXnViewManager& aViewManager,
+        const TDesC8& aUid );
+    
+    /**
+     * Two-phased constructor.
+     * 
+     * @param aViewManager View manager
+     * @param aWrapper HSPS wrapper
+     */
+    static CXnEditor* NewLC( CXnViewManager& aViewManager,
+        const TDesC8& aUid );
+
+    /**
+     * Destructor.
+     */
+    ~CXnEditor();
+
+public:
+    // new functions    
+    
+    /**
+     * Remove uregistered widget from all the views.
+     *
+     * @since S60 5.0
+     * @param aPublisher publisher
+     */
+    void RemoveUnRegisteredWidgetL( const TDesC& aPublisher );
+
+    /**
+     * Removes uninstalled widget from all views
+     * 
+     * @since S60 5.0
+     * @param aContentInfo content info
+     */
+    void RemoveUnInstalledWidgetL( const CHsContentInfo& aContentInfo );
+
+    /**
+     * Runs add widget list query
+     * 
+     * @since S60 5.0     
+     */
+    void AddWidgetL();
+
+    /**
+     * Remove widget from current view.
+     *
+     * @since S60 5.0
+     * @param aNode Plugin (or its child) where to remove widget.     
+     */
+    void RemoveWidgetL( CXnNode* aNode );
+
+    /**
+     * Replaces widget configuration to HSPS
+     * 
+     * @since S60 5.0
+     * @param aContentInfo content info 
+     */
+    void ReplaceWidgetL( CHsContentInfo& aContentInfo );
+    /**
+     * Commit a new order of plugins to the HSPS.
+     * 
+     * @since S60 5.0
+     * @param aPluginArray Array of plugins
+     */
+    void ReorderWidgetsL( RPointerArray< CXnNode >* aPluginArray );
+
+    /**
+     * Toggles widgets' visibility
+     * 
+     * @since S60 5.0
+     * @return Current widgets' visibility state
+     */
+    TBool ToggleWidgetsVisibiltyL();
+
+    /**
+     * Queries wheter the widgets are visible or not
+     * 
+     * @since S60 5.0
+     * @return ETrue if widgets are now visible, EFalse otherwise
+     */
+    TBool WidgetsVisible() const;
+
+    /**
+     * Sets target plugin for add/remove
+     * 
+     * @since S60 5.0
+     * @param aNode a plugin node to be set as target for add/remove action
+     */
+    void SetTargetPlugin( CXnNode* aNode );
+
+    /**
+     * Handles changing of wallpaper
+     * 
+     * @since S60 5.0
+     */
+    void SetWallpaperL();
+    
+    /**
+     * Returns the HSPS Wrapper object owned by this.
+     * 
+     * @since S60 5.0
+	 * @return HSPSWrapper
+     */
+    CHspsWrapper& HspsWrapper() const;
+
+    /**
+     * Retrives Id read from central repository.
+     * 
+     * @since S60 5.0
+	 * @return sucess or failure standard error code
+     */    
+    TInt IdFromCrep ( TDes8& aUid ) const;
+
+private:
+    // from MHsContentController
+    
+    TInt WidgetListL( CHsContentInfoArray& aArray );
+
+    TInt WidgetListL( CHsContentInfo& aInfo, CHsContentInfoArray& aArray );
+
+    TInt ViewListL( CHsContentInfoArray& aArray );
+
+    TInt ViewListL( CHsContentInfo& aInfo, CHsContentInfoArray& aArray );
+
+    TInt AppListL( CHsContentInfoArray& aArray );
+    
+    TInt AddWidgetL( CHsContentInfo& aInfo );
+    
+    TInt RemoveWidgetL( CHsContentInfo& aInfo );
+    
+    TInt AddViewL( CHsContentInfo& aInfo );
+    
+    TInt RemoveViewL( CHsContentInfo& aInfo );
+    
+    TInt ActivateViewL( CHsContentInfo& aInfo );
+    
+    TInt ActivateAppL( CHsContentInfo& aInfo );
+
+    TInt ActiveViewL( CHsContentInfo& aInfo );
+    
+    TInt ActiveAppL( CHsContentInfo& aInfo );
+
+private:
+    // constructors
+    
+    /**
+     * C++ constructor
+     */
+    CXnEditor( CXnViewManager& aViewManager );
+
+    /**
+     * Leaving constructor
+     */
+    void ConstructL( const TDesC8& aUid );
+
+private:
+    // new functions    
+    
+      CPublisherInfo* PublisherInfoL( const CHsContentInfo& aContentInfo );
+
+    TInt TemplateWidgetCanBeAddedRemovedL( CHsContentInfo& aContentInfo );
+    TInt NonTemplateWidgetCanBeAddedRemovedL( CHsContentInfo& aContentInfo );
+    
+    TBool IsCurrentViewFull();
+    
+    /**
+     * Filters plugins from the list and checks whether the plugins can be added or removed.
+     */
+    void FilterPluginsL( CHsContentInfoArray& aContentInfoArray,
+        TBool aIgnoreViewFull );
+    
+    void FilterViewListL( CHsContentInfoArray& aContentInfoArray ); 
+    CXnOomSysHandler& OomSysHandler() const;
+    
+    /**
+     * Notifies the MHsContentControl and the MHsContentControlUi if widget list was changed.
+     */
+    void WidgetListChanged();
+
+    /**
+     * Notifies the MHsContentControl and the MHsContentControlUi if view list was changed.
+     */
+    void ViewListChanged();
+    
+    /**
+     * Creates content info for defined plugin
+     */
+    CHsContentInfo* CreateContentInfoLC( CXnPluginData& aPlugin, 
+        RPointerArray< CHsContentInfo >& aInfos );
+    
+    /**
+     * Appends plugin configurations to the content info array.
+     */
+    void AppendPluginsL(
+            RPointerArray< hspswrapper::CPluginInfo > aPlugins,
+            RPointerArray< CHsContentInfo >& aWidgets );
+    
+    /**
+     * Resets pluging configurations and templated publishers.
+     */
+    void ResetPluginsAndPublishers();
+    
+    /**
+     * Retrieves native application configuration plugins from HSPS
+     */
+    void HspsApplicationPluginsL( RPointerArray< CHsContentInfo >& aWidgets );
+    
+    /**
+     * Retrieves native view configuration plugins from HSPS
+     */
+    void HspsViewPluginsL( RPointerArray< CHsContentInfo >& aWidgets );
+           
+    /**
+     * Retrieves widget and template configuration plugins from HSPS
+     */
+    void HspsWidgetPluginsL( RPointerArray< CHsContentInfo >& aWidgets );        
+    void DoHspsWidgetPluginsL();
+    
+    /**
+     * Retrieves publishers from CPS and them with the HSPS's template plugins
+     */
+    void CpsWidgetPluginsL( RPointerArray< CHsContentInfo >& aWidgets );
+
+    /**
+     * Checks whether the view is full
+     */
+    TBool IsViewFull( CXnViewData& aViewData );
+    
+    /*
+     * Notifies observers that widget list is changed
+     */
+    void NotifyWidgetListChanged();
+    
+    /** callback for notify widget launcher */
+    static TInt WidgetListChangedCallBack( TAny* aSelf );
+
+    /*
+     * Notifies observers that view list is changed
+     */
+    void NotifyViewListChanged();
+    
+    /** callback for notify view launcher */
+    static TInt ViewListChangedCallBack( TAny* aSelf );
+
+private:
+    // from MXnViewObserver    
+    
+    void NotifyViewActivatedL( const CXnViewData& aViewData );
+
+    void NotifyViewDeactivatedL( const CXnViewData& /*aViewData*/ );
+
+    void NotifyConfigureWidgetL( const CHsContentInfo& aContentInfo,
+        CXnPluginData& aPluginData );
+
+    void NotifyWidgetAdditionL( const CXnPluginData& aPluginData );
+    
+    void NotifyWidgetRemovalL( const CXnPluginData& aPluginData );
+
+    void NotifyViewAdditionL( const CXnPluginData& /*aPluginData*/ );
+    
+    void NotifyViewRemovalL( const CXnPluginData& /*aPluginData*/ );
+    
+    void NotifyAllViewsLoadedL();
+
+    void NotifyContainerActivatedL( const CXnViewData& aViewData );
+
+private:
+    // from MCpsWrapperObserver    
+ 
+    void NotifyWidgetUnregisteredL( const TDesC& aPublisher );
+    
+    void NotifyWidgetRegisteredL();
+    
+    void NotifyWidgetUpdatedL();
+    
+private:
+    // from MHspsWrapperObserver
+
+    TInt HandleNotifyL( const TDesC8& aEvent, const TDesC8& aAppConfUid,
+        const TDesC8& aPluginName, const TDesC8& aOrigUid, 
+        const TDesC8& aPluginUid, const TDesC8& aPluginId );    
+
+private:
+    // data
+
+    /** View manager, not owned */
+    CXnViewManager& iViewManager;
+    /** HSPS wrapper, owned */
+    CHspsWrapper* iHspsWrapper;  
+    /** CPS wrapper, owned */
+    CCpsWrapper* iCpsWrapper;
+    /** Publisher map, owned */
+    CPublisherMap* iPublisherMap;
+    /** Add widget listquery, not owned */
+    CAknListQueryDialog* iQuery;
+    /** Target plugin for add/remove, not owned */
+    CXnNode* iTargetPlugin;
+    /** Widgets visibility state */
+    TBool iWidgetsVisibilityState;    
+    /** Central repository , to choose plugin, owned*/
+    CRepository* iRepository;
+	/** Widget/template plugin configurations, owned */
+    RPointerArray< hspswrapper::CPluginInfo > iPluginConfigurations;
+	/** Oom handler, owned. */
+    CXnOomSysHandler* iOomSysHandler;
+	/** Launcher for notifying widget list changes */    
+    CPeriodic* iNotifyWidgetListChanged;
+    /** Launcher for notifying view list changes */    
+    CPeriodic* iNotifyViewListChanged;
+    };
+
+#endif // C_XNEDITOR_H