homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp
changeset 36 cdae8c6c3876
parent 35 f9ce957a272c
child 39 4e8ebe173323
--- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp	Fri Mar 19 09:27:44 2010 +0200
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp	Fri Apr 16 14:54:01 2010 +0300
@@ -21,14 +21,15 @@
 #include <hbmessagebox.h>
 #include <qstatemachine.h>
 #include <hbaction.h>
+#include <HbDocumentLoader>
 #include <hbdialog.h>
 #include <hbwidget.h>
 #include <hbscrollarea.h>
 #include <hbscrollbar.h>
+#include <QtAlgorithms>
 
 #include "hsmenueventfactory.h"
 #include "hsmenuservice.h"
-#include "hswidgetdata.h"
 #include "hswidgethost.h"
 #include "hspreviewhswidgetstate.h"
 #include "hsmenuevent.h"
@@ -43,13 +44,16 @@
 #include "hsdomainmodel_global.h"
 #include <hscontentservice.h>
 
+
+const char HS_PREVIEW_HS_WIDGET_STATE[] = "HsPreviewHSWidgetState";
+
 /*!
  Constructor
  \param parent: parent state
  \retval void
  */
 HsPreviewHSWidgetState::HsPreviewHSWidgetState(QState *parent) :
-    HsMenuBaseState("HsPreviewHSWidgetState", parent),
+    HsMenuBaseState(HS_PREVIEW_HS_WIDGET_STATE, parent),
     mPopupDialog(0),
     mNotifier(0)
 {
@@ -65,9 +69,6 @@
     if (mNotifier) {
         delete mNotifier;
     }
-    if (mPopupDialog) {
-        delete mPopupDialog;
-    }
 }
 
 /*!
@@ -94,65 +95,60 @@
 
     const int entryId = data.value(itemIdKey()).toInt();
 
-    QVariantMap widgetData;
-    widgetData.insert("library", data.value(widgetLibraryAttributeName()).toString());
-    widgetData.insert("uri", data.value(widgetUriAttributeName()).toString());
-    HsWidgetHost *widget = contentService()->createWidgetForPreview(widgetData);
+    QVariantHash widgetData;
+    widgetData.insert(LIBRARY, data.value(widgetLibraryAttributeName()).toString());
+    widgetData.insert(URI, data.value(widgetUriAttributeName()).toString());
+    QScopedPointer<HsWidgetHost> widget(
+        contentService()->createWidgetForPreview(widgetData));
 
     if (widget) {
         widget->setMinimumSize(widget->preferredWidth(),widget->preferredHeight());
-        HbScrollArea *scrollArea = new HbScrollArea();
-        scrollArea->setClampingStyle(HbScrollArea::StrictClamping);
-        scrollArea->setScrollingStyle(HbScrollArea::Pan);
-        scrollArea->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded);
-        scrollArea->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAutoHide);//
-        scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded);
-        scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAutoHide);//
-        scrollArea->verticalScrollBar()->setInteractive(true);
-        scrollArea->horizontalScrollBar()->setInteractive(true);
-        // this sets up the scroll area to scroll in both directions
-        scrollArea->setScrollDirections(Qt::Vertical | Qt::Horizontal);
-        scrollArea->setContentWidget(widget);   //ownership transferred
-        scrollArea->setAlignment(Qt::AlignCenter);
+
+        HbDocumentLoader loader;
 
-        // Instantiate a popup
-        mPopupDialog = new HbDialog();
-
-        // Set dismiss policy that determines what tap events will cause the dialog
-        // to be dismissed
-        mPopupDialog->setDismissPolicy(HbDialog::NoDismiss);
-        mPopupDialog->setTimeout(HbDialog::NoTimeout);
-
-        // Set content widget
-        mPopupDialog->setContentWidget(scrollArea); //ownership transferred
+        bool loadStatusOk = false;
+        mObjectList = 
+            loader.load(HS_WIDGET_PREVIEW_DIALOG_LAYOUT, &loadStatusOk);
+        Q_ASSERT_X(loadStatusOk,
+            HS_WIDGET_PREVIEW_DIALOG_LAYOUT,
+               "Error while loading docml file.");
 
-        // Sets the primary action and secondary action
-        mPopupDialog->setPrimaryAction(new HbAction(hbTrId("txt_applib_button_add_to_homescreen"),mPopupDialog));
-        mPopupDialog->setSecondaryAction(new HbAction(hbTrId("txt_common_button_close"),mPopupDialog));
-
-        subscribeForMemoryCardRemove(entryId);
-        widget->initializeWidget();
-        widget->showWidget();
-        // Launch popup syncronously
-        HbAction *result = mPopupDialog->exec();
-
-        disconnect(mNotifier,
-                   SIGNAL(entryChanged(const CaEntry &, ChangeType)),
-                   this, SLOT(memoryCardRemoved()));
-
-        if (result == mPopupDialog->primaryAction()) {
-            // take it back from scrollarea
+        mPopupDialog = 
+            qobject_cast<HbDialog*>(
+                loader.findWidget(HS_WIDGET_PREVIEW_DIALOG_NAME));
+        
+        HbScrollArea *const scrollArea( 
+            qobject_cast<HbScrollArea*>(
+                loader.findWidget(HS_WIDGET_PREVIEW_SCROLL_AREA_NAME)));
+        
+        if (mPopupDialog != NULL && scrollArea != NULL) {
+            mPopupDialog->setContentWidget(scrollArea); //ownership transferred
+            mPopupDialog->setTimeout(HbPopup::NoTimeout);
+            scrollArea->verticalScrollBar()->setInteractive(true);
+            scrollArea->horizontalScrollBar()->setInteractive(true);
+            scrollArea->setContentWidget(widget.data());
             scrollArea->takeContentWidget();
-            widget->hideWidget();
-            widget->uninitializeWidget();
-            HsScene::instance()->activePage()->addNewWidget(widget);
-        } else {
-            widget->deleteFromDatabase();
+            
+            subscribeForMemoryCardRemove(entryId);
+            widget->initializeWidget();
+            widget->showWidget();
+            // Launch popup syncronously
+            const HbAction *const action(mPopupDialog->exec());
+    
+            disconnect(mNotifier,
+                       SIGNAL(entryChanged(CaEntry,ChangeType)),
+                       this, SLOT(memoryCardRemoved()));
+    
+            if (action == mPopupDialog->primaryAction()) {
+                widget->hideWidget();
+                HsScene::instance()->activePage()->addNewWidget(
+                    widget.take()); // ownership transferred
+            } else {
+                widget->uninitializeWidget();
+                widget->deleteFromDatabase();
+            }
         }
 
-        delete result;
-        result = NULL;
-
     } else {
         showMessageWidgetCorrupted(entryId);
     }
@@ -171,15 +167,14 @@
 {
     HSMENUTEST_FUNC_ENTRY("HsPreviewHSWidgetState::stateExited");
 
-    if (mNotifier) {
-        delete mNotifier;
-        mNotifier = NULL;
-    }
+
+    delete mNotifier;
+    mNotifier = NULL;
 
-    if (mPopupDialog) {
-        delete mPopupDialog;
-        mPopupDialog = NULL;
-    }
+    qDeleteAll(mObjectList);
+    mObjectList.clear();
+    
+    mPopupDialog = NULL;
 
     HSMENUTEST_FUNC_EXIT("HsPreviewHSWidgetState::stateExited");
     qDebug("HsPreviewHSWidgetState::stateExited()");
@@ -210,7 +205,7 @@
     mNotifier = CaService::instance()->createNotifier(filter);
     mNotifier->setParent(this);
     connect(mNotifier,
-            SIGNAL(entryChanged(const CaEntry &, ChangeType)),
+            SIGNAL(entryChanged(CaEntry,ChangeType)),
             SLOT(memoryCardRemoved()));
 }