diff -r 5ef31a21fdd5 -r e7325f632549 appfoundation/statemodel/src/hsstatefactory.cpp --- a/appfoundation/statemodel/src/hsstatefactory.cpp Fri Jun 11 16:25:06 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,225 +0,0 @@ -/* -* 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: State factory. -* -*/ - -#include -#include -#include -#include - -#include "hsstatefactory.h" -#include "hsstatefactory_p.h" -#include "hsstateprovidermanifest.h" -#include "hstest_global.h" - -HsStateFactoryPrivate::HsStateFactoryPrivate(HsStateFactory* aPublic) - : QObject(aPublic), - mQ(aPublic) -{ - -} - -HsStateFactoryPrivate::~HsStateFactoryPrivate() -{ - -} - -QList HsStateFactoryPrivate::states() -{ - QStringList pluginPaths; - - //Check plugin dirs from root of different drives - QFileInfoList drives = QDir::drives(); - for(int i=0; i < drives.count(); i++) - { - QFileInfo drive = drives.at(i); - QString driveLetter = drive.absolutePath(); - QString path = driveLetter + mPluginManifestDirectory; - if(QDir(path).exists()) - { - pluginPaths << path; - } - } - - //Check plugin dir relative to current dir - if(QDir(mPluginManifestDirectory).exists() && !pluginPaths.contains(QDir(mPluginManifestDirectory).absolutePath())) - { - pluginPaths << mPluginManifestDirectory; - } - - QList states; - - for(int h=0; h < pluginPaths.count(); h++) - { - QString path = pluginPaths.at(h); - QDir dir(path); - QStringList filters("*.manifest"); - - for(int i=0; i < dir.entryList(filters, QDir::Files).count(); ++i) - { - QString fileName = dir.entryList(filters, QDir::Files).at(i); - - HsStateProviderManifest manifest; - manifest.loadFromXml(dir.absoluteFilePath(fileName)); - - if(manifest.loadOnQuery()) - { - QList tokens = manifest.states(); - for(int j=0; j < tokens.count(); ++j) - { - HsStateToken token = tokens.at(j); - IHsStateProvider* provider = loadProviderFromPlugin(token.mLibrary); - if(provider) - { - states << provider->states(); - delete provider; - } - } - } - else - { - states << manifest.states(); - } - } - } - return states; -} - -QState* HsStateFactoryPrivate::createState(const HsStateToken& aToken) -{ - IHsStateProvider* provider = loadProviderFromPlugin(aToken.mLibrary); - if(!provider) - { - HSDEBUG("Widget creation failed - No provider.") - return 0; - } - - QState* state = provider->createState(aToken); - delete provider; - if(!state) - { - HSDEBUG("State creation failed.") - } - return state; -} - -IHsStateProvider* HsStateFactoryPrivate::loadProviderFromPlugin(const QString& aPluginName) -{ - QStringList pluginPaths; - - //Check plugin dirs from root of different drives - QFileInfoList drives = QDir::drives(); - for(int i=0; i < drives.count(); i++) - { - QFileInfo drive = drives.at(i); - QString driveLetter = drive.absolutePath(); - QString path = driveLetter + mPluginDirectory; - if(QDir(path).exists()) - { - pluginPaths << path; - } - } - - - //Check plugin dir relative to current dir - if(QDir(mPluginManifestDirectory).exists() && !pluginPaths.contains(QDir(mPluginDirectory).absolutePath())) - { - pluginPaths << mPluginDirectory; - } - - IHsStateProvider* provider = 0; - QPluginLoader loader; - QObject* plugin = 0; - - for(int i=0; i < pluginPaths.count(); i++) - { - QString path = pluginPaths.at(i); - QString fileName = QDir(path).absoluteFilePath(aPluginName); - - loader.setFileName(fileName); - plugin = loader.instance(); - provider = qobject_cast(plugin); - if(provider) - { - return provider; - } - - //Don't leak memory if provider not IHsStateProvider - if(plugin) - { - HSDEBUG("State provider load - !provider, deleting plugin.") - delete plugin; - } - } - - HSDEBUG("State provider load failed - Not found.") - return 0; -} - -/*! - \class HsStateFactory - \ingroup group_hsstatemodel - \brief Finds and creates home screen states. - State factory finds home screen states from state provider - plugins. The search is done based on given plugin manifest - and plugin binary directories. Found states are returned as - a list of state tokens. State factory creates an instance of - a state base on a state token that is given to it. -*/ - -/*! - Constructor. - \a aPluginManifestDirectory Directory that contains plugin manifests. - \a aPluginDirectory Directory that contains plugin binaries. - \a aParent Parent object. -*/ -HsStateFactory::HsStateFactory(const QString& aPluginManifestDirectory, - const QString& aPluginDirectory, - QObject* aParent) - : QObject(aParent) -{ - mD = new HsStateFactoryPrivate(this); - mD->mPluginManifestDirectory = aPluginManifestDirectory; - mD->mPluginDirectory = aPluginDirectory; -} - - -/*! - Destructor. -*/ -HsStateFactory::~HsStateFactory() -{ - -} - -/*! - Returns found states as a list of state tokens. -*/ -QList HsStateFactory::states() -{ - return mD->states(); -} - -/*! - Creates and returns a state based on the given token. - \a aToken Identifies the state to be created. - - Returns The created state. -*/ -QState* HsStateFactory::createState(const HsStateToken& aToken) -{ - return mD->createState(aToken); -}