diff -r 2b1b11a301d2 -r 4b195f3bea29 homescreenapp/hsdomainmodel/src/hshostedwidgetfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsdomainmodel/src/hshostedwidgetfactory.cpp Wed Aug 18 09:40:07 2010 +0300 @@ -0,0 +1,106 @@ +/* +* Copyright (c) 2009 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: +* +*/ + + + +#include +#include +#include +#include +#include "hshostedwidgetfactory.h" + +QTM_USE_NAMESPACE + +/*! + \class HsWidgetFactory + \ingroup group_hsdomainmodel + \brief Each widget is controlled by the home screen framework through a widget host. +*/ + + +struct HsHostedWidgetFactoryImpl{ + QServiceManager mServiceManager; + QServiceFilter mFilter; +}; + + + +HsHostedWidgetFactory *HsHostedWidgetFactory::mInstance = 0; + +HsHostedWidgetFactory *HsHostedWidgetFactory::instance() +{ + if (!mInstance) { + mInstance = new HsHostedWidgetFactory; + } + return mInstance; +} + +HsHostedWidgetFactory *HsHostedWidgetFactory::takeInstance() +{ + HsHostedWidgetFactory *instance = mInstance; + mInstance = 0; + return instance; +} + +HsHostedWidgetFactory *HsHostedWidgetFactory::setInstance + (HsHostedWidgetFactory *instance) +{ + HsHostedWidgetFactory *old = mInstance; + if (mInstance != instance) { + mInstance = instance; + } + return old; +} + +QObject *HsHostedWidgetFactory::createWidget(const QString &uri) +{ + mImpl->mFilter.setServiceName(uri); + QList interfaces = + mImpl->mServiceManager.findInterfaces(mImpl->mFilter); + + if (interfaces.isEmpty()) { + return 0; + } + // In theory we support QGraphicsWidget derived widgets + QObject *widgetObject = mImpl->mServiceManager.loadInterface(interfaces.first()); + + if (!qobject_cast(widgetObject)) { + delete widgetObject; + widgetObject = 0; + } + return widgetObject; +} + +/*! + Constructs a new widget host with given \a databaseId and + \a parent item. +*/ +HsHostedWidgetFactory::HsHostedWidgetFactory(QObject *parent) + : QObject(parent), + mImpl(new HsHostedWidgetFactoryImpl) +{ + mImpl->mFilter.setInterface("com.nokia.symbian.IHomeScreenWidget"); +} + +/*! + Destructor. +*/ +HsHostedWidgetFactory::~HsHostedWidgetFactory() +{ + delete mImpl; +} +