diff -r c743ef5928ba -r f9ce957a272c homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallcollectionsstate.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include + +#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"); +}