--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallappsstate.cpp Fri Mar 19 09:27:44 2010 +0200
@@ -0,0 +1,363 @@
+/*
+ * 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 Applications state.
+ *
+ */
+
+#include <qstatemachine.h>
+#include <hbview.h>
+#include <hblistview.h>
+#include <hbaction.h>
+#include <hbmenu.h>
+#include <hbabstractviewitem.h>
+#include <hsmenueventfactory.h>
+#include <hbinstance.h>
+#include <caentry.h>
+#include <hbsearchpanel.h>
+
+#include "hsmenuitemmodel.h"
+#include "hsmenuview.h"
+#include "cadefs.h"
+#include "hsallappsstate.h"
+#include "hsaddappstocollectionstate.h"
+#include "hsapp_defs.h"
+#include "hsmenumodetransition.h"
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+HsAllAppsState::HsAllAppsState(HsMenuView &menuView, QState *parent) :
+ QState(parent), mSortAttribute(AscendingNameHsSortAttribute),
+ mCollectionsSortAttribute(LatestOnTopHsSortAttribute),
+ mMenuView(menuView), mAllAppsModel(0)
+{
+ construct();
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::construct()
+{
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::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()));
+
+ initialState->addTransition(new HsMenuModeTransition(
+ mMenuView, NormalHsMenuMode, normalModeState));
+ initialState->addTransition(new HsMenuModeTransition(
+ mMenuView, AddHsMenuMode, addModeState));
+
+ setObjectName(this->parent()->objectName() + "/allappsstate");
+ connect(this, SIGNAL(entered()),SLOT(stateEntered()));
+ connect(this, SIGNAL(exited()),SLOT(stateExited()));
+ mAllAppsModel = HsMenuService::getAllApplicationsModel(mSortAttribute);
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::construct");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::setMenuOptions()
+{
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::setMenuOptions");
+ HbMenu *const mOptions = new HbMenu();
+ mOptions->addAction(hbTrId("txt_applib_opt_add_to_collection"),
+ this,
+ SLOT(addToCollection()));
+
+ HbMenu *const sortMenu = mOptions->addMenu(hbTrId(
+ "txt_applib_opt_sort_by"));
+ //Grouped options are exclusive by default.
+ QActionGroup *sortGroup = new QActionGroup(mOptions);
+
+ 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())));
+ mOptions->setParent(this);
+ foreach(QAction *action, sortMenu->actions()) {
+ action->setCheckable(true);
+ }
+ int currentSortingPosition(-1);
+ switch (mSortAttribute) {
+ case AscendingNameHsSortAttribute:
+ currentSortingPosition = 0;
+ break;
+ case DescendingNameHsSortAttribute:
+ currentSortingPosition = 1;
+ break;
+ default:
+ break;
+ }
+ if (currentSortingPosition >= 0) {
+ sortGroup->actions().at(currentSortingPosition)->setChecked(true);
+ }
+ mMenuView.view()->setMenu(mOptions);
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::setMenuOptions");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+HsAllAppsState::~HsAllAppsState()
+{
+ delete mAllAppsModel;
+}
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::scrollToBeginning()
+{
+ mBookmark = mAllAppsModel->index(0);
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::stateEntered()
+{
+ qDebug("AllAppsState::stateEntered()");
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::stateEntered");
+
+ mMenuView.setModel(mAllAppsModel);
+ mMenuView.scrollTo(mBookmark, HbAbstractItemView::PositionAtTop);
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::stateEntered");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::normalModeEntered()
+{
+ setMenuOptions();
+
+ connect(&mMenuView, SIGNAL(activated(QModelIndex)),
+ SLOT(listItemActivated(QModelIndex)));
+ connect(&mMenuView, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
+ SLOT(listItemLongPressed(HbAbstractViewItem *, QPointF)));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::addModeEntered()
+{
+ connect(&mMenuView, SIGNAL(activated(QModelIndex)),
+ SLOT(addActivated(QModelIndex)));
+ connect(&mMenuView, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
+ SLOT(addLongPressed(HbAbstractViewItem *, QPointF)));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::stateExited()
+{
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::stateExited");
+ mBookmark = mMenuView.firstVisibleItemIndex();
+
+ mMenuView.disconnect(this);
+ mMenuView.view()->setMenu(NULL);
+
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::stateExited");
+ qDebug("AllAppsState::stateExited()");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::listItemActivated(const QModelIndex &index)
+{
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::listItemActivated");
+
+ const CaEntry *entry = mAllAppsModel->entry(index);
+
+ if (entry->entryTypeName() == widgetTypeName()) {
+ 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);
+ } else {
+ QVariant data = mAllAppsModel->data(index, CaItemModel::IdRole);
+ HsMenuService::executeAction(data.toInt());
+ }
+
+ mMenuView.setSearchPanelVisible(false);
+
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::listItemActivated");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::addActivated(const QModelIndex &index)
+{
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::addActivated");
+ mMenuView.setSearchPanelVisible(false);
+ addToHomeScreen(index);
+ machine()->postEvent(
+ HsMenuEventFactory::createOpenHomeScreenEvent());
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::addActivated");
+}
+
+/*!
+ Handles long-item-pressed event in all apps view by showing context menu
+ \param item the event pertains to
+ \param position at which context menu is shown
+ \retval void
+ */
+void HsAllAppsState::listItemLongPressed(HbAbstractViewItem *item,
+ const QPointF &coords)
+{
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::listItemLongPressed");
+
+ mMenuView.setSearchPanelVisible(false);
+
+ // create context menu
+ HbMenu *menu = new HbMenu();
+
+ HbAction *addToHomeScreenAction = menu->addAction(hbTrId(
+ "txt_applib_menu_add_to_home_screen"));
+
+ HbAction *addToCollectionAction = menu->addAction(hbTrId(
+ "txt_applib_menu_add_to_collection"));
+
+ HbAction *uninstallAction = menu->addAction(hbTrId(
+ "txt_common_menu_delete"));
+
+ // check conditions and hide irrelevant menu items
+
+ EntryFlags flags = item->modelIndex().data(
+ CaItemModel::FlagsRole).value<EntryFlags> ();
+
+ if (!(flags & RemovableEntryFlag)) {
+ uninstallAction->setVisible(false);
+ }
+ // choose proper action
+ if (HbAction *selectedAction = menu->exec(coords)) {
+ if (selectedAction == addToHomeScreenAction) {
+ addToHomeScreen(item->modelIndex());
+ } else if (selectedAction == addToCollectionAction) {
+ // Addding a specific application to
+ // an existing collection via item specific menu.
+ const int itemId =
+ item->modelIndex().data(CaItemModel::IdRole).toInt();
+ machine()->postEvent(
+ HsMenuEventFactory::createAddAppsFromApplicationsViewEvent(
+ mSortAttribute, mCollectionsSortAttribute, itemId));
+
+ } else if (selectedAction == uninstallAction) {
+ const int itemId =
+ item->modelIndex().data(CaItemModel::IdRole).toInt();
+ HsMenuService::executeAction(itemId, removeActionIdentifier());
+ }
+ }
+ delete menu;
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::listItemLongPressed");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::addLongPressed(HbAbstractViewItem *item,
+ const QPointF &coords)
+{
+ Q_UNUSED(coords);
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::addLongPressed");
+ mMenuView.setSearchPanelVisible(false);
+ addToHomeScreen(item->modelIndex());
+ machine()->postEvent(
+ HsMenuEventFactory::createOpenHomeScreenEvent());
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::addLongPressed");
+
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::addToCollection()
+{
+ // Add one/many applications to
+ // a new/an existing collection via the All view
+ machine()->postEvent(
+ HsMenuEventFactory::createAddAppsFromApplicationsViewEvent(
+ mSortAttribute, mCollectionsSortAttribute));
+}
+
+/*!
+ Triggers event so that a state adding to Home Screen is reached
+ \param index of an item to be added to homescreen
+ \retval void
+ */
+void HsAllAppsState::addToHomeScreen(const QModelIndex &index)
+{
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::addToHomeScreen");
+ const CaEntry *entry = mAllAppsModel->entry(index);
+
+ machine()-> postEvent(HsMenuEventFactory::createAddToHomeScreenEvent(
+ entry->id(), entry->entryTypeName(), entry->attribute(
+ widgetUriAttributeName()), entry->attribute(
+ widgetLibraryAttributeName())));
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::addToHomeScreen");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::ascendingMenuAction()
+{
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::ascendingMenuAction");
+ mSortAttribute = AscendingNameHsSortAttribute;
+ mAllAppsModel->setSort(mSortAttribute);
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::ascendingMenuAction");
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::collectionsSortOrder(
+ HsSortAttribute sortOrder)
+{
+ mCollectionsSortAttribute = sortOrder;
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void HsAllAppsState::descendingMenuAction()
+{
+ HSMENUTEST_FUNC_ENTRY("HsAllAppsState::descendingMenuAction");
+ mSortAttribute = DescendingNameHsSortAttribute;
+ mAllAppsModel->setSort(mSortAttribute);
+ HSMENUTEST_FUNC_EXIT("HsAllAppsState::descendingMenuAction");
+
+}