homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsuninstallitemstate.cpp
changeset 55 03646e8da489
child 60 30f14686fb04
child 62 341166945d65
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsuninstallitemstate.cpp	Fri Jun 11 13:30:16 2010 +0300
@@ -0,0 +1,147 @@
+/*
+ * 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: Menu delete collection item state
+ *
+ */
+
+#include <hbmessagebox.h>
+#include <hbaction.h>
+#include <hsmenuservice.h>
+#include <hsshortcutservice.h>
+
+#include "hsuninstallitemstate.h"
+#include "hsmenuevent.h"
+
+/*!
+ \class HsUninstallItemState
+ \ingroup group_hsworkerstateplugin
+ \brief Uninstall Item State.
+ Deletes app from collection.
+ */
+
+/*!
+ Constructor.
+ \param parent Owner.
+ */
+HsUninstallItemState::HsUninstallItemState(QState *parent) :
+    QState(parent),
+    mItemId(0),
+    mUninstallMessage(NULL),
+    mConfirmAction(NULL)
+{
+    construct();
+}
+
+/*!
+ Destructor.
+ */
+HsUninstallItemState::~HsUninstallItemState()
+{
+    cleanUp(); // in case of throw
+}
+
+/*!
+ Constructs contained objects.
+ */
+void HsUninstallItemState::construct()
+{
+    setObjectName(this->parent()->objectName()
+                  + "/UninstallItemState");
+    setProperty(HS_SERVICES_REGISTRATION_KEY, QList<QVariant> ()
+                << SHORTCUT_SERVICE_KEY);
+    connect(this, SIGNAL(exited()), SLOT(cleanUp()));
+}
+
+/*!
+ Sets entry event.
+ \param event entry event.
+ */
+void HsUninstallItemState::onEntry(QEvent *event)
+{
+    HSMENUTEST_FUNC_ENTRY("HsUninstallItemState::onEntry");
+    QState::onEntry(event);
+    qDebug("HsUninstallItemState::onEntry()");
+    HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
+    QVariantMap data = menuEvent->data();
+
+    mItemId = data.value(itemIdKey()).toInt();
+
+    QString message;
+    if (shortcutService()->isItemShortcutWidget(mItemId)) {
+        message.append(
+            hbTrId("txt_applib_dialog_uninstalls_1_and_deletes_all_sh").arg(
+                HsMenuService::getName(mItemId)));
+    } else {
+        message.append(
+            hbTrId("txt_applib_dialog_1_will_be_removed_from_phone_c").arg(
+                HsMenuService::getName(mItemId)));
+    }
+
+    // create and show message box
+    mUninstallMessage = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+    mUninstallMessage->setAttribute(Qt::WA_DeleteOnClose);
+
+    mUninstallMessage->setText(message);
+
+    mUninstallMessage->clearActions();
+    mConfirmAction = new HbAction(hbTrId("txt_common_button_ok"), mUninstallMessage);
+    mUninstallMessage->addAction(mConfirmAction);
+
+    HbAction *secondaryAction = new HbAction(hbTrId("txt_common_button_cancel"), mUninstallMessage);
+    mUninstallMessage->addAction(secondaryAction);
+
+    mUninstallMessage->open(this, SLOT(uninstallMessageFinished(HbAction*)));
+
+    HSMENUTEST_FUNC_EXIT("HsUninstallItemState::onEntry");
+}
+
+/*!
+ Action after closed confirmation dialog.
+ \param finishedAction chosen action.
+ \retval void
+ */
+void HsUninstallItemState::uninstallMessageFinished(HbAction* finishedAction)
+{
+    if (finishedAction == mConfirmAction) {
+        HsMenuService::executeAction(mItemId, removeActionIdentifier());
+    }
+    emit exit();
+}
+
+/*!
+ Convenience method returning the shortcut service.
+ \since S60 ?S60_version.
+ \return Shortcut Service.
+ */
+HsShortcutService *HsUninstallItemState::shortcutService() const
+{
+    return property(SHORTCUT_SERVICE_KEY).value<HsShortcutService *> ();
+}
+
+/*!
+ Slot launched after state has exited and in destructor.
+ \retval void
+ */
+void HsUninstallItemState::cleanUp()
+{
+    // Close messagebox if App key was pressed
+    if (mUninstallMessage) {
+        disconnect(mUninstallMessage, SIGNAL(finished(HbAction*)), this, SLOT(uninstallMessageFinished(HbAction*)));
+        mUninstallMessage->close();
+        mUninstallMessage = NULL;
+    }
+
+    mConfirmAction = NULL;
+    mItemId = 0;
+}