homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp
changeset 36 cdae8c6c3876
parent 35 f9ce957a272c
child 39 4e8ebe173323
--- 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()
 {