--- 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<QServiceInterfaceDescriptor> interfaces = manager->findInterfaces(filter);
- QObject *loadSceneStateObj = manager->loadInterface(interfaces.first().interfaceName());
+#ifdef HSDEFAULTRUNTIMEPLUGIN_UNITTEST
+ filter.setServiceName("mockstateplugins");
+#endif
+ QList<QServiceInterfaceDescriptor> interfaces = manager.findInterfaces(filter);
+
+ QObject *loadSceneStateObj = manager.loadInterface(interfaces.first());
QState *loadSceneState = qobject_cast<QState *>(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<QState *>(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<QState *>(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<QState *>(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()
{