homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsmenuworkerstate.cpp
changeset 35 f9ce957a272c
child 39 4e8ebe173323
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsmenuworkerstate.cpp	Fri Mar 19 09:27:44 2010 +0200
@@ -0,0 +1,124 @@
+/*
+ * 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:
+ *
+ */
+
+#include <hsmenueventtransition.h>
+
+#include "hsaddtohomescreenstate.h"
+#include "hsaddappstocollectionstate.h"
+#include "hsdeletecollectionstate.h"
+#include "hsdeletecollectionitemstate.h"
+#include "hsmenuworkerstate.h"
+#include "hscollectionnamestate.h"
+#include "hsarrangestate.h"
+#include "hspreviewhswidgetstate.h"
+/*!
+ \class HsMenuWorkerState
+ \ingroup group_hsmenustateplugin
+ \brief Menu Worker State.
+ */
+
+/*!
+ Constructor.
+ \param parent Owner.
+ */
+HsMenuWorkerState::HsMenuWorkerState(QState *parent) :
+    QState(parent), mInitialState(0)
+{
+    construct();
+}
+
+/*!
+ Destructor.
+ */
+HsMenuWorkerState::~HsMenuWorkerState()
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsMenuWorkerState::construct()
+{
+    HSMENUTEST_FUNC_ENTRY("HsMenuWorkerState::construct");
+    setObjectName("homescreen.nokia.com/state/MenuWorkerState");
+
+    mInitialState = new QState(this);
+    setInitialState(mInitialState);
+
+    // use templated creation method - less boilerplate code
+    createChildState<HsAddToHomeScreenState> (HsMenuEvent::AddToHomeScreen);
+    createChildState<HsDeleteCollectionState> (
+        HsMenuEvent::DeleteCollection);
+    createChildState<HsDeleteCollectionItemState> (
+        HsMenuEvent::RemoveAppFromCollection);
+    createChildState<HsArrangeState> (HsMenuEvent::ArrangeCollection);
+
+    // create a new child state based on the template
+    HsCollectionNameState *newChildState = new HsCollectionNameState(this);
+    // create a transition to the new child state which will be triggered by
+    // an event with specified operation type
+    HsMenuEventTransition *renameCollectionTransition =
+        new HsMenuEventTransition(HsMenuEvent::RenameCollection,
+                                  mInitialState, newChildState);
+    mInitialState->addTransition(renameCollectionTransition);
+
+    HsMenuEventTransition *createCollectionTransition =
+        new HsMenuEventTransition(HsMenuEvent::CreateCollection,
+                                  mInitialState, newChildState);
+    mInitialState->addTransition(createCollectionTransition);
+    // set a transition to the initial state after child processing finished
+    newChildState->addTransition(mInitialState);
+
+    HsAddAppsToCollectionState *addAppsToCollectionState =
+        new HsAddAppsToCollectionState(this);
+    // create a transition to the new child state which will be triggered by
+    // an event with specified operation type
+    HsMenuEventTransition *addAppsToCollectionTransition =
+        new HsMenuEventTransition(HsMenuEvent::AddAppsToCollection,
+                                  mInitialState, addAppsToCollectionState);
+    mInitialState->addTransition(addAppsToCollectionTransition);
+    // set a transition to the initial state after child processing finished
+    addAppsToCollectionState->addTransition(addAppsToCollectionState,
+                                            SIGNAL(finished()), mInitialState);
+
+    createChildState<HsPreviewHSWidgetState> (HsMenuEvent::PreviewHSWidget);
+
+    HSMENUTEST_FUNC_EXIT("HsMenuWorkerState::construct");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+template<class T>
+T *HsMenuWorkerState::createChildState(
+    HsMenuEvent::OperationType operation)
+{
+    HSMENUTEST_FUNC_ENTRY("HsMenuWorkerState::createChildState");
+    // create a new child state based on the template
+    T *newChildState = new T(this);
+    // 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);
+    // set a transition to the initial state after child processing finished
+    newChildState->addTransition(mInitialState);
+    HSMENUTEST_FUNC_EXIT("HsMenuWorkerState::createChildState");
+
+    return newChildState;
+}