diff -r 4526337fb576 -r 3eca7e70b1b8 widgetmodel/alfwidgetfactory/src/alfwidgetfactory.cpp --- a/widgetmodel/alfwidgetfactory/src/alfwidgetfactory.cpp Tue Feb 02 00:28:09 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1114 +0,0 @@ -/* -* Copyright (c) 2007-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: Widget factory implementation file -* -*/ - - -//STL includes -#include - -//ALF Client includes -#include -#include - -//OSN core includes -#include -#include - -//Widget Utils includes -#include - -//Widget factory includes -#include - -//Widget Model includes -#include -#include -#include -#include -#include "alf/ialfvisualtemplate.h" -#include -#include - -//View Widget includes -#include - -//Local Includes -#include "alfwidgetfactory.h" - -using namespace osncore; - -namespace Alf - { - -static const char* const KViewWidgetProductId = "viewwidget"; - - -static IAlfViewWidget* createDefaultViewWidget( - const char* aInstanceId, - int aControlGroupID, - DuiNode* aNode, - CAlfDisplay& aDisplay, - CAlfEnv& aEnv, - IAlfFactoryPlugin& aFactoryPlugin, - const char* aFilePath, - AlfCustomInitDataBase* aCustomData) - { - IAlfViewWidget* ret = 0; - - // Create construction parameter structure. - AlfViewWidgetInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfViewWidgetInitData)); - - // Set the construction parameters. - init.mEnv = &aEnv; - init.mDisplay = &aDisplay; - init.mWidgetId = aInstanceId; - init.mControlGroupId = aControlGroupID; - init.mNode = aNode; - init.mFilePath = aFilePath; - init.mCustomData = aCustomData; - - // Create a temporary factory product and typecast it to the correct - // interface. - IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct( - KViewWidgetProductId, &init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - } - } - - return ret; - } - -static IAlfWidget* createDefaultWidget( - const char* aLoadId, - const char* aInstanceId, - IAlfContainerWidget& aContainerWidget, - DuiNode* aNode, - CAlfEnv& aEnv, - IAlfFactoryPlugin& aFactoryPlugin, - const char* aFilePath, - AlfCustomInitDataBase* aCustomData) - { - IAlfWidget* ret = 0; - - // Create construction parameter structure. - AlfWidgetInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfWidgetInitData)); - - // Set the construction parameters. - init.mEnv = &aEnv; - init.mContainerWidget = &aContainerWidget; - init.mWidgetId = const_cast(aInstanceId); - init.mNode = aNode; - init.mFilePath = aFilePath; - init.mCustomData = aCustomData; - - // Create a temporary factory product and typecast it to the correct - // interface. - IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - } - } - - return ret; - } - -static IAlfModel* createDefaultModel( - const char* aLoadId, - IAlfFactoryPlugin& aFactoryPlugin, - AlfCustomInitDataBase* aCustomData) - { - IAlfModel* ret = 0; - - // Create construction parameter structure. - AlfModelInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfModelInitData)); - - // Set the construction parameters. - init.mCustomData = aCustomData; - - // Create a temporary factory product and typecast it to the correct - // interface. - IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - } - } - - return ret; - } - -static IAlfWidgetControl* createDefaultControl( - const char* aLoadId, - CAlfDisplay& aDisplay, - IAlfFactoryPlugin& aFactoryPlugin, - AlfCustomInitDataBase* aCustomData) - { - IAlfWidgetControl* ret(0); - - // Create construction parameter structure. - AlfWidgetControlInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfWidgetControlInitData)); - - // Set the construction parameters. - init.mDisplay = &aDisplay; - init.mCustomData = aCustomData; - - // Create a temporary factory product and typecast it to the correct - // interface. - IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - } - } - - return ret; - } - -static IAlfElement* createDefaultElement( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - IAlfWidgetControl& aControl, - IAlfFactoryPlugin& aFactoryPlugin, - AlfCustomInitDataBase* aCustomData) - { - IAlfElement* ret(0); - - // Create construction parameter structure. - AlfElementInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfElementInitData)); - - // Set the construction parameters. - init.mControl= &aControl; - init.mElementId = const_cast(aInstanceId); - init.mNode= aNode; - init.mCustomData = aCustomData; - - // Create a temporary factory product and typecast it to the correct - // interface. - IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - } - } - - return ret; - } - -static IAlfVisualTemplate* createDefaultVisualTemplate( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - IAlfFactoryPlugin& aFactoryPlugin, - AlfCustomInitDataBase* aCustomData) - { - IAlfVisualTemplate* ret(0); - - // Create construction parameter structure. - AlfVisualTemplateInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfVisualTemplateInitData)); - - // Set the construction parameters. - init.mVisualTemplateId = const_cast(aInstanceId); - init.mNode= aNode; - init.mCustomData = aCustomData; - - // Create a temporary factory product and typecast it to the correct - // interface. - IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - } - } - - return ret; - } - -static IAlfWidgetEventHandler* createDefaultEventHandler( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - IAlfFactoryPlugin& aFactoryPlugin, - AlfCustomInitDataBase* aCustomData) - { - IAlfWidgetEventHandler* ret(0); - - // Create construction parameter structure. - AlfWidgetEventHandlerInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfWidgetEventHandlerInitData)); - - // Set the construction parameters. - init.mWidgetEventHandlerId = const_cast(aInstanceId); - init.mNode= aNode; - init.mCustomData = aCustomData; - - // Create a temporary factory product and typecast it to the correct - // interface. - IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - } - } - - return ret; - } - -static IAlfLayoutManager* createDefaultLayoutManager( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - IAlfFactoryPlugin& aFactoryPlugin, - AlfCustomInitDataBase* aCustomData) - { - IAlfLayoutManager* ret(0); - - // Create construction parameter structure. - AlfLayoutManagerInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfLayoutManagerInitData)); - - // Set the construction parameters. - init.mLayoutManagerId = const_cast(aInstanceId); - init.mNode= aNode; - init.mCustomData = aCustomData; - - // Create a temporary factory product and typecast it to the correct - // interface. - IAlfInterfaceBase* tmp = aFactoryPlugin.createProduct(aLoadId, &init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - } - } - - return ret; - } - -static IAlfViewWidget* createRegisteredViewWidget( - const char* aInstanceId, - int aControlGroupID, - DuiNode* aNode, - CAlfEnv& aEnv, - CAlfDisplay& aDisplay, - AlfPtrVector& aFactoryList, - const char* aFilePath, - AlfCustomInitDataBase* aCustomData) - { - IAlfViewWidget* ret(0); - IAlfInterfaceBase* tmp(0); - - // Create construction parameter structure. - AlfViewWidgetInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfViewWidgetInitData)); - - // Set the construction parameters. - init.mEnv = &aEnv; - init.mDisplay = &aDisplay; - init.mWidgetId = aInstanceId; - init.mControlGroupId = aControlGroupID; - init.mNode = aNode; - init.mFilePath = aFilePath; - init.mCustomData = aCustomData; - - // Run through registered factories. - for(int i=0;icreateProduct(KViewWidgetProductId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - tmp=0; - } - } - } - - return ret; - } - -static IAlfWidget* createRegisteredWidget( - const char* aLoadId, - const char* aInstanceId, - IAlfContainerWidget& aContainerWidget, - DuiNode* aNode, - CAlfEnv& aEnv, - AlfPtrVector& aFactoryList, - const char* aFilePath, - AlfCustomInitDataBase* aCustomData) - { - IAlfWidget* ret(0); - IAlfInterfaceBase* tmp(0); - - // Create construction parameter structure. - AlfWidgetInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfWidgetInitData)); - - // Set the construction parameters. - init.mEnv = &aEnv; - init.mContainerWidget = &aContainerWidget; - init.mWidgetId = const_cast(aInstanceId); - init.mNode = aNode; - init.mFilePath= aFilePath; - init.mCustomData = aCustomData; - - // Run through registered factories. - for(int i=0;icreateProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - tmp=0; - } - } - } - - return ret; - } - -static IAlfModel* createRegisteredModel( - const char* aLoadId, - AlfPtrVector& aFactoryList, - AlfCustomInitDataBase* aCustomData) - { - IAlfModel* ret(0); - IAlfInterfaceBase* tmp(0); - - // Create construction parameter structure. - AlfModelInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfModelInitData)); - - // Set the construction parameters. - init.mCustomData = aCustomData; - - // Run through registered factories. - for(int i=0;icreateProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - tmp=0; - } - } - } - - return ret; - } - -static IAlfWidgetControl* createRegisteredControl( - const char* aLoadId, - CAlfDisplay& aDisplay, - AlfPtrVector& aFactoryList, - AlfCustomInitDataBase* aCustomData) - { - IAlfWidgetControl* ret(0); - IAlfInterfaceBase* tmp(0); - - - // Create construction parameter structure. - AlfWidgetControlInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfWidgetControlInitData)); - - // Set the construction parameters. - init.mDisplay = &aDisplay; - init.mCustomData = aCustomData; - - // Run through registered factories. - for(int i=0;icreateProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - tmp=0; - } - } - } - - return ret; - } - -static IAlfElement* createRegisteredElement( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - IAlfWidgetControl& aControl, - AlfPtrVector& aFactoryList, - AlfCustomInitDataBase* aCustomData) - { - IAlfElement* ret(0); - IAlfInterfaceBase* tmp(0); - - // Create construction parameter structure. - AlfElementInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfElementInitData)); - - // Set the construction parameters. - init.mControl= &aControl; - init.mElementId = const_cast(aInstanceId); - init.mNode= aNode; - init.mCustomData = aCustomData; - - // Run through registered factories. - for(int i=0;icreateProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - tmp=0; - } - } - } - - return ret; - } - -static IAlfVisualTemplate* createRegisteredVisualTemplate( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - AlfPtrVector& aFactoryList, - AlfCustomInitDataBase* aCustomData) - { - IAlfVisualTemplate* ret(0); - IAlfInterfaceBase* tmp(0); - - // Create construction parameter structure. - AlfVisualTemplateInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfVisualTemplateInitData)); - - // Set the construction parameters. - init.mVisualTemplateId = const_cast(aInstanceId); - init.mNode= aNode; - init.mCustomData = aCustomData; - - // Run through registered factories. - for(int i=0;icreateProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - tmp=0; - } - } - } - - return ret; - } - -static IAlfWidgetEventHandler* createRegisteredEventHandler( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - AlfPtrVector& aFactoryList, - AlfCustomInitDataBase* aCustomData) - { - IAlfWidgetEventHandler* ret(0); - IAlfInterfaceBase* tmp(0); - - // Create construction parameter structure. - AlfWidgetEventHandlerInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfWidgetEventHandlerInitData)); - - // Set the construction parameters. - init.mWidgetEventHandlerId = const_cast(aInstanceId); - init.mNode= aNode; - init.mCustomData = aCustomData; - - // Run through registered factories. - for(int i=0;icreateProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface( - tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - tmp=0; - } - } - } - - return ret; - } - -static IAlfLayoutManager* createRegisteredLayoutManager( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - AlfPtrVector& aFactoryList, - AlfCustomInitDataBase* aCustomData) - { - IAlfLayoutManager* ret(0); - IAlfInterfaceBase* tmp(0); - - // Create construction parameter structure. - AlfLayoutManagerInitData init; - - // Zero out the data in the construction structure. - memset(&init, 0, sizeof(AlfLayoutManagerInitData)); - - // Set the construction parameters. - init.mLayoutManagerId = const_cast(aInstanceId); - init.mNode= aNode; - init.mCustomData = aCustomData; - - // Run through registered factories. - for(int i=0;icreateProduct(aLoadId,&init); - if(tmp) - { - // Object created. Attempt to typecast to correct interface. - ret = IAlfInterfaceBase::makeInterface(tmp); - if(!ret) - { - // Interface not found. Delete the temporary product. - delete tmp; - tmp=0; - } - } - } - - return ret; - } - - -AlfWidgetFactory::AlfWidgetFactory(CAlfEnv& aAlfEnv): - mAlfEnv(aAlfEnv) - { - mWidgetList.setAutoDelete(true); - } - -AlfWidgetFactory::~AlfWidgetFactory() - { - mWidgetList.clear(); - mRegisteredFactoryList.clear(); - } - -IAlfViewWidget* AlfWidgetFactory::createViewWidget( - const char* aInstanceId, - int aControlGroupID, - DuiNode* aNode, - CAlfDisplay* aDisplay, - const char* aFilePath, - AlfCustomInitDataBase* aCustomData) - { - IAlfViewWidget* ret(0); - auto_ptr autoptr = auto_ptr(0); - - IAlfFactoryPlugin* factoryPlugin = mFactoryPluginLoader.loadFactoryPlugin( - KViewWidgetProductId); - - CAlfDisplay* display = aDisplay; - - //Check there is already a widget with the same instance ID. - if(findWidget(aInstanceId)) - { - ALF_THROW(AlfWidgetException,EInvalidWidgetInstanceId, - "Instance ID same as an existing widget.") - } - - //Both node and presentation declaration file handle cannot have - //non-null value at the same time. - if(aNode && aFilePath) - { - ALF_THROW(AlfWidgetException,EInvalidArgument, - "Both node & presentation declaration file handle cannot have non-null values at the same time") - } - - if(!display) - { - if(mAlfEnv.DisplayCount() == 0) - { - // No display objects defined in the environment. - // Throw an exception. - ALF_THROW(AlfException, EDisplayNotFound, - "No display found from environment.Unable to associate a display with the view widget."); - } - display = &mAlfEnv.PrimaryDisplay(); - } - - // Try default factory first - if(factoryPlugin) - { - autoptr.reset(createDefaultViewWidget( - aInstanceId,aControlGroupID,aNode,*display, - mAlfEnv,*factoryPlugin,aFilePath,aCustomData)); - } - - // Then try registered factories - if(!autoptr.get()) - { - autoptr.reset(createRegisteredViewWidget( - aInstanceId,aControlGroupID,aNode, - mAlfEnv,*display,mRegisteredFactoryList, - aFilePath,aCustomData)); - } - - if(autoptr.get() != 0) - { - // If trap occurs throw exception. Created widget will be automatically - // destroyed since it is in auto pointer. - TRAPD(err, appendWidget( - IAlfInterfaceBase::makeInterface(autoptr.get()))); - if(err != KErrNone) - { - ALF_THROW(AlfException, err, - "Appending created widget to environment failed."); - } - - // After succesfull call to AppendWidgetL we can release the autoptr. - ret = autoptr.release(); - } - - return ret; - } - -IAlfWidget* AlfWidgetFactory::createWidget( - const char* aLoadId, - const char* aInstanceId, - IAlfContainerWidget& aContainerWidget, - DuiNode* aNode, - const char* aFilePath, - AlfCustomInitDataBase* aCustomData) - { - IAlfWidget* ret(0); - IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin( - aLoadId); - - //Check there is already a widget with the same instance ID. - if(findWidget(aInstanceId)) - { - ALF_THROW(AlfWidgetException,EInvalidWidgetInstanceId, - "Instance ID same as an existing widget.") - } - - //Both node and presentation declaration file handle cannot have - //non-null value at the same time. - if(aNode && aFilePath) - { - ALF_THROW(AlfWidgetException,EInvalidArgument, - "Both node & presentation declaration file handle cannot have non-null values at the same time") - } - - // Try first default factory - if(pluginFactory) - { - ret = createDefaultWidget( - aLoadId,aInstanceId,aContainerWidget,aNode, - mAlfEnv,*pluginFactory,aFilePath,aCustomData); - } - - // Then try registered factories - if(!ret) - { - ret = createRegisteredWidget( - aLoadId,aInstanceId,aContainerWidget,aNode,mAlfEnv, - mRegisteredFactoryList,aFilePath,aCustomData); - } - - if(ret) - { - TRAPD(err, appendWidget(ret)); - if(err != KErrNone) - { - delete ret; - ALF_THROW(AlfException, err, - "Appending created widget to environment failed."); - } - } - - return ret; - } - -int AlfWidgetFactory::destroyWidget(IAlfWidget* aWidget) - { - int ret = -1; - int widgetCount = mWidgetList.count(); - for ( int i = 0; i < widgetCount; ++i ) - { - if ( mWidgetList[i] == aWidget ) - { - // remove and destroy the widget - mWidgetList.remove( i ); - ret = 0; - break; ; - } - } - return ret; - } - -int AlfWidgetFactory::appendWidget(IAlfWidget* aWidget) - { - int ret = 0; - int widgetCount = mWidgetList.count(); - for ( int i = 0; i < widgetCount; ++i ) - { - if ( mWidgetList[i] == aWidget ) - { - ret = -1; - break; ; - } - } - if(ret != -1 ) - { - mWidgetList.resize( mWidgetList.count()+1); - mWidgetList.insert( mWidgetList.count(), aWidget ); - } - return ret; - } - -IAlfWidget* AlfWidgetFactory::findWidget(const char* aWidgetName) const - { - IAlfWidget* ret(NULL); - int widgetCount = mWidgetList.count(); - for(int i=0; iwidgetName(); - if(!strcmp(widgetName,aWidgetName)) - { - ret = mWidgetList[i]; - } - } - return ret; - } - -IAlfModel* AlfWidgetFactory::createModel( - const char* aLoadId, - AlfCustomInitDataBase* aCustomData) - { - IAlfModel* ret(0); - IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin( - aLoadId); - - // Try first default factory - if(pluginFactory) - { - ret = createDefaultModel(aLoadId,*pluginFactory, aCustomData); - } - - // Then try registered factories - if(!ret) - { - ret = createRegisteredModel( - aLoadId,mRegisteredFactoryList,aCustomData); - } - - return ret; - } - -IAlfWidgetControl* AlfWidgetFactory::createControl( - const char* aLoadId, - const char* aInstanceId, - CAlfDisplay* aDisplay, - AlfCustomInitDataBase* aCustomData) - { - IAlfWidgetControl* ret(0); - IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin( - aLoadId); - //Compiler warning removal. Left here for future use cases. - (void)aInstanceId; - - CAlfDisplay* display = aDisplay; - - if(!display) - { - display = &mAlfEnv.PrimaryDisplay(); - } - - // Try first default factory - if(pluginFactory) - { - ret = createDefaultControl(aLoadId,*display,*pluginFactory,aCustomData); - } - - // Then try registered factories - if(!ret) - { - ret = createRegisteredControl( - aLoadId,*display,mRegisteredFactoryList,aCustomData); - } - - return ret; - } - -IAlfElement* AlfWidgetFactory::createElement( - const char* aLoadId, - const char* aInstanceId, - IAlfWidgetControl& aControl, - DuiNode* aNode, - AlfCustomInitDataBase* aCustomData) - { - IAlfElement* ret(0); - IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin( - aLoadId); - - // Try first default factory - if (pluginFactory) - { - ret = createDefaultElement( - aLoadId,aInstanceId,aNode,aControl, - *pluginFactory,aCustomData); - } - - // Then try registered factories - if(!ret) - { - ret = createRegisteredElement( - aLoadId,aInstanceId,aNode,aControl, - mRegisteredFactoryList,aCustomData); - } - - return ret; - } - -IAlfVisualTemplate* AlfWidgetFactory::createVisualTemplate( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - AlfCustomInitDataBase* aCustomData ) - { - - IAlfVisualTemplate* ret(0); - IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin( - aLoadId); - - // Try first default factory - if (pluginFactory) - { - ret = createDefaultVisualTemplate( - aLoadId,aInstanceId,aNode,*pluginFactory,aCustomData); - } - - // Then try registered factories - if(!ret) - { - ret = createRegisteredVisualTemplate( - aLoadId,aInstanceId,aNode, - mRegisteredFactoryList,aCustomData); - } - - return ret; - } - -IAlfWidgetEventHandler* AlfWidgetFactory::createEventHandler( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - AlfCustomInitDataBase* aCustomData ) - { - IAlfWidgetEventHandler* ret(0); - IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin( - aLoadId); - - // Try first default factory - if (pluginFactory) - { - ret = createDefaultEventHandler( - aLoadId,aInstanceId,aNode,*pluginFactory,aCustomData); - } - - // Then try registered factories - if(!ret) - { - ret = createRegisteredEventHandler( - aLoadId,aInstanceId,aNode, - mRegisteredFactoryList,aCustomData); - } - - return ret; - } - -IAlfLayoutManager* AlfWidgetFactory::createLayoutManager( - const char* aLoadId, - const char* aInstanceId, - DuiNode* aNode, - AlfCustomInitDataBase* aCustomData) - { - IAlfLayoutManager* ret(0); - IAlfFactoryPlugin* pluginFactory = mFactoryPluginLoader.loadFactoryPlugin( - aLoadId); - - // Try first default factory - if (pluginFactory) - { - ret = createDefaultLayoutManager( - aLoadId,aInstanceId,aNode,*pluginFactory,aCustomData); - } - - // Then try registered factories - if(!ret) - { - ret = createRegisteredLayoutManager( - aLoadId,aInstanceId,aNode, - mRegisteredFactoryList,aCustomData); - } - - return ret; - } - -void AlfWidgetFactory::registerCustomWidgetFactory( - IAlfFactoryPlugin* aFactory) - { - mRegisteredFactoryList.resize(mRegisteredFactoryList.count()+1); - mRegisteredFactoryList.insert(mRegisteredFactoryList.count(),aFactory); - } - -IAlfInterfaceBase* AlfWidgetFactory::makeInterface(const IfId& aType) - { - if ( !strcmp(aType.mImplementationId, - IAlfWidgetFactory::type().mImplementationId) ) - { - return static_cast(this); - } - - return 0; - } - } // namespace Alf - -// End of File