calendarui/customisationmanager/inc/calencustomisationmanager.h
changeset 0 f979ecb2b13e
child 20 9c5b1510919f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/customisationmanager/inc/calencustomisationmanager.h	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,301 @@
+/*
+* Copyright (c) 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:  Customisation manager.
+*
+*/
+
+
+
+#ifndef CALENCUSTOMISATIONMANAGER_H
+#define CALENCUSTOMISATIONMANAGER_H
+
+#include <aknsettingitemlist.h>         // CAknSettingItem
+#include <e32base.h>                    // CBase
+#include <calennotificationhandler.h>   // MCalenNotificationHandler
+#include <ecom/ecom.h>                  // RImplInfoPtrArray
+#include <calenview.h>                  // TCyclePosition
+
+// forward declarations
+class CEikMenuPane;
+class CCalenView;
+class CCalenCustomisation;
+class MCalenCommandHandler;
+class CCalenGlobalData;
+class CCoeControl;
+class CCalenViewInfo;
+class CAknSettingItem;
+class MCalenServicesFactory;
+class MCalenServices;
+class CCalenSetting;
+class MCalenPreview;
+
+/**
+* CCalenCustomisationManager manages customisations for calendar.
+*
+*/
+class CCalenCustomisationManager : public CBase,
+                                   public MCalenNotificationHandler
+    {
+public:  // Types
+    /**
+     * Struct showing the uid and availaibility of known plugins.
+     */
+    struct TCalenPluginAvailability
+        {
+        public:
+            TUid    iUid;
+            TBool   iEnabled;
+        };
+
+    // Array of plugin availabilities.
+    typedef RArray<CCalenCustomisationManager::TCalenPluginAvailability> CCalenPluginStatusArray;
+
+public:  // Construction and destruction
+    /**
+     * Returns a new CCalenCustomisationManager object.
+     */
+    IMPORT_C static CCalenCustomisationManager* NewL(
+                                       MCalenServicesFactory& aFactory,
+                                       CCalenPluginStatusArray& aPluginSettingsStatus,
+									   MCalenServices& aServices,
+									   RPointerArray<CCalenViewInfo>& aViewArray );
+
+    /**
+     * Destructor.
+     */
+    ~CCalenCustomisationManager();
+
+public:  // New functions
+    /**
+    * Get a command handler for a specific command
+    * @param aCommand Command to find a command handler for
+    */
+    IMPORT_C MCalenCommandHandler* GetCommandHandlerL( TInt aCommand );
+
+    /**
+     * Offers the menu pane to customisations for modification.
+     */
+    IMPORT_C void OfferMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+    /**
+     * Gets a custom preview pane from the appropriate customisation.
+     */
+    IMPORT_C MCalenPreview* CustomPreviewPaneL( TRect& aRect );
+    
+    /**
+     * Gets a preview pane from the appropriate customisation.
+     */
+    IMPORT_C CCoeControl* PreviewPane( TRect& aRect );
+
+    /**
+     * Gets a info bar from the appropriate customisation.
+     */
+    IMPORT_C CCoeControl* Infobar( const TRect& aRect );
+    
+    /**
+     * Gets a info bar from the appropriate customisation.
+     */
+    IMPORT_C const TDesC& Infobar();
+
+    /**
+     * Gets settings from the given plugin.
+     * NOTE: The contents of the array are owned by the caller - caller
+     * must guarantee to call ResetAndDestroy on the array in all cases.
+     */
+    IMPORT_C void GetPluginSettingsL( TUid aPluginUid,
+                                      RPointerArray<CAknSettingItem>& aSettingArray );
+
+     /**
+      * Returns a reference to an array of active plugins uids
+      */
+     IMPORT_C const RArray<TUid>& ActivePlugins() const;
+
+     /**
+      * GetCustomViews returns custom views info in an array for a given
+      * plugin.
+      * NOTE: The contents of the array are owned by the caller - caller
+      * must guarantee to call ResetAndDestroy on the array in all cases.
+      */
+     IMPORT_C void GetCustomViewsL( TUid aPluginUid,
+                                    RPointerArray<CCalenView>& aViews );
+
+    /**
+     * Disables the given plugin. Does nothing if the plugin can't be found.
+     */
+    IMPORT_C void SetPluginAvailabilityL( TUid aPluginUid, TBool aEnabled );
+
+    /**
+     * Returns a const reference to the plugin information array.
+     */
+    IMPORT_C const RImplInfoPtrArray& PluginInfoArray() const;
+
+    /**
+     * Returns a const reference to the views array.
+     */
+    IMPORT_C const RPointerArray<CCalenViewInfo>& Views() const;
+
+    /**
+     * When a plugin is disabled it can not be unloaded until
+     * any views etc it has provided have been deleted. This function
+     * is called when it is safe to unload the plugin.
+     */
+    IMPORT_C void UnloadPluginsL( const RArray<TUid>& aPlugins);
+    
+    /**
+     * Returns ETrue if a view has been hidden by a plugin, 
+     */
+    IMPORT_C TBool HiddenView( TUid aHiddenView) const;
+    
+    /**
+     * Returns if a view is provided by a rom based plugin
+     */ 
+     IMPORT_C TBool IsViewRomBased( TUid aViewUid ) const;
+
+    /**
+     * Fills the list of views hidden by a particular plugin
+     */ 
+    IMPORT_C void GetHiddenViewIdL( TUid aPluginUid, RArray<TInt>& aHiddenViews );
+     
+    /**
+     * Returns plugin view uid that is hidking the input view
+     */ 
+    IMPORT_C TUid GetReplacePluginViewIdL( TUid aHiddenViewId );
+    /**
+     * Returns if plugin can be enabled/disabled from settings
+     */
+    IMPORT_C TBool CanBeEnabledDisabledL(TUid aPluginUid);
+	
+    /**
+     * Disable all plugins 
+     */
+    IMPORT_C void DisableAllPluginsL();
+    
+    /**
+     * Reload all plugins
+     */
+    IMPORT_C void DoPluginLoadingL();
+    
+public:  // from MCalenNotificationHandler
+    void HandleNotification(const TCalenNotification aNotification );
+
+private: // Constructors
+    CCalenCustomisationManager( MCalenServicesFactory& aFactory,
+                                MCalenServices& aServices,
+                                RPointerArray<CCalenViewInfo>& aViewArray,
+                                CCalenPluginStatusArray& aPluginSettingsStatus );
+
+    void ConstructL();
+
+private: // New functions
+    void LoadPluginL( TUid aPluginUid );
+
+    void DoImmediatePluginLoadingL();
+
+    void OfferMenuPaneToPluginsL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+    CCalenCustomisation* FindPluginL( TUid aUid );
+
+    static TBool PluginAvailabilityFinder( const TUid* aUid, 
+                                 const TCalenPluginAvailability& aArrayItem );
+                                 
+    static TBool PluginInfoFinder( const TUid* aUid , 
+   															const CImplementationInformation&  aArrayItem);
+                                     
+    void AddPluginL( CCalenCustomisation* aPlugin, TUid aUid ); 
+    RPointerArray<CCalenViewInfo>& ViewInfoArray();
+
+    void CreateActivePluginListL();
+
+    void EnablePluginL( TUid aPluginUid );
+
+    void DisablePluginL( TUid aPluginUid );
+    
+    void CheckHiddenViewL( TUid aViewUid, TUid aPluginUid  );
+    
+    void HandleNotificationL(TCalenNotification aNotification);
+    
+  
+    
+    /**
+     * Disable plugin on fake exit
+     */
+    void DisablePluginOnFakeExitL(TUid aPluginUid);
+   
+    /*
+     * Load custom plugins based on the variant
+     */
+	void LoadPluginsBasedOnVariantL();
+   
+    
+private:
+    /**
+     * Internal class used as a wrapper around a plugin
+     * and its uid.
+     */
+    class CPluginInfo : public CBase
+        {
+        public: // Constructor & Destructor
+            CPluginInfo( CCalenCustomisation* aPlugin, TUid aUid );
+            ~CPluginInfo();
+
+        public: // New functions
+            static TBool Identifier( const TUid* aUid,
+                                     const CPluginInfo& aArray );
+            CCalenCustomisation& Plugin();
+            TUid Uid() const;
+            void Disable( TBool aDisabled );
+            TBool IsDisabled();
+
+        private: // Data
+            CCalenCustomisation* iPlugin;
+            TUid iUid;
+            TBool iDisabled;
+        };
+
+private: // Data
+    RImplInfoPtrArray iPluginInfo;
+
+    MCalenServicesFactory& iServicesFactory;
+
+    // takes ownership of the plugins
+    RPointerArray<CPluginInfo> iPlugins;
+
+    // Array of views. Neither the array nor the contents are owned here at any time.
+    RPointerArray<CCalenViewInfo>& iViewInfoArray;
+
+    RArray<TUid> iActivePlugins;
+    RArray<TUid> iRomBasedPlugins;
+
+    CCalenGlobalData* iGlobalData;
+
+    TLinearOrder<CCalenViewInfo> iSortOrder;
+    
+    MCalenServices& iServices;
+
+    TUid iInfoBarProviderUid;
+    TUid iPreviewPaneProviderUid;
+    
+    RArray<TInt> iHiddenViews;
+    
+    CCalenPluginStatusArray& iPluginSettingsStatus;
+    
+    TBool iPluginsEnabledDisabled;
+    RArray<TUid> iDefferedUnloadPluginList; 
+    CCalenSetting* iSetting;
+    TPtrC iInfoBarStr;
+    };
+
+#endif    // CALENCUSTOMISATIONMANAGER_H
+
+// End of File