diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp --- a/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -29,6 +29,7 @@ #include "homescreendomainpskeys.h" #include "hsdefaultruntime.h" +#include "hsdatabase.h" #include "hscontentservice.h" #include "hsshortcutservice.h" #include "hsmenueventtransition.h" @@ -62,16 +63,28 @@ : QStateMachine(parent), mContentService(0), mHomeScreenActive(false), - mIdleStateActive(false) + mIdleStateActive(false), + mPublisher(NULL) { HSTEST_FUNC_ENTRY("HS::HsDefaultRuntime::HsDefaultRuntime"); + HsDatabase *db = new HsDatabase; + db->setConnectionName("homescreen.dbc"); +#ifdef Q_OS_SYMBIAN + db->setDatabaseName("c:/private/20022f35/homescreen.db"); +#else + db->setDatabaseName("homescreen.db"); +#endif + db->open(); + HsDatabase::setInstance(db); + HsWidgetPositioningOnOrientationChange::setInstance( new HsAdvancedWidgetPositioningOnOrientationChange); HsWidgetPositioningOnWidgetAdd::setInstance( new HsAnchorPointInBottomRight); + createStatePublisher(); createContentServiceParts(); createStates(); assignServices(); @@ -86,6 +99,7 @@ HsDefaultRuntime::~HsDefaultRuntime() { HsWidgetPositioningOnOrientationChange::setInstance(0); + delete mPublisher; } /*! @@ -121,6 +135,21 @@ } /*! + Creates Home screen state publisher. +*/ +void HsDefaultRuntime::createStatePublisher() +{ + mPublisher = new QValueSpacePublisher(QValueSpace::PermanentLayer, HsStatePSKeyPath); + + if (!mPublisher->isConnected()){ + // No permanent layer available + mPublisher = new QValueSpacePublisher(HsStatePSKeyPath); + } + + mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenInactive); +} + +/*! Creates content service parts. */ void HsDefaultRuntime::createContentServiceParts() @@ -147,20 +176,24 @@ guiRootState->addTransition(this, SIGNAL(event_exit()), finalState); - // Workaround to QtSF bug. Create in stack after the bug is fixed. - QServiceManager *manager = new QServiceManager(this); + QServiceManager manager; + QServiceFilter filter; filter.setInterface("com.nokia.homescreen.state.HsLoadSceneState"); - QList interfaces = manager->findInterfaces(filter); - QObject *loadSceneStateObj = manager->loadInterface(interfaces.first().interfaceName()); +#ifdef HSDEFAULTRUNTIMEPLUGIN_UNITTEST + filter.setServiceName("mockstateplugins"); +#endif + QList interfaces = manager.findInterfaces(filter); + + QObject *loadSceneStateObj = manager.loadInterface(interfaces.first()); QState *loadSceneState = qobject_cast(loadSceneStateObj); loadSceneState->setParent(guiRootState); loadSceneState->setObjectName(interfaces.first().interfaceName()); filter.setInterface("com.nokia.homescreen.state.HsIdleState"); - interfaces = manager->findInterfaces(filter); - QObject *idleStateObj = manager->loadInterface(interfaces.first().interfaceName()); + interfaces = manager.findInterfaces(filter); + QObject *idleStateObj = manager.loadInterface(interfaces.first()); QState *idleState = qobject_cast(idleStateObj); idleState->setParent(guiRootState); idleState->setObjectName(interfaces.first().interfaceName()); @@ -176,16 +209,16 @@ QState *menuRootState = new QState(menuParallelState); filter.setInterface("com.nokia.homescreen.state.HsAppLibraryState"); - interfaces = manager->findInterfaces(filter); - QObject *appLibraryStateObj = manager->loadInterface(interfaces.first().interfaceName()); + interfaces = manager.findInterfaces(filter); + QObject *appLibraryStateObj = manager.loadInterface(interfaces.first()); QState *appLibraryState = qobject_cast(appLibraryStateObj); appLibraryState->setParent(menuRootState); appLibraryState->setObjectName(interfaces.first().interfaceName()); menuRootState->setInitialState(appLibraryState); filter.setInterface("com.nokia.homescreen.state.HsMenuWorkerState"); - interfaces = manager->findInterfaces(filter); - QObject *menuWorkerStateObj = manager->loadInterface(interfaces.first().interfaceName()); + interfaces = manager.findInterfaces(filter); + QObject *menuWorkerStateObj = manager.loadInterface(interfaces.first()); QState *menuWorkerState = qobject_cast(menuWorkerStateObj); menuWorkerState->setParent(menuParallelState); menuWorkerState->setObjectName(interfaces.first().interfaceName()); @@ -205,7 +238,7 @@ HsMenuEvent::OpenHomeScreen, appLibraryState, idleState); appLibraryState->addTransition(appLibToIdleTransition); - HbMainWindow *window = hbInstance->allMainWindows().at(0); + HbMainWindow *window = hbInstance->allMainWindows().first(); // key driven transition from idle to menu QKeyEventTransition *idleToMenuRootTransition = @@ -270,24 +303,26 @@ } /*! - + Publishes Home screen states via Publish & Subscribe. */ void HsDefaultRuntime::updatePSKeys() -{ - QValueSpacePublisher publisher(HsStatePSKeyPath); - - if (mHomeScreenActive && mIdleStateActive){ +{ + if (!mPublisher){ + createStatePublisher(); + } + + if (mHomeScreenActive && mIdleStateActive){ qDebug() << "HsDefaultRuntime::updatePSKeys: EHomeScreenIdleState"; - publisher.setValue(HsStatePSKeySubPath, EHomeScreenIdleState); + mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenIdleState); } else{ qDebug() << "HsDefaultRuntime::updatePSKeys: EHomeScreenInactive"; - publisher.setValue(HsStatePSKeySubPath, EHomeScreenInactive); - } + mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenInactive); + } } /*! - + Called when state machine is in Idle state. */ void HsDefaultRuntime::onIdleStateEntered() { @@ -296,7 +331,7 @@ } /*! - + Called when state machine leaves the Idle state. */ void HsDefaultRuntime::onIdleStateExited() {