homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallcollectionsstate.cpp
changeset 35 f9ce957a272c
child 36 cdae8c6c3876
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallcollectionsstate.cpp	Fri Mar 19 09:27:44 2010 +0200
@@ -0,0 +1,357 @@
+/*
+ * 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: Menu All Collections state.
+ *
+ */
+
+#include <qstatemachine.h>
+#include <hbview.h>
+#include <hbmainwindow.h>
+#include <hbmenu.h>
+#include <hbaction.h>
+#include <hbabstractviewitem.h>
+#include <hsmenueventfactory.h>
+#include <hbinstance.h>
+#include <hbsearchpanel.h>
+
+#include "hsmenuview.h"
+#include "hsmenuitemmodel.h"
+#include "cadefs.h"
+#include "hsallcollectionsstate.h"
+#include "hsaddappstocollectionstate.h"
+#include "hsmenumodetransition.h"
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+HsAllCollectionsState::HsAllCollectionsState(
+    HsMenuView &menuView, QState *parent) :
+    QState(parent), mSortAttribute(CustomHsSortAttribute),
+    mMenuView(menuView), mAllCollectionsModel(0)
+{
+    construct();
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::construct()
+{
+    HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::construct");
+
+    QState *initialState = new QState(this);
+    setInitialState(initialState);
+
+    QState *addModeState = new QState(this);
+    connect(addModeState, SIGNAL(entered()),SLOT(addModeEntered()));
+
+    QState *normalModeState = new QState(this);
+    connect(normalModeState, SIGNAL(entered()),SLOT(normalModeEntered()));
+    connect(normalModeState, SIGNAL(exited()),SLOT(normalModeExited()));
+
+    initialState->addTransition(new HsMenuModeTransition(
+                                    mMenuView, NormalHsMenuMode, normalModeState));
+    initialState->addTransition(new HsMenuModeTransition(
+                                    mMenuView, AddHsMenuMode, addModeState));
+
+    setObjectName(this->parent()->objectName() + "/allcollectionsstate");
+    connect(this, SIGNAL(entered()),SLOT(stateEntered()));
+    connect(this, SIGNAL(exited()),SLOT(stateExited()));
+    mAllCollectionsModel = HsMenuService::getAllCollectionsModel(
+                               mSortAttribute);
+    HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::construct");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::setMenuOptions()
+{
+    HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::setMenuOptions");
+    HbMenu *const options = new HbMenu();
+    options->addAction(hbTrId("txt_applib_opt_new_collection"),
+                       this, SLOT(createNewCollection()));
+
+    HbMenu *const sortMenu = options->addMenu(
+                                 hbTrId("txt_applib_opt_sort_by"));
+
+    //Grouped options are exclusive by default.
+    QActionGroup *sortGroup = new QActionGroup(options);
+    sortGroup->addAction(sortMenu->addAction(
+                             hbTrId("txt_applib_opt_sub_custom"),
+                             this, SLOT(customMenuAction())));
+    sortGroup->addAction(sortMenu->addAction(
+                             hbTrId("txt_applib_opt_sub_ascending"),
+                             this, SLOT(ascendingMenuAction())));
+    sortGroup->addAction(sortMenu->addAction(
+                             hbTrId("txt_applib_opt_sub_descending"),
+                             this, SLOT(descendingMenuAction())));
+
+    if (mSortAttribute == CustomHsSortAttribute) {
+        options->addAction(hbTrId("txt_applib_opt_arrange"),
+                           this, SLOT(createArrangeCollection()));
+    }
+    options->setParent(this);
+
+    foreach(QAction *action, sortMenu->actions()) {
+        action->setCheckable(true);
+    }
+
+    switch (mSortAttribute) {
+    case AscendingNameHsSortAttribute:
+        sortGroup->actions().at(1)->setChecked(true);
+        break;
+    case DescendingNameHsSortAttribute:
+        sortGroup->actions().at(2)->setChecked(true);
+        break;
+    case CustomHsSortAttribute:
+    default:
+        sortGroup->actions().at(0)->setChecked(true);
+        break;
+    }
+
+    mMenuView.view()->setMenu(options);
+
+
+    HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::setMenuOptions");
+}
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+HsAllCollectionsState::~HsAllCollectionsState()
+{
+    delete mAllCollectionsModel;
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::scrollToBeginning()
+{
+    mBookmark = mAllCollectionsModel->index(0);
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::stateEntered()
+{
+    qDebug("AllCollectionsState::stateEntered()");
+    HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::stateEntered");
+
+    mMenuView.setModel(mAllCollectionsModel);
+    mMenuView.scrollTo(mBookmark, HbAbstractItemView::PositionAtTop);
+
+    HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::stateEntered");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::normalModeEntered()
+{
+    setMenuOptions();
+
+    connect(&mMenuView, SIGNAL(activated(QModelIndex)),
+            SLOT(listItemActivated(QModelIndex)));
+    connect(&mMenuView, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
+            SLOT(listItemLongPressed(HbAbstractViewItem *, QPointF)));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::normalModeExited()
+{
+    mMenuView.view()->setMenu(NULL);
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::addModeEntered()
+{
+    connect(&mMenuView, SIGNAL(activated(QModelIndex)),
+            SLOT(addActivated(QModelIndex)));
+    connect(&mMenuView, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
+            SLOT(addLongPressed(HbAbstractViewItem *, QPointF)));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::stateExited()
+{
+    HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::stateExited");
+
+    mMenuView.disconnect(this);
+
+    mBookmark = mMenuView.firstVisibleItemIndex();
+
+    HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::stateExited");
+    qDebug("AllCollectionsState::stateExited()");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::listItemActivated(const QModelIndex &index)
+{
+    HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::listItemActivated");
+    QVariant data = mAllCollectionsModel->data(index, CaItemModel::IdRole);
+    int id = data.toInt();
+    QString collectionType =
+        mAllCollectionsModel->data(index, CaItemModel::TypeRole).toString();
+    qDebug("AllCollectionsState::listItemActivated - MCS ID: %d",
+           data.toInt());
+
+    mMenuView.setSearchPanelVisible(false);
+
+    machine()->postEvent(HsMenuEventFactory::createOpenCollectionEvent(id,
+                         collectionType));
+    HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::listItemActivated");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::addActivated(const QModelIndex &index)
+{
+    mMenuView.setSearchPanelVisible(false);
+    const int itemId = index.data(CaItemModel::IdRole).toInt();
+    machine()->postEvent(
+        HsMenuEventFactory::createAddToHomeScreenEvent(itemId));
+    machine()->postEvent(
+        HsMenuEventFactory::createOpenHomeScreenEvent());
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::addLongPressed(HbAbstractViewItem *item,
+        const QPointF &coords)
+{
+    Q_UNUSED(coords);
+    mMenuView.setSearchPanelVisible(false);
+    const int itemId = item->modelIndex().data(CaItemModel::IdRole).toInt();
+    machine()->postEvent(
+        HsMenuEventFactory::createAddToHomeScreenEvent(itemId));
+    machine()->postEvent(
+        HsMenuEventFactory::createOpenHomeScreenEvent());
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::listItemLongPressed(HbAbstractViewItem *item,
+        const QPointF &coords)
+{
+    HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::listItemLongPressed");
+
+    mMenuView.setSearchPanelVisible(false);
+
+    const int itemId = item->modelIndex().data(CaItemModel::IdRole).toInt();
+    HbMenu *menu = new HbMenu();
+
+    // create context menu
+    HbAction *addShortcutAction = menu->addAction(hbTrId(
+                                      "txt_applib_menu_add_to_home_screen"));
+    HbAction *renameAction = NULL;
+    HbAction *deleteAction = NULL;
+
+    EntryFlags flags = item->modelIndex().data(CaItemModel::FlagsRole).value<
+                       EntryFlags> ();
+
+    if ((flags & RemovableEntryFlag)) {
+        renameAction = menu->addAction(
+                           hbTrId("txt_common_menu_rename_item"));
+        deleteAction = menu->addAction(hbTrId("txt_common_menu_delete"));
+    }
+
+    // choose proper action
+    if (HbAction *selectedAction = menu->exec(coords)) {
+        if (selectedAction == addShortcutAction) {
+            machine()->postEvent(
+                HsMenuEventFactory::createAddToHomeScreenEvent(itemId));
+        } else if (renameAction && selectedAction == renameAction) {
+            machine()->postEvent(
+                HsMenuEventFactory::createRenameCollectionEvent(itemId));
+        } else if (deleteAction && selectedAction == deleteAction) {
+            machine()->postEvent(
+                HsMenuEventFactory::createDeleteCollectionEvent(itemId));
+        }
+    }
+    delete menu;
+    HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::listItemLongPressed");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::createNewCollection()
+{
+    // Adding a new collection via the Collections view
+    machine()->postEvent(HsMenuEventFactory::createNewCollectionEvent());
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::createArrangeCollection()
+{
+    // Arrange collection via the Arrange view
+    QModelIndex idx = mMenuView.firstVisibleItemIndex();
+    int topItemId = idx.data(CaItemModel::IdRole).toInt();
+    machine()->postEvent(
+        HsMenuEventFactory::createArrangeCollectionEvent(topItemId));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::customMenuAction()
+{
+    HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::customMenuAction");
+    mSortAttribute = CustomHsSortAttribute;
+    setMenuOptions();
+    mAllCollectionsModel->setSort(mSortAttribute);
+    emit sortOrderChanged(mSortAttribute);
+    HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::customMenuAction");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::ascendingMenuAction()
+{
+    HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::ascendingMenuAction");
+    mSortAttribute = AscendingNameHsSortAttribute;
+    setMenuOptions();
+    mAllCollectionsModel->setSort(mSortAttribute);
+    emit sortOrderChanged(mSortAttribute);
+    HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::ascendingMenuAction");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllCollectionsState::descendingMenuAction()
+{
+    HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::descendingMenuAction");
+    mSortAttribute = DescendingNameHsSortAttribute;
+    setMenuOptions();
+    mAllCollectionsModel->setSort(mSortAttribute);
+    emit sortOrderChanged(mSortAttribute);
+    HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::descendingMenuAction");
+}