diff -r 7dd137878ff8 -r e4f038c420f7 homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsmenuworkerstate.cpp --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsmenuworkerstate.cpp Wed Aug 18 10:33:57 2010 +0300 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsmenuworkerstate.cpp Mon Sep 13 13:03:23 2010 +0300 @@ -29,6 +29,7 @@ #include "hsviewappsettingsstate.h" #include "hsviewappdetailsstate.h" #include "hsinstallationlogstate.h" +#include "hsuinstallfailedstate.h" /*! \class HsMenuWorkerState @@ -47,7 +48,7 @@ \param parent Parent state. */ HsMenuWorkerState::HsMenuWorkerState(QState *parent) : - QState(parent), mInitialState(0) + QState(parent) { construct(); } @@ -67,20 +68,39 @@ { HSMENUTEST_FUNC_ENTRY("HsMenuWorkerState::construct"); setObjectName("homescreen.nokia.com/state/MenuWorkerState"); + + QState *menuWorkerParallelState = new QState( + QState::ParallelStates, this); + setInitialState(menuWorkerParallelState); + + QState *menuWorkerCommonState = new QState(menuWorkerParallelState); + QState *menuWorkerFailedMessageState = new QState(menuWorkerParallelState); + - mInitialState = new QState(this); - setInitialState(mInitialState); + QState *initialCommonState = new QState(menuWorkerCommonState); + menuWorkerCommonState->setInitialState(initialCommonState); + QState *initialFailedMessageState = new QState(menuWorkerFailedMessageState); + menuWorkerFailedMessageState->setInitialState(initialFailedMessageState); // use templated creation method - less boilerplate code - createChildState (HsMenuEvent::AddToHomeScreen); + createChildState ( + HsMenuEvent::AddToHomeScreen, + menuWorkerCommonState, initialCommonState); createChildState ( - HsMenuEvent::DeleteCollection); + HsMenuEvent::DeleteCollection, + menuWorkerCommonState, initialCommonState); createChildState ( - HsMenuEvent::RemoveAppFromCollection); + HsMenuEvent::RemoveAppFromCollection, + menuWorkerCommonState, initialCommonState); createChildState ( - HsMenuEvent::UninstallApplication); - createChildState (HsMenuEvent::ArrangeCollection); - createChildState (HsMenuEvent::ArrangeAllCollections); + HsMenuEvent::UninstallApplication, + menuWorkerCommonState, initialCommonState); + createChildState ( + HsMenuEvent::ArrangeCollection, + menuWorkerCommonState, initialCommonState); + createChildState ( + HsMenuEvent::ArrangeAllCollections, + menuWorkerCommonState, initialCommonState); // create a new child state based on the template @@ -89,15 +109,15 @@ // an event with specified operation type HsMenuEventTransition *renameCollectionTransition = new HsMenuEventTransition(HsMenuEvent::RenameCollection, - mInitialState, newChildState); - mInitialState->addTransition(renameCollectionTransition); + initialCommonState, newChildState); + initialCommonState->addTransition(renameCollectionTransition); HsMenuEventTransition *createCollectionTransition = new HsMenuEventTransition(HsMenuEvent::CreateCollection, - mInitialState, newChildState); - mInitialState->addTransition(createCollectionTransition); + initialCommonState, newChildState); + initialCommonState->addTransition(createCollectionTransition); // set a transition to the initial state after child processing finished - newChildState->addTransition(newChildState, SIGNAL(exit()), mInitialState); + newChildState->addTransition(newChildState, SIGNAL(exit()), initialCommonState); connect(this, SIGNAL(reset()), newChildState, SIGNAL(exit())); HsAddAppsToCollectionState *addAppsToCollectionState = @@ -106,18 +126,29 @@ // an event with specified operation type HsMenuEventTransition *addAppsToCollectionTransition = new HsMenuEventTransition(HsMenuEvent::AddAppsToCollection, - mInitialState, addAppsToCollectionState); - mInitialState->addTransition(addAppsToCollectionTransition); + initialCommonState, addAppsToCollectionState); + initialCommonState->addTransition(addAppsToCollectionTransition); // set a transition to the initial state after child processing finished addAppsToCollectionState->addTransition(addAppsToCollectionState, - SIGNAL(finished()), mInitialState); + SIGNAL(finished()), initialCommonState); connect(this, SIGNAL(reset()), addAppsToCollectionState, SIGNAL(finished())); - createChildState (HsMenuEvent::PreviewHSWidget); - createChildState (HsMenuEvent::ShowAppSettings); - createChildState (HsMenuEvent::ShowAppDetails); - createChildState (HsMenuEvent::ShowInstallationLog); + createChildState ( + HsMenuEvent::PreviewHSWidget, + menuWorkerCommonState, initialCommonState); + createChildState ( + HsMenuEvent::ShowAppSettings, + menuWorkerCommonState, initialCommonState); + createChildState ( + HsMenuEvent::ShowAppDetails, + menuWorkerCommonState, initialCommonState); + createChildState ( + HsMenuEvent::ShowInstallationLog, + menuWorkerCommonState, initialCommonState); + createChildState ( + HsMenuEvent::UninstallationFailed, + menuWorkerFailedMessageState, initialFailedMessageState); HSMENUTEST_FUNC_EXIT("HsMenuWorkerState::construct"); } @@ -126,24 +157,33 @@ Template method for constructing child states. \param operation Operation type triggering transition to the newely created state. + \param parentState Parent state for new state. + \param initialState Initial state. \return newely created state. */ template T *HsMenuWorkerState::createChildState( - HsMenuEvent::OperationType operation) + HsMenuEvent::OperationType operation, + QState* parentState, + QState* initialState) { HSMENUTEST_FUNC_ENTRY("HsMenuWorkerState::createChildState"); + // create a new child state based on the template - T *newChildState = new T(this); + T *newChildState = new T(parentState); + // create a transition to the new child state which will be triggered by // an event with specified operation type HsMenuEventTransition *newChildStateTransition = - new HsMenuEventTransition(operation, mInitialState, newChildState); - mInitialState->addTransition(newChildStateTransition); + new HsMenuEventTransition(operation, initialState, newChildState); + initialState->addTransition(newChildStateTransition); + // set a transition to the initial state after child processing finished - newChildState->addTransition(newChildState, SIGNAL(exit()), mInitialState); + newChildState->addTransition(newChildState, SIGNAL(exit()), initialState); connect(this, SIGNAL(reset()), newChildState, SIGNAL(exit())); + HSMENUTEST_FUNC_EXIT("HsMenuWorkerState::createChildState"); return newChildState; } +