diff -r 000000000000 -r f72a12da539e menufw/menufwui/mmextensions/mmextensionmanager/src/mmextensionmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/menufw/menufwui/mmextensions/mmextensionmanager/src/mmextensionmanager.cpp Thu Dec 17 08:40:49 2009 +0200 @@ -0,0 +1,199 @@ +/* +* 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: Menu Framework Extension Manager +* +*/ + +#include // for CleanupResetAndDestroyPushL + +#include "mmextensionplugin.h" +#include "mmextensionmanager.h" +#include "menudebug.h" + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CMMExtensionManager::CMMExtensionManager( MMmActionRequest& aActionRequest ): + iActionRequest( aActionRequest ) + { + // No implementation required + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CMMExtensionManager::~CMMExtensionManager() + { + THashMapIter< TInt32, CMMExtensionPlugin* > iter( iPluginMap); + for (CMMExtensionPlugin* const* ptr = + ( CMMExtensionPlugin* const* ) iter.NextValue(); + ptr; ptr = ( CMMExtensionPlugin* const* ) iter.NextValue()) + { + delete (CMMExtensionPlugin*)(*ptr); + } + iPluginMap.Close (); + + + //delete iPluginNameMap + /*THashMapIter< HBufC*, TInt32 > iter1( iPluginNameMap ); + while ( HBufC*const* ptrHbuf = iter1.NextKey() ) + { + delete *ptrHbuf; + } + iPluginNameMap.Close();*/ + + delete iEcomObserver; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CMMExtensionManager* CMMExtensionManager::NewLC( MMmActionRequest& aActionRequest ) + { + CMMExtensionManager* self = new (ELeave) CMMExtensionManager( aActionRequest ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C CMMExtensionManager* CMMExtensionManager::NewL( + MMmActionRequest& aActionRequest ) + { + CMMExtensionManager* self = CMMExtensionManager::NewLC( aActionRequest ); + CleanupStack::Pop (); // self; + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CMMExtensionManager::ConstructL() + { + iEcomObserver = CMMEcomObserver::NewL( this ); + LoadPluginsL(); + } + +// --------------------------------------------------------------------------- +// CASpaPluginManager::LoadPluginsL +// Load plugins implementations +// --------------------------------------------------------------------------- +// +void CMMExtensionManager::LoadPluginsL() + { + DEBUG16(("\t_MM_: CMMExtensionManager::LoadPluginsL()") ); + + // Read info about all implementations into infoArray + RImplInfoPtrArray infoArray; + + // Note that a special cleanup function is required to reset and destroy + // all items in the array, and then close it. + CleanupResetAndDestroyPushL( infoArray ); + CMMExtensionPlugin::ListAllImplementationsL( infoArray ); + + // Loop through each info for each implementation + // and create and use each in turn + CMMExtensionPlugin* plug; + for ( TInt i = 0; i < infoArray.Count(); i++ ) + { + // Slice off first sub-section in the data section + TUid current_plugin = infoArray[i]->ImplementationUid(); + plug = CMMExtensionPlugin::NewL( current_plugin , &iActionRequest ); + CleanupStack::PushL( plug ); + TInt32 key = current_plugin.iUid; + iPluginMap.InsertL( key, plug ); + CleanupStack::Pop( plug ); + plug = NULL; + } + CleanupStack::PopAndDestroy( &infoArray ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CMMExtensionManager::ExecuteActionL( + const TUid aUid, + const TDesC& aCommand, + CLiwGenericParamList* aEventParamList ) + { + TInt result = KErrNotFound; + if( aUid.iUid != KNullUidValue ) + { + CMMExtensionPlugin* pluginInstance = GetImplementationL( aUid ); + if( pluginInstance ) + { + result = pluginInstance->ExecuteActionL( + aCommand, aEventParamList ); + } + } + else + { + THashMapIter plugins( iPluginMap ); + CMMExtensionPlugin* const* plugin = NULL; + for( plugin = plugins.NextValue(); plugin; + plugin = plugins.NextValue() ) + { + (*plugin)->ExecuteActionL( aCommand, aEventParamList ); + } + result = KErrNone; + } + return result; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CMMExtensionPlugin* CMMExtensionManager::GetImplementationL( + const TUid aUid ) + { + CMMExtensionPlugin* ret = NULL; + CMMExtensionPlugin **imp = NULL; + + TInt pluginId ( aUid.iUid ); + + imp = iPluginMap.Find( pluginId ); + if( imp ) + { + ret = *imp; + } + return ret; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CMMExtensionManager::EcomChangedL() + { + THashMapIter< TInt32, CMMExtensionPlugin* > iter( iPluginMap ); + for (CMMExtensionPlugin* const* ptr = + ( CMMExtensionPlugin* const* ) iter.NextValue(); + ptr; ptr = ( CMMExtensionPlugin* const* ) iter.NextValue()) + { + delete (CMMExtensionPlugin*)(*ptr); + } + iPluginMap.Close(); + LoadPluginsL(); + } + +// End of file