homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp
changeset 36 cdae8c6c3876
parent 35 f9ce957a272c
child 39 4e8ebe173323
--- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp	Fri Mar 19 09:27:44 2010 +0200
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp	Fri Apr 16 14:54:01 2010 +0300
@@ -18,6 +18,7 @@
 #include <QDebug>
 #include <hblistwidget.h>
 #include <hbdialog.h>
+#include <HbDocumentLoader>
 #include <hblabel.h>
 #include <hbaction.h>
 #include <hsmenuservice.h>
@@ -52,9 +53,6 @@
  */
 HsArrangeState::~HsArrangeState()
 {
-    if (mEntriesList) {
-        delete mEntriesList;
-    }
     if (mDialog) {
         delete mDialog;
     }
@@ -74,15 +72,16 @@
     HSMENUTEST_FUNC_EXIT("HsArrangeState::construct");
 }
 
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void HsArrangeState::save()
+/*!
+  Send data to storage (selected applications in collection).
+  \param listWidget List of items to be stored. 
+ */
+void HsArrangeState::save(const HbListWidget& listWidget)
 {
     qDebug("HsArrangeState::save()");
     HSMENUTEST_FUNC_ENTRY("HsArrangeState::save");
 
-    getArrangedEntriesIds();
+    getArrangedEntriesIds(listWidget);
     if (mArrangedCollIdList.count() == mCollIdList.count()) {
         for (int i(0); i < mArrangedCollIdList.count(); i++) {
             if (mArrangedCollIdList.at(i) != mCollIdList.at(i)) {
@@ -112,37 +111,45 @@
 
     mTopItemId = data.value(itemIdKey()).toInt();
 
-    mItemModel = HsMenuService::getAllCollectionsModel();
-
-    mEntriesList = new HbListWidget();
-    fulfillEntriesList();
+    HbDocumentLoader loader;
+    bool loadStatusOk = false;
+    mObjectList = 
+        loader.load(HS_ARRANGE_DIALOG_LAYOUT, &loadStatusOk);
+    Q_ASSERT_X(loadStatusOk,
+        HS_ARRANGE_DIALOG_LAYOUT,
+           "Error while loading docml file.");
+    
+    mEntriesList = qobject_cast<HbListWidget*>(
+        loader.findWidget(HS_ARRANGE_LIST_NAME));
+    
+    mDialog = qobject_cast<HbDialog*>(
+            loader.findWidget(HS_ARRANGE_DIALOG_NAME));
 
-    mEntriesList->scrollTo(mTopModelIndex,
-                           HbAbstractItemView::PositionAtTop);
-    mEntriesList->setArrangeMode(true);
-
-    mDialog = new HbDialog();
-    mDialog->setDismissPolicy(HbPopup::NoDismiss);
-    mDialog->setTimeout(HbPopup::NoTimeout);
-
-    mDialog->setPreferredSize(
-        HbInstance::instance()->allMainWindows().at(0)->size());
+    
+    if (mEntriesList != NULL && mDialog != NULL) {
 
-    HbLabel *label = new HbLabel(hbTrId("txt_applib_title_arrange"));
-    mDialog->setHeadingWidget(label);
-    mDialog->setContentWidget(mEntriesList);
-
-    mDialog->setPrimaryAction(new HbAction(hbTrId("txt_common_button_ok"),
-                                           mDialog));
-
-    HbAction *result = mDialog->exec();
-    mEntriesList->setArrangeMode(false);
-    if (result == mDialog->primaryAction()) {
-        save();
-    }
-    delete result;
-    result = NULL;
-
+        mItemModel = HsMenuService::getAllCollectionsModel();
+        
+        fulfillEntriesList(*mEntriesList);
+    
+        mEntriesList->scrollTo(mTopModelIndex,
+                               HbAbstractItemView::PositionAtTop);
+    
+        mEntriesList->setArrangeMode(true);
+    
+        mDialog->setTimeout(HbPopup::NoTimeout);
+    
+        mDialog->setPreferredSize(
+            HbInstance::instance()->allMainWindows().at(0)->size());
+    
+        HbAction const* action(mDialog->exec());
+        
+        mEntriesList->setArrangeMode(false);
+        
+        if (action == mDialog->primaryAction()) {
+            save(*mEntriesList);
+        }
+    }    
     HSMENUTEST_FUNC_EXIT("HsArrangeState::onEntry");
 }
 #ifdef COVERAGE_MEASUREMENT
@@ -155,10 +162,10 @@
 {
     HSMENUTEST_FUNC_ENTRY("HsArrangeState::stateExited");
 
-    mDialog->setHeadingWidget(0); //delete label
-    mDialog->setContentWidget(0); //delete mEntriesList
+    qDeleteAll(mObjectList);
+    mObjectList.clear();
+    
     mEntriesList = NULL;
-    delete mDialog;
     mDialog = NULL;
     delete mItemModel;
     mItemModel = NULL;
@@ -170,10 +177,12 @@
     qDebug("HsArrangeState::stateExited()");
 }
 
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void HsArrangeState::fulfillEntriesList()
+
+/*!
+ Put items from model into arrangable list of items represented by \a listWidget
+  \param listWidget Object to be filled with list of items from model.
+ */
+void HsArrangeState::fulfillEntriesList(HbListWidget& listWidget)
 {
     qDebug() << "HsArrangeState::fulfillEntriesList";
 
@@ -190,22 +199,24 @@
         widgetItem->setData(mItemModel->data(idx, Qt::DecorationRole),
                             Qt::DecorationRole);
 
-        mEntriesList->addItem(widgetItem);
+        listWidget.addItem(widgetItem);
         if (mTopItemId == itemId) {
-            mEntriesList->indexCount();
-            mEntriesList->setCurrentItem(widgetItem);
-            mTopModelIndex = mEntriesList->currentIndex();
+            listWidget.indexCount();
+            listWidget.setCurrentItem(widgetItem);
+            mTopModelIndex = listWidget.currentIndex();
         }
     }
 }
 
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void HsArrangeState::getArrangedEntriesIds()
+
+/*!
+ Copy items in from \a listWidget to arranged collection id list
+ \param listWidget List of items in the requested order.
+ */
+void HsArrangeState::getArrangedEntriesIds(const HbListWidget& listWidget)
 {
-    for (int i(0); i < mEntriesList->count(); i++) {
-        HbListWidgetItem *widgetItem = mEntriesList->item(i);
+    for (int i(0); i < listWidget.count(); ++i) {
+        HbListWidgetItem *widgetItem = listWidget.item(i);
         QVariant entryId = widgetItem->data(CaItemModel::IdRole);
         mArrangedCollIdList.append(entryId.toInt());
     }