phonebookui/Phonebook2/ccapplication/ccapp/inc/ccapppluginloader.h
changeset 0 e686773b3f54
child 5 81f8547efd4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccapp/inc/ccapppluginloader.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,382 @@
+/*
+* 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:  Class for loading and handling the view plugins
+*
+*/
+
+
+#ifndef __CCAPPLUGINLOADER_H__
+#define __CCAPPLUGINLOADER_H__
+
+#include <e32base.h>
+
+class CCCAppView;
+class CCCAppPluginData;
+class CCCAppViewPluginBase;
+class CImplementationInformation;
+class CEikonEnv;
+class MCCAppEngine;
+class TCCAPluginsOrderInfo;
+class CcaPluginFactoryOwner;
+
+/**
+ *  Class for loading and handling the plugins
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib ccaapp.exe
+ *  @since S60 v5.0
+ */
+class CCCAppPluginLoader : public CBase
+    {
+#ifdef __CCAPPUNITTESTMODE
+    friend class T_CCCAppPluginLoader;
+#endif// __CCAPPUNITTESTMODE       
+
+public:
+
+    /**
+     * Two phase contstructor
+     */
+    static CCCAppPluginLoader* NewL(
+        MCCAppEngine* aAppEngine, 
+        const TDesC8& aPluginProperties, 
+        const TDesC8& aTypeFilter = KNullDesC8 );
+
+    /**
+     * Destructor.
+     */
+    ~CCCAppPluginLoader();
+
+private:
+    
+    CCCAppPluginLoader(MCCAppEngine* aAppEngine);
+    void ConstructL(const TDesC8& aPluginProperties, const TDesC8& aTypeFilter);
+
+public:
+    
+    /**
+     * Returns the next plug-in data relative to the one in focus
+     * and changes the focus
+     *
+     * @since S60 v5.0
+     * @param aOnlyVisiblePlugins EFalse: includes also hidden plugins 
+     * @return A plug-in data if it exists, NULL otherwise.
+     */
+    CCCAppPluginData* NextPlugin( TBool aOnlyVisiblePlugins );
+    
+    /**
+     * Returns the previous plug-in data relative to the one in focus
+     * and changes the focus
+     *
+     * @since S60 v5.0
+     * @param aOnlyVisiblePlugins EFalse: includes also hidden plugins
+     * @return A plug-in data if it exists, NULL otherwise.
+     */
+    CCCAppPluginData* PreviousPlugin( TBool aOnlyVisiblePlugins );
+
+    /**
+     * Tries to set certain plugin in focus.
+     *
+     * @since S60 v5.0
+     * @param aUid is the plugin wanted to be in focus
+     * @return index of succesfully set plugin, otherwise KErrNotFound.
+     */
+    TInt SetPluginInFocus( const TUid aUid );   
+    
+    /**
+     * Returns the current plug-in data in focus
+     *
+     * @since S60 v5.0
+     * @return A plug-in data, NULL if first
+     */
+    CCCAppPluginData* PluginInFocus();
+    
+    /**
+     * Returns the number of all available plug-ins
+     *
+     * @since S60 v5.0
+     * @return Number loaded plug-ins.
+     */
+    TInt PluginsCount() const;
+
+    /**
+     * Returns the number of visible plug-ins
+     *
+     * @since S60 v5.0
+     * @return Number visible plug-ins.
+     */    
+    TInt VisiblePluginCount() const; 
+    
+    /**
+     * Returns the plug-in data at certain index.
+     *
+     * @since S60 v5.0
+     * @param aIndex is the plugin wanted
+     * @param aChangefocus if the focus is needed to change also
+     * @return A plug-in data if it exists, NULL otherwise.
+     */
+    CCCAppPluginData* PluginAt( TInt aIndex, TBool aChangefocus = EFalse );
+
+    /**
+     * Returns the plug-in data at certain index within visible plugins.
+     *
+     * @since S60 v5.0
+     * @param aIndex Index of the plugin within visible plugins.
+     * @param aChangefocus if the focus is needed to change also
+     * @return A plug-in data if it exists, NULL otherwise.
+     */
+    CCCAppPluginData* VisiblePlugin( TInt aIndex, TBool aChangefocus = EFalse );    
+    
+    /**
+     * Removes plugin from plugin loader. 
+     * Needed for error cases. 
+     *
+     * @since S60 v5.0
+     * @param index of plugin in loader.
+     */
+    void RemovePlugin( TUid aPlugin );
+
+    /**
+     * Returns plugin.
+     *
+     * @since S60 v5.0
+     * @param aPlugin Uid of plugin
+     * @return A plug-in data if it exists, NULL otherwise.
+     */
+    CCCAppViewPluginBase* Plugin( TUid aPlugin );    
+
+    /**
+     * Getter for plugin visiblity.
+     *
+     * @since S60 v5.0
+     * @return plugin visibility, see enum CCCAppPluginData::TPluginVisibility.
+     */     
+    TInt PluginVisibility(TUid aPlugin, TInt& aTabNbr);    
+    
+    /**
+     * Setter for plugin visiblity.
+     *
+     * @since S60 v5.0
+     * @param aPluginVisibility, see enum CCCAppPluginData::TPluginVisibility.
+     */    
+    TBool SetPluginVisibility(
+        TUid aPlugin,
+        TInt aVisibility);
+    
+private:
+
+    /**
+     * Loads multiple views using factory functionality from a factory. Through this interface one 
+     * plugin dll can instantiate multiple views.  
+     *
+     * @since S60 v5.0
+     */	
+    void LoadOneMultiViewPluginL(CImplementationInformation* aImplementationInformation);    
+    
+    /**
+     * Goes through the iPluginInfoArray, loads all the plugins and 
+     * appends them to array.
+     *
+     * @since S60 v5.0
+     */
+    void LoadAllPlugins( const RArray<TCCAPluginsOrderInfo>& aPluginOrderInfoArray, const TDesC8& aPluginProperties );
+    
+    /**
+     * Loads plugin and appends it to array.
+     *
+     * @since S60 v5.0
+     * @param aImplementationUid Implementation UID of the plug-in to be loaded.
+     */
+    void LoadPluginL( TUid aImplementationUid );
+    
+    /** 
+     * Extract sXP plug-in names from name string and put them to name array.
+     * 
+     * @param aPbksXPExtesionNamesArray, names are stored.
+     * @param aNameString, name string contains all sXP plug-in names, each plugin
+     *        name is seperated be pipeline "|", e.g Google|MSN|Ovi|
+     */
+    void GetPbksXPExtesionNamesL( RArray<TPtrC>& aPbksXPExtesionNamesArray,
+            const TDesC& aNameString);
+    
+    /**
+    * copy pluginInfo address from pluginInforArrays to RArray<TCCAPluginsOrderInfo> array.
+    * plus opaques values. make RArray<TCCAPluginsOrderInfo> array 3 group: ECCAInHousePlugins,
+    * ECCAPlugindInBothCCAAndNameList and ECCAPluginsOnlyInCCA, store group info.
+    * 
+    * @param aOrderInfoArray, store address copy pluginInfo object from iPluginInforArray,
+    *        plus order and groupInfo.
+    * @param aNameListPluginNameArray, phonebook mainview sXPExtension plugins name list
+    * @param aOldPluginInfoArray	
+    * @param aNewPluginInfoArray 
+    */
+    void GetPluginsInfoL( RArray<TCCAPluginsOrderInfo>& aOrderInfoArray,
+            const RArray<TPtrC>& aNameListPluginNameArray,
+            RPointerArray<CImplementationInformation>& aOldPluginInfoArray,
+            RPointerArray<CImplementationInformation>& aNewPluginInfoArray);
+
+    /**
+    * copy pluginInfo address from pluginInforArray to RArray<TCCAPluginsOrderInfo> array.
+    * plus opaques values. make RArray<TCCAPluginsOrderInfo> array 3 group: ECCAInHousePlugins,
+    * ECCAPlugindInBothCCAAndNameList and ECCAPluginsOnlyInCCA, store group info.
+    * 
+    * @param aOrderInfoArray, store address copy pluginInfo object from iPluginInforArray,
+    *        plus order and groupInfo.
+    * @param aNameListPluginNameArray, phonebook mainview sXPExtension plugins name list
+    * @param aPluginInfoArray    
+    * @param aIsOldInterFaceType ETrue if old interface type plugins are processed  
+    */
+    void AppendOrderInfoL( RArray<TCCAPluginsOrderInfo>& aOrderInfoArray,
+            const RArray<TPtrC>& aNameListPluginNameArray,
+            RPointerArray<CImplementationInformation>& aPluginInfoArray,
+            TBool aIsOldInterFaceType);    
+    
+    /**
+     * Find smallest opaque value from plugins only in cca.
+     * 
+     * @param aOrderInfoArray array contains TCCAPluginsOrderInfo
+     * @return smallest opaque value
+     */
+    TInt SmallestOpaqueFromPluginsOnlyInCCA( RArray<TCCAPluginsOrderInfo>& aOrderInfoArray );
+    
+    /**
+     * Find largest opaque value from in-house plugins.
+     * 
+     * @param aOrderInfoArray array contains TCCAPluginsOrderInfo
+     * @return largest opaque value
+     */
+    TInt LargestOpaqueFromInHousePlugins( RArray<TCCAPluginsOrderInfo>& aOrderInfoArray );
+
+    /**
+     * Update orders for plugins only in CCA view
+     * 
+     * @param aStartPosition used for order updating
+     * @param aOrderInfoArray array of TCCAPluginsOrderInfo
+     */
+    void UpdateOrdersForPluginsOnlyInCCA(const TInt aStartPosition,
+            RArray<TCCAPluginsOrderInfo>& aOrderInfoArray);
+    
+    /**
+      * Update orders for plugins in both CCA and name list
+      * 
+      * @param aLastPosition used for order updating, itself is also updated
+      * @param aOrderInfoArray array of TCCAPluginsOrderInfo
+      * @param aNameListPluginNameArray array contains plugins names in Name list view
+      */
+    void UpdateOrdersForPluginsInBothCCAAndNameList( TInt& aLastPosition,
+            RArray<TCCAPluginsOrderInfo>& aOrderInfoArray,
+            const RArray<TPtrC>& aNameListPluginNameArray);
+    /**
+     * changed iOrder informatin of each element in orderinfoarray.
+     * then Sort sXP plug-ins orderinforarray by iOrder. 
+     *       
+     * @param aOrderInfoArray order information will be updated, the array will be sorted
+     *        then by order.
+     *        
+     * @param aNameListPluginNameArray contains sXP plug-in names for Name List.
+     *        Used for find element in aOrderInfoArray.
+     */
+    void SortPluginsOrderInfoL( RArray<TCCAPluginsOrderInfo>& aOrderInfoArray,
+            const RArray<TPtrC>& aNameListPluginNameArray);
+   
+    /**
+     * Find phonebook main view sXPExtension Plugin name from name array 
+     *
+     * @param aCCAPluginInfo, a CImplementationInformation type object.
+     * @param aNameListPluginNameArray, phonebook main view sXPExtension Plugins name array
+     * 
+     * @return found name's position in aNameListPluginNameArray, KErrNotFound if not found.
+     */
+    TInt FindPluginNameFromNameListByCCAPluginInfo(const CImplementationInformation& aCCAPluginInfo,
+            const RArray<TPtrC>& aNameListPluginNameArray);
+    
+    /**
+     * Get Opaque integer value from a refrerence of CImplementationInformation
+     * 
+     * @param aInfo, object of CImplementationInformation
+     * @return opaque integer value.
+     */
+    TInt CCCAppPluginLoader::OpaqueValueFrom( const CImplementationInformation& aInfo );
+    
+    /**
+     * Loads a plugin.
+     * 
+     * @param aPluginsOrderInfo ordering info
+     * @param aPluginProperties properties to fulfill  
+     * @return opaque integer value.
+     */
+    void CheckAndLoadPluginL(
+            const TCCAPluginsOrderInfo& aPluginsOrderInfo,            
+            const TDesC8& aPluginProperties );
+    
+    /**
+     * Returns plugin order.
+     * 
+     * @param aImplementationInformation ecom implementation information
+     * @return order
+     */    
+    TInt GetOrderValueL( const CImplementationInformation& aInfo );
+    
+    /**
+     * Compares properties of two propertystrings.
+     * 
+     * @param aData properties to compare
+     * @param aRefData properties to compare
+     * @param aMatchValuesToo ETrue if also property values need to becompared 
+     * @return matching properties.
+     */    
+    HBufC8* GetmachingPropertiesLC(
+            const TDesC8& aData, const TDesC8& aRefData, TBool aMatchValuesToo);
+    
+    /**
+     * Extracts name value pair data from property string. Extracted data
+     * is removed from property string
+     * 
+     * @param aName name extracted
+     * @param aValue value extracted
+     * @param aDataPtr property string  
+     */    
+    void GetNameValue( TPtrC8& aName, TPtrC8& aValue, TPtrC8& aDataPtr );
+    
+private://data
+
+
+    /**
+     * Pointer array of loaded plugin data structures.
+     * Own.
+     */
+    RPointerArray<CCCAppPluginData> iPluginDataArray;
+    /**
+     * Current plugin in use
+     */
+    TInt iCurrentPlugin;
+    
+    /**
+     * Reference to the cca application engine
+     * not owned
+     */
+    MCCAppEngine* iAppEngine;
+    
+    /**
+     * Temporary holder for CcaPluginFactoryOwner, 
+     * owned unless ownership handed over.
+     */    
+    CcaPluginFactoryOwner* iFactoryTempPtr;    
+	};
+
+#endif // __CCAPPUNITTESTMODE
+//End of file