homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsbaseviewstate.cpp
changeset 69 87476091b3f5
parent 63 52b0f64eeb51
child 71 1db7cc813a4e
--- a/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsbaseviewstate.cpp	Wed Jul 14 15:53:30 2010 +0300
+++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsbaseviewstate.cpp	Fri Jul 23 13:47:57 2010 +0300
@@ -15,6 +15,7 @@
  *
  */
 
+#include <QScopedPointer>
 #include <QStateMachine>
 #include <HbMessageBox>
 #include <HbParameterLengthLimiter>
@@ -31,6 +32,7 @@
 #include "hsmenudialogfactory.h"
 #include "hsmenuitemmodel.h"
 #include "hsmenumodetransition.h"
+#include "hsmenuentryremovedhandler.h"
 #include "hsmainwindow.h"
 
 
@@ -41,8 +43,6 @@
  */
 HsBaseViewState::HsBaseViewState(HsMainWindow &mainWindow, QState *parent):
     QState(parent),
-    mNotifier(0),
-    mMessageRelatedItemId(0),
     mApplicationLaunchFailMessage(0),
     mModel(0),
     mContextMenu(0),
@@ -61,12 +61,10 @@
  \param menuMode menu mode object.
  \param parent Owner.
  */
-HsBaseViewState::HsBaseViewState(HsMainWindow &mainWindow, 
-    HsMenuModeWrapper& menuMode, 
+HsBaseViewState::HsBaseViewState(HsMainWindow &mainWindow,
+    HsMenuModeWrapper& menuMode,
     QState *parent):
     QState(parent),
-    mNotifier(0),
-    mMessageRelatedItemId(0),
     mApplicationLaunchFailMessage(0),
     mModel(0),
     mContextMenu(0),
@@ -81,12 +79,13 @@
 /*!
  Initialize contained objects.
  \param menuViewBuilder object providing widgets for menu view.
- \param viewContext state context of the view the builder is to provide widgets for.
+ \param stateContext state context of the view the builder
+     is to provide widgets for.
  */
-void HsBaseViewState::initialize(HsMenuViewBuilder &menuViewBuilder, 
-    HsViewContext viewContext)
+void HsBaseViewState::initialize(HsMenuViewBuilder &menuViewBuilder,
+    HsStateContext stateContext)
 {
-    mMenuView.reset(new HsMenuView(menuViewBuilder, viewContext));
+    mMenuView.reset(new HsMenuView(menuViewBuilder, stateContext, mMainWindow));
     mMenuView->view()->setNavigationAction(mBackKeyAction);
 
     connect(this, SIGNAL(entered()),SLOT(stateEntered()));
@@ -105,73 +104,29 @@
     message.append(
         HbParameterLengthLimiter("txt_applib_info_launching_the_application_failed").arg(
             errorCode));
-    
-    mMessageRelatedItemId = itemId;
 
     // create and show message box
-    mApplicationLaunchFailMessage = HsMenuDialogFactory().create(message, HsMenuDialogFactory::Close);
-
-    mApplicationLaunchFailMessage->open(this, SLOT(applicationLaunchFailMessageFinished(HbAction*)));
-    
-    subscribeForMemoryCardRemove();
-}
-
-/*!
- Subscribe for memory card remove.
- */
-void HsBaseViewState::subscribeForMemoryCardRemove()
-{
-    if (mMessageRelatedItemId !=0 ) {
-        CaNotifierFilter filter;
-        filter.setIds(QList<int>() << mMessageRelatedItemId);
-        mNotifier = CaService::instance()->createNotifier(filter);
-        mNotifier->setParent(this);
-        connect(mNotifier,
-            SIGNAL(entryChanged(CaEntry,ChangeType)),
-            SLOT(cleanUpApplicationLaunchFailMessage()));
-    }
-}
+    mApplicationLaunchFailMessage = HsMenuDialogFactory().create(
+            message, HsMenuDialogFactory::Close);
 
-/*!
- Clean up application launch fail message box.
- \retval void
- */
-void HsBaseViewState::cleanUpApplicationLaunchFailMessage()
-{
-    if (mApplicationLaunchFailMessage) {
-        mApplicationLaunchFailMessage->close();
-        mApplicationLaunchFailMessage = NULL;
-    }
-    if (mNotifier) {
-        delete mNotifier;
-        mNotifier = NULL;
-    }
-    mMessageRelatedItemId = 0;
+    QScopedPointer<HsMenuEntryRemovedHandler> entryObserver(
+        new HsMenuEntryRemovedHandler(itemId, mApplicationLaunchFailMessage.data(), SLOT(close())));
+
+    entryObserver.take()->setParent(mApplicationLaunchFailMessage.data());
+
+    mApplicationLaunchFailMessage->open();
 }
 
 /*!
- Action after closed application launch fail dialog.
- \param finishedAction chosen action.
- \retval void
- */
-void HsBaseViewState::applicationLaunchFailMessageFinished(HbAction*)
-{
-    mApplicationLaunchFailMessage = NULL;
-    cleanUpApplicationLaunchFailMessage();
-}
-
-
-/*!
  Slot invoked when a state is entered.
  */
 void HsBaseViewState::stateEntered()
 {
     qDebug("HsBaseViewState::stateEntered()");
     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::stateEntered");
-
-    mMainWindow.setCurrentView(*mMenuView);
     mMenuView->activate();
-
+    connect(mMenuView.data(), SIGNAL(listViewChange()),
+            this, SLOT(closeContextMenu()));
     HSMENUTEST_FUNC_EXIT("HsBaseViewState::stateEntered");
 }
 
@@ -181,14 +136,15 @@
 void HsBaseViewState::stateExited()
 {
     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::stateExited");
-    mMenuView->setSearchPanelVisible(false);
+
+    mMenuView->hideSearchPanel();
     mMenuView->disconnect(this);
     mMenuView->view()->setMenu(NULL);
     mMenuView->inactivate();
-    cleanUpApplicationLaunchFailMessage();
-    if (mContextMenu){
-        mContextMenu->close();
+    if (!mApplicationLaunchFailMessage.isNull()) {
+        mApplicationLaunchFailMessage->close();
     }
+    closeContextMenu();
     HSMENUTEST_FUNC_EXIT("HsBaseViewState::stateExited");
 }
 
@@ -225,7 +181,6 @@
  */
 HsBaseViewState::~HsBaseViewState()
 {
-    mMenuView->setModel(NULL);
     delete mModel;
 }
 
@@ -238,28 +193,23 @@
     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::launchItem");
 
     QSharedPointer<const CaEntry> entry = mModel->entry(index);
-
-    if (entry->entryTypeName() == widgetTypeName()) {
-        EntryFlags flags = index.data(CaItemModel::FlagsRole).value<
-                               EntryFlags> ();
-        if (!(flags & UninstallEntryFlag)) {
-            machine()->postEvent(
-                HsMenuEventFactory::createPreviewHSWidgetEvent(
-                    entry->id(), entry->entryTypeName(), entry->attribute(
-                        widgetUriAttributeName()), entry->attribute(
-                        widgetLibraryAttributeName())));
-
-            const int itemId = index.data(CaItemModel::IdRole).toInt();
-            HsMenuService::touch(itemId);
+    if (!entry.isNull()) {
+        if (entry->entryTypeName() == widgetTypeName()) {
+            EntryFlags flags = entry->flags();
+            if (!(flags & UninstallEntryFlag)) {
+                machine()->postEvent(HsMenuEventFactory::createPreviewHSWidgetEvent(entry->id(),
+                    entry->entryTypeName(), entry->attribute(widgetUriAttributeName()),
+                    entry->attribute(widgetLibraryAttributeName())));
+                HsMenuService::touch(entry->id());
+            }
         }
-    } else {
-        QVariant data = mModel->data(index, CaItemModel::IdRole);
-        int errCode = HsMenuService::executeAction(data.toInt());
-        if (errCode != 0) {
-            createApplicationLaunchFailMessage(errCode,index.data(CaItemModel::IdRole).toInt());
+        else {
+            int errCode = HsMenuService::executeAction(entry->id());
+            if (errCode != 0) {
+                createApplicationLaunchFailMessage(errCode, entry->id());
+            }
         }
     }
-
     HSMENUTEST_FUNC_EXIT("HsBaseViewState::launchItem");
 }
 
@@ -272,13 +222,13 @@
     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::openCollection");
     QVariant data = mModel->data(index, CaItemModel::IdRole);
     int id = data.toInt();
-    QString collectionType =
-        mModel->data(index, CaItemModel::TypeRole).toString();
-    qDebug("HsBaseViewState::openCollection - MCS ID: %d",
-           data.toInt());
+    QString collectionType = mModel->data(
+            index, CaItemModel::TypeRole).toString();
+    qDebug("HsBaseViewState::openCollection - MCS ID: %d", data.toInt());
 
-    machine()->postEvent(HsMenuEventFactory::createOpenCollectionFromAppLibraryEvent(id,
-                         collectionType));
+    machine()->postEvent(
+            HsMenuEventFactory::createOpenCollectionFromAppLibraryEvent(
+                    id, collectionType));
     HSMENUTEST_FUNC_EXIT("HsBaseViewState::openCollection");
 }
 
@@ -288,11 +238,10 @@
  */
 void HsBaseViewState::showContextMenu(HbAbstractViewItem *item, const QPointF &coords)
 {
-
     HSMENUTEST_FUNC_ENTRY("HsBaseViewState::showContextMenu");
 
     EntryFlags flags = item->modelIndex().data(
-                           CaItemModel::FlagsRole).value<EntryFlags> ();
+            CaItemModel::FlagsRole).value<EntryFlags> ();
 
     if (!(flags & UninstallEntryFlag)) {
         mContextMenu = new HbMenu;
@@ -335,13 +284,23 @@
     }
     return errCode;
 }
+
+/*!
+ close context menu
+ */
+void HsBaseViewState::closeContextMenu()
+{
+    if (mContextMenu) {
+        mContextMenu->close();
+    }    
+}
 /*!
  Scrolls view to first item at top
  */
 void HsBaseViewState::scrollToBeginning()
 {
     mMenuView->listView()->scrollTo(
-        mModel->index(0), HbAbstractItemView::PositionAtTop);
+            mModel->index(0), HbAbstractItemView::PositionAtTop);
 }
 
 /*!
@@ -367,7 +326,7 @@
     connect(normalModeState, SIGNAL(exited()),SLOT(normalModeExited()));
 
     initialState->addTransition(new HsMenuModeTransition(
-                                    *mMenuMode, NormalHsMenuMode, normalModeState));
+            *mMenuMode, NormalHsMenuMode, normalModeState));
     initialState->addTransition(new HsMenuModeTransition(
-                                    *mMenuMode, AddHsMenuMode, addModeState));
+            *mMenuMode, AddHsMenuMode, addModeState));
 }