homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp
changeset 63 52b0f64eeb51
parent 62 341166945d65
child 67 474929a40a0f
--- a/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp	Fri Jun 25 19:19:22 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,447 +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:  Default implementation of the home screen runtime.
-*
-*/
-
-#include <QState>
-#include <QFinalState>
-#include <QHistoryState>
-#include <QSignalTransition>
-#include <QKeyEventTransition>
-#include <QKeyEvent>
-
-#include <qvaluespacepublisher.h>
-#include <qservicemanager.h>
-#include <qservicefilter.h>
-#include <qserviceinterfacedescriptor.h>
-
-#include <HbApplication>
-#include <HbActivityManager>
-#include <HbInstance>
-#include <HbIconAnimationManager>
-#include <HbIconAnimationDefinition>
-
-#include "hsmenueventfactory.h"
-#include "homescreendomainpskeys.h"
-#include "hsdefaultruntime.h"
-#include "hsdatabase.h"
-#include "hscontentservice.h"
-#include "hsshortcutservice.h"
-#include "hsmenueventtransition.h"
-#include "hswidgetpositioningonorientationchange.h"
-#include "hswidgetpositioningonwidgetadd.h"
-#include "hsconfiguration.h"
-#include "hstest_global.h"
-#include "hswidgetpositioningonwidgetmove.h"
-
-QTM_USE_NAMESPACE
-#define hbApp qobject_cast<HbApplication*>(qApp)
-
-#ifdef Q_OS_SYMBIAN
-const static Qt::Key applicationKey = Qt::Key_Menu;
-#else
-const static Qt::Key applicationKey = Qt::Key_Home;
-#endif
-
-namespace
-{
-    const char KHsRootStateInterface[] = "com.nokia.homescreen.state.HsRootState";
-    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";
-    const char KHsBacupRestoreStateInterface[] = "com.nokia.homescreen.state.HsBackupRestoreState";
-}
-
-
-/*!
-    \class HsDefaultRuntime
-    \ingroup group_hsdefaultruntimeplugin
-    \brief Default implementation of the home screen runtime.
-    Creates an execution context (EC) and populates it with
-    runtime services. States are loaded from state plugins.
-    Each state is given an access to the EC. States
-    are added to a state machine. Finally, the state machine
-    is started.
-*/
-
-/*!
-    Constructs runtime with \a parent as the parent object.
-*/
-HsDefaultRuntime::HsDefaultRuntime(QObject *parent)
-    : QStateMachine(parent),
-      mContentService(0),	  
-      mHomeScreenActive(false),
-      mIdleStateActive(false),
-      mPublisher(NULL)
-#ifdef Q_OS_SYMBIAN
-	  ,keyCapture()
-#endif
-{
-    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("private/20022f35/homescreen.db");
-#endif    
-    db->open();
-    HsDatabase::setInstance(db);
-
-    HsConfiguration::setInstance(new HsConfiguration);
-    HsConfiguration::instance()->load();
-            
-    HsWidgetPositioningOnOrientationChange::setInstance(
-        new HsAdvancedWidgetPositioningOnOrientationChange);
-
-    HsWidgetPositioningOnWidgetAdd::setInstance(
-        new HsAnchorPointInBottomRight);
-
-    HsWidgetPositioningOnWidgetMove::setInstance(
-        new HsSnapToLines);
-
-    registerAnimations();
-
-    createStatePublisher();
-    createContentServiceParts();
-    createStates();
-    assignServices();
-
-    // create the instance so that singleton is accessible from elsewhere
-    HsShortcutService::instance(this);
-
-    QCoreApplication::instance()->installEventFilter(this);
-
-    if (hbApp) { // Qt test framework uses QApplication.
-        connect(hbApp->activityManager(), SIGNAL(activityRequested(QString)), 
-                this, SLOT(activityRequested(QString)));
-    }
-    HSTEST_FUNC_EXIT("HS::HsDefaultRuntime::HsDefaultRuntime");
-}
-
-/*!
-    Destructor.
-*/
-HsDefaultRuntime::~HsDefaultRuntime()
-{
-    HsWidgetPositioningOnOrientationChange::setInstance(0);
-    delete mPublisher;
-}
-
-/*!
-    \fn void HsDefaultRuntime::stopStateMachine()
-    Emission of this signal initiates a transition to the final state.
-*/
-
-/*!
-    \copydoc QObject::eventFilter(QObject *watched, QEvent *event)
-*/
-bool HsDefaultRuntime::eventFilter(QObject *watched, QEvent *event)
-{
-    Q_UNUSED(watched);
-
-    switch (event->type()) {
-        case QEvent::ApplicationActivate:
-            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";
-#ifdef Q_OS_SYMBIAN
-            keyCapture.cancelCaptureKey(applicationKey);
-#endif
-            mHomeScreenActive = false;
-            updatePSKeys();
-            break;
-        default:
-            break;
-    }
-   
-    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("qtg_anim_loading.axml"));
-}
-
-/*!
-    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()
-{
-    HSTEST_FUNC_ENTRY("HS::HsDefaultRuntime::createContentServiceParts");
-
-    mContentService = new HsContentService(this);
-
-    HSTEST_FUNC_EXIT("HS::HsDefaultRuntime::createContentServiceParts");
-}
-
-/*!
-    Creates states.
-*/
-void HsDefaultRuntime::createStates()
-{
-    HSTEST_FUNC_ENTRY("HS::HsDefaultRuntime::createStates");
-
-    QFinalState *finalState = new QFinalState();
-    addState(finalState);
-
-    QState *guiRootState = new QState();
-    addState(guiRootState);
-
-    guiRootState->addTransition(this, SIGNAL(event_exit()), finalState);
-
-    QServiceManager manager;
-
-    
-    QObject *loadSceneStateObj = manager.loadInterface(KHsLoadSceneStateInterface);
-    QState *loadSceneState = qobject_cast<QState *>(loadSceneStateObj);
-    loadSceneState->setParent(guiRootState);
-    loadSceneState->setObjectName(KHsLoadSceneStateInterface);
-
-    QObject *rootStateObj = manager.loadInterface(KHsRootStateInterface);
-    QState *rootState = qobject_cast<QState *>(rootStateObj);   
-    rootState->setParent(guiRootState);
-    rootState->setObjectName(KHsRootStateInterface);       
-
-    QObject *idleStateObj = manager.loadInterface(KHsIdleStateInterface);
-    QState *idleState = qobject_cast<QState *>(idleStateObj);
-    idleState->setParent(rootState);
-    idleState->setObjectName(KHsIdleStateInterface);
-	connect(idleState, SIGNAL(entered()), SLOT(onIdleStateEntered()));
-	connect(idleState, SIGNAL(exited()), SLOT(onIdleStateExited()));
-
-
-    //menu state
-    QState *menuParallelState = new QState(
-            QState::ParallelStates, rootState);
-    QState *menuRootState = new QState(menuParallelState);
-
-    QObject *appLibraryStateObj = manager.loadInterface(KHsAppLibraryStateInterface);
-    QState *appLibraryState = qobject_cast<QState *>(appLibraryStateObj);
-    appLibraryState->setParent(menuRootState);
-    appLibraryState->setObjectName(KHsAppLibraryStateInterface);
-    menuRootState->setInitialState(appLibraryState);
-
-    QHistoryState *historyState = new QHistoryState(rootState);
-    historyState->setDefaultState(idleState);
-    
-    loadSceneState->addTransition(
-            loadSceneState, SIGNAL(event_history()), historyState);            
-
-    QObject *menuWorkerStateObj = manager.loadInterface(KHsMenuWorkerStateInterface);
-    QState *menuWorkerState = qobject_cast<QState *>(menuWorkerStateObj);
-    menuWorkerState->setParent(menuParallelState);
-    menuWorkerState->setObjectName(KHsMenuWorkerStateInterface);
-
-    connect(appLibraryState, SIGNAL(collectionEntered()), 
-            menuWorkerState, SIGNAL(reset()));
-    connect(appLibraryState, SIGNAL(allAppsStateEntered ()), 
-            menuWorkerState, SIGNAL(reset()));
-    connect(appLibraryState, SIGNAL(allCollectionsStateEntered ()), 
-            menuWorkerState, SIGNAL(reset()));
-
-    //Backup/Restore state
-    QObject *backupRestoreStateObj = manager.loadInterface(KHsBacupRestoreStateInterface);
-    QState *backupRestoreState = qobject_cast<QState *>(backupRestoreStateObj);   
-    backupRestoreState->setParent(guiRootState);
-    backupRestoreState->setObjectName(KHsBacupRestoreStateInterface);
-    backupRestoreState->addTransition(
-            backupRestoreState, SIGNAL(event_loadScene()), loadSceneState);
-
-    // root state transitions
-    idleState->addTransition(idleState, SIGNAL(event_applicationLibrary()), menuRootState);
-    appLibraryState->addTransition(
-            appLibraryState, SIGNAL(toHomescreenState()), idleState);
-    rootState->addTransition(rootState, SIGNAL(event_backupRestore()), backupRestoreState);
-    // opening shortcut to Application Library
-    HsMenuEventTransition *idleToAppLibTransition =
-        new HsMenuEventTransition(HsMenuEvent::OpenApplicationLibrary,
-                                  idleState, appLibraryState);
-    idleState->addTransition(idleToAppLibTransition);
-
-    HsMenuEventTransition *appLibToIdleTransition =
-        new HsMenuEventTransition(
-            HsMenuEvent::OpenHomeScreen, appLibraryState, idleState);
-    appLibraryState->addTransition(appLibToIdleTransition);
-
-    HbMainWindow *window = hbInstance->allMainWindows().first();
-
-    // key driven transition from idle to menu
-    QKeyEventTransition *idleToMenuRootTransition =
-        new QKeyEventTransition(
-                window, QEvent::KeyPress, applicationKey);
-    idleToMenuRootTransition->setTargetState(menuRootState);
-    idleState->addTransition(idleToMenuRootTransition);
-    // key driven transition from menu to idle
-    QKeyEventTransition *menuToIdleTransition =
-        new QKeyEventTransition(
-                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);
-    // add transition to switch to idle
-    menuRootState->addTransition( this, SIGNAL(event_toIdle()), idleState);    
-    
-    // transitions to child states
-    // opening shortcut to a colleciton
-    QList<QState *> collectionStates =
-        appLibraryState->
-            findChildren<QState *>
-                ("homescreen.nokia.com/state/applibrarystate/collectionstate");
-    qDebug(
-        "Found %d \"collectionstate\" children for Application Library State",
-            collectionStates.count());
-    if (collectionStates.count()) {
-        HsMenuEventTransition *idleToCollectionTransition =
-            new HsMenuEventTransition(HsMenuEvent::OpenCollection,
-                                      idleState, collectionStates[0]);
-        idleState->addTransition(idleToCollectionTransition);
-    }
-
-    guiRootState->setInitialState(loadSceneState);
-    setInitialState(guiRootState);
-    
-    HSTEST_FUNC_EXIT("HS::HsDefaultRuntime::createStates");
-}
-
-/*!
-    Assigns services to states based on value of property HS_SERVICES_REGISTRATION_KEY.
-*/
-void HsDefaultRuntime::assignServices()
-{
-    HSTEST_FUNC_ENTRY("HS::HsDefaultRuntime::assignServices");
-
-    QList<QState*> children = findChildren<QState*>();
-    foreach (QState *state, children) {
-        QList<QVariant> services = state->property(HS_SERVICES_REGISTRATION_KEY).toList();
-        foreach (const QVariant &service, services) {
-            QString name = service.toString();
-            qDebug() << "Assign service:" << name << "\n to " << state->objectName();
-            if (name == CONTENT_SERVICE_KEY) {
-                state->setProperty(name.toAscii().data(), qVariantFromValue(mContentService));
-            } else if (name == SHORTCUT_SERVICE_KEY) {
-                state->setProperty(name.toAscii().data(),
-                    qVariantFromValue(HsShortcutService::instance(this)));
-            } else {
-                qWarning() << "WARNING: Service " << name << " is unknown";
-            }
-        }
-    }
-
-    HSTEST_FUNC_EXIT("HS::HsDefaultRuntime::assignServices");
-}
-
-/*!
-    Publishes Home screen states via Publish & Subscribe.
-*/
-void HsDefaultRuntime::updatePSKeys()
-{	
-	if (!mPublisher){
-		createStatePublisher();
-	}
-
-	if (mHomeScreenActive && mIdleStateActive){
-    	qDebug() << "HsDefaultRuntime::updatePSKeys: EHomeScreenIdleState";
-    	mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenIdleState);
-    }
-    else{
-    	qDebug() << "HsDefaultRuntime::updatePSKeys: EHomeScreenInactive";
-    	mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenInactive);
-    }	
-}
-
-/*!
-    Called when state machine is in Idle state.
-*/
-void HsDefaultRuntime::onIdleStateEntered()
-{
-	mIdleStateActive = true;
-	updatePSKeys();
-}
-
-/*!
-    Called when state machine leaves the Idle state.
-*/
-void HsDefaultRuntime::onIdleStateExited()
-{
-	mIdleStateActive = false;
-	updatePSKeys();
-}
-
-/*!
-    Activity requested by another client 
-*/
-void HsDefaultRuntime::activityRequested(const QString &name) 
-{
-    if (name == appLibActivity()) {
-        this->postEvent(
-            HsMenuEventFactory::createOpenAppLibraryEvent(NormalHsMenuMode));
-    }
-    else if (name == groupAppLibRecentView()) {
-        this->postEvent(
-            HsMenuEventFactory::createOpenCollectionEvent(0,
-            collectionDownloadedTypeName()));
-    } else if (name == activityHsIdleView()) {
-        emit event_toIdle();
-    }
-}