homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp
changeset 35 f9ce957a272c
child 36 cdae8c6c3876
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp	Fri Mar 19 09:27:44 2010 +0200
@@ -0,0 +1,212 @@
+/*
+ * 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:
+ *
+ */
+
+#include <QDebug>
+#include <hblistwidget.h>
+#include <hbdialog.h>
+#include <hblabel.h>
+#include <hbaction.h>
+#include <hsmenuservice.h>
+#include <hblistwidgetitem.h>
+#include <hbinstance.h>
+
+#include "hsarrangestate.h"
+#include "hsmenuevent.h"
+#include "hsmenuitemmodel.h"
+
+/*!
+ \class HsArrangeState
+ \ingroup group_hsmenustateplugin
+ \brief Application Library State.
+ State responsible for arrange collection's entries.
+ */
+
+/*!
+ Constructor
+ \param parent owner
+ \retval void
+ */
+HsArrangeState::HsArrangeState(QState *parent) :
+    QState(parent), mDialog(0), mEntriesList(0), mItemModel(0)
+{
+    construct();
+}
+
+/*!
+ Destructor
+ \retval void
+ */
+HsArrangeState::~HsArrangeState()
+{
+    if (mEntriesList) {
+        delete mEntriesList;
+    }
+    if (mDialog) {
+        delete mDialog;
+    }
+    if (mItemModel) {
+        delete mItemModel;
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsArrangeState::construct()
+{
+    HSMENUTEST_FUNC_ENTRY("HsArrangeState::construct");
+    setObjectName("homescreen.nokia.com/state/arrangestate");
+    connect(this, SIGNAL(exited()),SLOT(stateExited()));
+    HSMENUTEST_FUNC_EXIT("HsArrangeState::construct");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsArrangeState::save()
+{
+    qDebug("HsArrangeState::save()");
+    HSMENUTEST_FUNC_ENTRY("HsArrangeState::save");
+
+    getArrangedEntriesIds();
+    if (mArrangedCollIdList.count() == mCollIdList.count()) {
+        for (int i(0); i < mArrangedCollIdList.count(); i++) {
+            if (mArrangedCollIdList.at(i) != mCollIdList.at(i)) {
+                HsMenuService::organizeCollection(
+                    HsMenuService::allCollectionsId(), mArrangedCollIdList);
+                break;
+            }
+        }
+    }
+
+    HSMENUTEST_FUNC_EXIT("HsArrangeState::save");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT
+void HsArrangeState::onEntry(QEvent *event)
+{
+    qDebug("HsArrangeState::onEntry()");
+    HSMENUTEST_FUNC_ENTRY("HsArrangeState::onEntry");
+    QState::onEntry(event);
+    HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
+    QVariantMap data = menuEvent->data();
+
+    mTopItemId = data.value(itemIdKey()).toInt();
+
+    mItemModel = HsMenuService::getAllCollectionsModel();
+
+    mEntriesList = new HbListWidget();
+    fulfillEntriesList();
+
+    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());
+
+    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;
+
+    HSMENUTEST_FUNC_EXIT("HsArrangeState::onEntry");
+}
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsArrangeState::stateExited()
+{
+    HSMENUTEST_FUNC_ENTRY("HsArrangeState::stateExited");
+
+    mDialog->setHeadingWidget(0); //delete label
+    mDialog->setContentWidget(0); //delete mEntriesList
+    mEntriesList = NULL;
+    delete mDialog;
+    mDialog = NULL;
+    delete mItemModel;
+    mItemModel = NULL;
+
+    mArrangedCollIdList.clear();
+    mCollIdList.clear();
+
+    HSMENUTEST_FUNC_EXIT("HsArrangeState::stateExited");
+    qDebug("HsArrangeState::stateExited()");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsArrangeState::fulfillEntriesList()
+{
+    qDebug() << "HsArrangeState::fulfillEntriesList";
+
+    mTopModelIndex = QModelIndex();
+    for (int i(0); i < mItemModel->rowCount(); i++) {
+        QModelIndex idx = mItemModel->index(i);
+        HbListWidgetItem *widgetItem = new HbListWidgetItem();
+        int itemId = mItemModel->data(idx, CaItemModel::IdRole).toInt();
+        widgetItem->setData(mItemModel->data(idx, CaItemModel::IdRole),
+                            CaItemModel::IdRole);
+        mCollIdList.append(itemId);
+        widgetItem->setData(mItemModel->data(idx, Qt::DisplayRole),
+                            Qt::DisplayRole);
+        widgetItem->setData(mItemModel->data(idx, Qt::DecorationRole),
+                            Qt::DecorationRole);
+
+        mEntriesList->addItem(widgetItem);
+        if (mTopItemId == itemId) {
+            mEntriesList->indexCount();
+            mEntriesList->setCurrentItem(widgetItem);
+            mTopModelIndex = mEntriesList->currentIndex();
+        }
+    }
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsArrangeState::getArrangedEntriesIds()
+{
+    for (int i(0); i < mEntriesList->count(); i++) {
+        HbListWidgetItem *widgetItem = mEntriesList->item(i);
+        QVariant entryId = widgetItem->data(CaItemModel::IdRole);
+        mArrangedCollIdList.append(entryId.toInt());
+    }
+}