homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsviewappdetailsstate.cpp
changeset 90 3ac3aaebaee5
parent 86 e4f038c420f7
--- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsviewappdetailsstate.cpp	Mon Sep 13 13:03:23 2010 +0300
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsviewappdetailsstate.cpp	Mon Sep 20 10:19:07 2010 +0300
@@ -31,7 +31,7 @@
 #include "hsviewappdetailsstate.h"
 #include "hsmenuevent.h"
 #include "hsmenuitemmodel.h"
-#include "hsmenuentryremovedhandler.h"
+#include "hsdialogcontroller.h"
 
 static const char *const HS_VIEWAPPDETAILS_JAVA_DIALOG_SECTION_NAME=
         "detailsDialogForJavaApplication";
@@ -41,7 +41,7 @@
  /param parent Parent state.
  */
 HsViewAppDetailsState::HsViewAppDetailsState(QState *parent) :
-    QState(parent), mDialog(0)
+    QState(parent)
 {
     construct();
 }
@@ -51,7 +51,10 @@
  */
 HsViewAppDetailsState::~HsViewAppDetailsState()
 {
-    delete mDialog;
+    QT_TRY {
+        emit exit();
+    } QT_CATCH (...) {
+    }
 }
 
 /*!
@@ -82,7 +85,7 @@
     QSharedPointer<const CaEntry> entry
         = CaService::instance()->getEntry(entryId);
     if (!entry) {
-        stateExited();
+        emit exit();
         return;
     }
     const int componentId = entry->attribute(
@@ -96,7 +99,7 @@
 
     //TODO: Should we display something In that case?
     if (detailMap.size() < 1){
-        stateExited();
+        emit exit();
         return;
     }
 
@@ -112,13 +115,12 @@
                                   section, &loadStatusOk);
     }
 
-    mDialog = qobject_cast<HbDialog*>(
-        loader.findWidget(HS_DETAILS_DIALOG_NAME));
+    QScopedPointer<HbDialog> dialog(qobject_cast<HbDialog*>(
+        loader.findWidget(HS_DETAILS_DIALOG_NAME)));
 
-    if (mDialog != NULL) {
-        mDialog->setTimeout(HbPopup::NoTimeout);
-        mDialog->setAttribute(Qt::WA_DeleteOnClose, true);
-        mDialog->actions()[0]->setParent(mDialog);
+    if (!dialog.isNull()) {
+        dialog->setTimeout(HbPopup::NoTimeout);
+        dialog->actions()[0]->setParent(dialog.data());
 
         setFieldPresentation(CaSoftwareRegistry::componentNameKey(),
             detailMap, loader);
@@ -140,14 +142,24 @@
                 detailMap, loader);
         }
 
-        QScopedPointer<HsMenuEntryRemovedHandler> entryObserver(
-            new HsMenuEntryRemovedHandler(entryId, this, SIGNAL(exit())));
+        QScopedPointer<HsDialogController> dialogController(
+            new HsDialogController(dialog.take(),
+                HsMenuDialogFactory::acceptActionIndex(),
+                HsMenuDialogFactory::rejectActionIndex()));
 
-        entryObserver.take()->setParent(mDialog);
+        connect(dialogController.data(),
+                SIGNAL(dialogCompleted()),
+                this,
+                SIGNAL(exit()));
 
-        mDialog->open(this, SLOT(stateExited()));
+        // ensure dialog is dismissed on app key pressed
+        connect(this, SIGNAL(exited()),
+                dialogController.data(),
+                SLOT(dismissDialog()));
+
+        dialogController.take()->openDialog(entryId);
     } else {
-        stateExited();
+        emit exit();
     }
     HSMENUTEST_FUNC_EXIT("HsViewAppDetailsState::onEntry");
 }
@@ -179,28 +191,5 @@
     }
 }
 
-/*!
- Slot invoked when a state is exited.
- */
-void HsViewAppDetailsState::stateExited()
-{
-    HSMENUTEST_FUNC_ENTRY("HsViewAppDetailsState::stateExited");
-    emit exit();
-    HSMENUTEST_FUNC_EXIT("HsViewAppDetailsState::stateExited");
-    qDebug("HsViewAppDetailsState::stateExited()");
-}
 
-/*!
- Invoked on exiting state
- */
-void HsViewAppDetailsState::onExit(QEvent *event)
-{
-    QState::onExit(event);
-    // Close popups if App key was pressed or
-    // memory card removed
-    if (mDialog != NULL) {
-        mDialog->close();
-        mDialog = NULL;
-    }
-}