homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp
changeset 39 4e8ebe173323
parent 36 cdae8c6c3876
child 46 23b5d6a29cce
--- a/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp	Fri Apr 16 14:54:01 2010 +0300
+++ b/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp	Mon May 03 12:24:59 2010 +0300
@@ -19,6 +19,7 @@
 #include <QFinalState>
 #include <QSignalTransition>
 #include <QKeyEventTransition>
+#include <QKeyEvent>
 
 #include <qvaluespacepublisher.h>
 #include <qservicemanager.h>
@@ -26,6 +27,8 @@
 #include <qserviceinterfacedescriptor.h>
 
 #include <HbInstance>
+#include <HbIconAnimationManager>
+#include <HbIconAnimationDefinition>
 
 #include "homescreendomainpskeys.h"
 #include "hsdefaultruntime.h"
@@ -39,12 +42,22 @@
 
 QTM_USE_NAMESPACE
 
-#ifdef S60APP_KEY
-int applicationKey = Qt::Key_Launch0;
+
+#ifdef Q_OS_SYMBIAN
+const static Qt::Key applicationKey = Qt::Key_Menu;
 #else
-int applicationKey = Qt::Key_Any;
+const static Qt::Key applicationKey = Qt::Key_Home;
 #endif
 
+namespace
+{
+    const char KHsLoadSceneStateInterface[] = "com.nokia.homescreen.state.HsLoadSceneState";
+    const char KHsIdleStateInterface[] = "com.nokia.homescreen.state.HsIdleState";
+    const char KHsAppLibraryStateInterface[] = "com.nokia.homescreen.state.HsAppLibraryState";
+    const char KHsMenuWorkerStateInterface[] = "com.nokia.homescreen.state.HsMenuWorkerState";
+}
+
+
 /*!
     \class HsDefaultRuntime
     \ingroup group_hsdefaultruntimeplugin
@@ -65,6 +78,9 @@
 	  mHomeScreenActive(false),
 	  mIdleStateActive(false),
 	  mPublisher(NULL)
+#ifdef Q_OS_SYMBIAN
+	  ,keyCapture()
+#endif
 {
     HSTEST_FUNC_ENTRY("HS::HsDefaultRuntime::HsDefaultRuntime");
 
@@ -73,7 +89,7 @@
 #ifdef Q_OS_SYMBIAN
     db->setDatabaseName("c:/private/20022f35/homescreen.db");
 #else
-    db->setDatabaseName("homescreen.db");
+    db->setDatabaseName("private/20022f35/homescreen.db");
 #endif    
     db->open();
     HsDatabase::setInstance(db);
@@ -83,6 +99,8 @@
 
     HsWidgetPositioningOnWidgetAdd::setInstance(
         new HsAnchorPointInBottomRight);
+    
+    registerAnimations();
 
     createStatePublisher();
     createContentServiceParts();
@@ -116,22 +134,42 @@
 
     switch (event->type()) {
 		case QEvent::ApplicationActivate:
-		{			
-			qDebug() << "HsDefaultRuntime::eventFilter: QEvent::ApplicationActivate";
-			mHomeScreenActive = true;
-			updatePSKeys();
-		}
-		break;
+            qDebug() << "HsDefaultRuntime::eventFilter: QEvent::ApplicationActivate";
+#ifdef Q_OS_SYMBIAN
+			keyCapture.captureKey(applicationKey);
+#endif
+            mHomeScreenActive = true;
+            updatePSKeys();
+            break;
 		case QEvent::ApplicationDeactivate:
-		{		
-			qDebug() << "HsDefaultRuntime::eventFilter: QEvent::ApplicationDeactivate";
+            qDebug() << "HsDefaultRuntime::eventFilter: QEvent::ApplicationDeactivate";
+#ifdef Q_OS_SYMBIAN
+			keyCapture.cancelCaptureKey(applicationKey);
+#endif
 			mHomeScreenActive = false;
-            updatePSKeys();			
-		}
-		break;
+            updatePSKeys();
+            break;
+        default:
+            break;
 	}
-    
-	return QStateMachine::eventFilter(watched, event);
+   
+    bool result =  QStateMachine::eventFilter(watched, event);
+    // temporary hack as we should not register twice for events
+	if (event->type() == QEvent::KeyPress ) {
+        QKeyEvent* ke = static_cast<QKeyEvent *>(event);         
+        // Key_Launch0 should be removed when QT starts to send Key_Menu
+        result = (ke->key() == applicationKey) || ke->key() == Qt::Key_Launch0;        
+	}
+	return result;
+}
+
+/*!
+    Registers framework animations.
+*/
+void HsDefaultRuntime::registerAnimations()
+{
+    HbIconAnimationManager *manager = HbIconAnimationManager::global();
+    manager->addDefinitionFile(QLatin1String(":/resource/tapandhold.axml"));
 }
 
 /*!
@@ -178,25 +216,16 @@
 
     QServiceManager manager;
 
-    QServiceFilter filter;
-
-    filter.setInterface("com.nokia.homescreen.state.HsLoadSceneState");
-#ifdef HSDEFAULTRUNTIMEPLUGIN_UNITTEST
-    filter.setServiceName("mockstateplugins");
-#endif    
-    QList<QServiceInterfaceDescriptor> interfaces = manager.findInterfaces(filter);
-
-    QObject *loadSceneStateObj = manager.loadInterface(interfaces.first());
+    
+    QObject *loadSceneStateObj = manager.loadInterface(KHsLoadSceneStateInterface);
     QState *loadSceneState = qobject_cast<QState *>(loadSceneStateObj);
     loadSceneState->setParent(guiRootState);
-    loadSceneState->setObjectName(interfaces.first().interfaceName());
+    loadSceneState->setObjectName(KHsLoadSceneStateInterface);
 
-    filter.setInterface("com.nokia.homescreen.state.HsIdleState");
-    interfaces = manager.findInterfaces(filter);
-    QObject *idleStateObj = manager.loadInterface(interfaces.first());
+    QObject *idleStateObj = manager.loadInterface(KHsIdleStateInterface);
     QState *idleState = qobject_cast<QState *>(idleStateObj);
     idleState->setParent(guiRootState);
-    idleState->setObjectName(interfaces.first().interfaceName());
+    idleState->setObjectName(KHsIdleStateInterface);
 	connect(idleState, SIGNAL(entered()), SLOT(onIdleStateEntered()));
 	connect(idleState, SIGNAL(exited()), SLOT(onIdleStateExited()));
 
@@ -208,20 +237,16 @@
             QState::ParallelStates, guiRootState);
     QState *menuRootState = new QState(menuParallelState);
 
-    filter.setInterface("com.nokia.homescreen.state.HsAppLibraryState");
-    interfaces = manager.findInterfaces(filter);
-    QObject *appLibraryStateObj = manager.loadInterface(interfaces.first());
+    QObject *appLibraryStateObj = manager.loadInterface(KHsAppLibraryStateInterface);
     QState *appLibraryState = qobject_cast<QState *>(appLibraryStateObj);
     appLibraryState->setParent(menuRootState);
-    appLibraryState->setObjectName(interfaces.first().interfaceName());
+    appLibraryState->setObjectName(KHsAppLibraryStateInterface);
     menuRootState->setInitialState(appLibraryState);
 
-    filter.setInterface("com.nokia.homescreen.state.HsMenuWorkerState");
-    interfaces = manager.findInterfaces(filter);
-    QObject *menuWorkerStateObj = manager.loadInterface(interfaces.first());
+    QObject *menuWorkerStateObj = manager.loadInterface(KHsMenuWorkerStateInterface);
     QState *menuWorkerState = qobject_cast<QState *>(menuWorkerStateObj);
     menuWorkerState->setParent(menuParallelState);
-    menuWorkerState->setObjectName(interfaces.first().interfaceName());
+    menuWorkerState->setObjectName(KHsMenuWorkerStateInterface);
 
     // root state transitions
     idleState->addTransition(idleState, SIGNAL(event_applicationLibrary()), menuRootState);
@@ -243,15 +268,29 @@
     // key driven transition from idle to menu
     QKeyEventTransition *idleToMenuRootTransition =
         new QKeyEventTransition(
-                window, QEvent::KeyRelease, applicationKey, idleState);
+                window, QEvent::KeyPress, applicationKey);
     idleToMenuRootTransition->setTargetState(menuRootState);
     idleState->addTransition(idleToMenuRootTransition);
     // key driven transition from menu to idle
     QKeyEventTransition *menuToIdleTransition =
         new QKeyEventTransition(
-                window, QEvent::KeyRelease, applicationKey, idleState);
+                window, QEvent::KeyPress, applicationKey);
     menuToIdleTransition->setTargetState(idleState);
     menuRootState->addTransition(menuToIdleTransition);
+    
+    // transition for Key_Launch0 should be removed 
+    // when OT starts to send Key_Menu (maybe wk14)
+    QKeyEventTransition *idleToMenuRootTransition2 =
+        new QKeyEventTransition(
+                window, QEvent::KeyPress, Qt::Key_Launch0);
+    idleToMenuRootTransition2->setTargetState(menuRootState);
+    idleState->addTransition(idleToMenuRootTransition2);
+    // key driven transition from menu to idle
+    QKeyEventTransition *menuToIdleTransition2 =
+        new QKeyEventTransition(
+                window, QEvent::KeyPress, Qt::Key_Launch0);
+    menuToIdleTransition2->setTargetState(idleState);
+    menuRootState->addTransition(menuToIdleTransition2);
 
     // transitions to child states
     // opening shortcut to a colleciton