diff -r 4e8ebe173323 -r 23b5d6a29cce homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallcollectionsstate.cpp --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallcollectionsstate.cpp Mon May 03 12:24:59 2010 +0300 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallcollectionsstate.cpp Fri May 14 15:43:04 2010 +0300 @@ -14,18 +14,20 @@ * Description: Menu All Collections state. * */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include -#include -#include -#include -#include -#include #include -#include -#include - -#include "hsmenuview.h" +#include "hsmenumodewrapper.h" +#include "hsmenuviewbuilder.h" #include "hsmenuitemmodel.h" #include "cadefs.h" #include "hsallcollectionsstate.h" @@ -33,14 +35,51 @@ #include "hsmenumodetransition.h" /*! + \class HsAllCollectionsState + \ingroup group_hsmenustateplugin + \brief All Collections State. + Displays all collections present on the device. + \lib ?library + \see StateMachine + */ + +/*! + \var HsAllCollectionsState::mSortAttribute + Sort order + */ + +/*! + \var HsAllCollectionsState::mMenuView + Wrapper for All Collections View. + */ + +/*! + \var HsAllCollectionsState::mAllCollectionsModel + Item Model for the List. + Own. + */ + +/*! + \fn void HsAllCollectionsState::sortOrderChanged(HsSortAttribute sortAttribute); + Signal emitted when sort order is changed. + \param sortOrder new sort order. + */ + +/*! Constructor. - \param menuView Menu view. + \param menuViewBuilder Menu view builder. + \param menuMode reference to object representing menu mode (add mode on/add mode off). \param parent Owner. */ HsAllCollectionsState::HsAllCollectionsState( - HsMenuView &menuView, QState *parent) : - QState(parent), mSortAttribute(CustomHsSortAttribute), - mMenuView(menuView), mAllCollectionsModel(0) + HsMenuViewBuilder &menuViewBuilder, + HsMenuModeWrapper &menuMode, + QState *parent): + QState(parent), + mSortAttribute(CustomHsSortAttribute), + mMenuView(menuViewBuilder, HsAllCollectionsContext), + mMenuMode(menuMode), + mAllCollectionsModel(0), mContextModelIndex(), mContextMenu(0) { construct(); } @@ -63,17 +102,29 @@ connect(normalModeState, SIGNAL(exited()),SLOT(normalModeExited())); initialState->addTransition(new HsMenuModeTransition( - mMenuView, NormalHsMenuMode, normalModeState)); + mMenuMode, NormalHsMenuMode, normalModeState)); initialState->addTransition(new HsMenuModeTransition( - mMenuView, AddHsMenuMode, addModeState)); + mMenuMode, AddHsMenuMode, addModeState)); const QString parentName = parent() != 0 ? parent()->objectName() : QString(""); setObjectName(parentName + "/allcollectionsstate"); connect(this, SIGNAL(entered()),SLOT(stateEntered())); connect(this, SIGNAL(exited()),SLOT(stateExited())); + + mSecondarySoftkeyAction = new HbAction(Hb::BackNaviAction, this); + + mMenuView.view()->setNavigationAction( + mSecondarySoftkeyAction); + + connect(mSecondarySoftkeyAction, SIGNAL(triggered()), + SIGNAL(toAppLibraryState())); + mAllCollectionsModel = HsMenuService::getAllCollectionsModel( mSortAttribute); + + mMenuView.setModel(mAllCollectionsModel); + HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::construct"); } @@ -83,18 +134,20 @@ void HsAllCollectionsState::setMenuOptions() { HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::setMenuOptions"); - HbMenu *const options = new HbMenu(); - options->addAction(hbTrId("txt_applib_opt_task_switcher"), - this, - SLOT(openTaskSwitcher())); - options->addAction(hbTrId("txt_applib_opt_new_collection"), - this, SLOT(createNewCollection())); + + QScopedPointer viewOptions(new HbMenu); - HbMenu *const sortMenu = options->addMenu( + viewOptions->addAction(hbTrId("txt_applib_opt_task_switcher"), + this, + SLOT(openTaskSwitcher())); + viewOptions->addAction(hbTrId("txt_applib_opt_new_collection"), + this, SLOT(createNewCollection())); + + HbMenu *const sortMenu = viewOptions->addMenu( hbTrId("txt_applib_opt_sort_by")); //Grouped options are exclusive by default. - QActionGroup *sortGroup = new QActionGroup(options); + QActionGroup *sortGroup = new QActionGroup(viewOptions.data()); sortGroup->addAction(sortMenu->addAction( hbTrId("txt_applib_opt_sub_custom"), this, SLOT(customMenuAction()))); @@ -106,10 +159,9 @@ this, SLOT(descendingMenuAction()))); if (mSortAttribute == CustomHsSortAttribute) { - options->addAction(hbTrId("txt_applib_opt_arrange"), - this, SLOT(createArrangeCollection())); + viewOptions->addAction(hbTrId("txt_applib_opt_arrange"), + this, SLOT(createArrangeCollection())); } - options->setParent(this); foreach(QAction *action, sortMenu->actions()) { action->setCheckable(true); @@ -128,16 +180,17 @@ break; } - mMenuView.view()->setMenu(options); - + mMenuView.view()->setMenu(viewOptions.take()); HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::setMenuOptions"); } + /*! Destructor. */ HsAllCollectionsState::~HsAllCollectionsState() { + mMenuView.setModel(NULL); delete mAllCollectionsModel; } @@ -146,21 +199,24 @@ */ void HsAllCollectionsState::scrollToBeginning() { - mBookmark = mAllCollectionsModel->index(0); + + mMenuView.listView()->scrollTo( + mAllCollectionsModel->index(0), HbAbstractItemView::PositionAtTop); } /*! Slot invoked when a state is entered. */ + + void HsAllCollectionsState::stateEntered() { qDebug("AllCollectionsState::stateEntered()"); HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::stateEntered"); - mMenuView.setModel(mAllCollectionsModel); - mMenuView.scrollTo(mBookmark, HbAbstractItemView::PositionAtTop); + mMenuView.activate(); - HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::stateEntered"); + HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::stateExited"); } /*! @@ -170,9 +226,11 @@ { setMenuOptions(); - connect(&mMenuView, SIGNAL(activated(QModelIndex)), + connect(&mMenuView, + SIGNAL(activated(QModelIndex)), SLOT(listItemActivated(QModelIndex))); - connect(&mMenuView, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), + connect(&mMenuView, + SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), SLOT(listItemLongPressed(HbAbstractViewItem *, QPointF))); } @@ -189,9 +247,11 @@ */ void HsAllCollectionsState::addModeEntered() { - connect(&mMenuView, SIGNAL(activated(QModelIndex)), + connect(&mMenuView, + SIGNAL(activated(QModelIndex)), SLOT(addActivated(QModelIndex))); - connect(&mMenuView, SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), + connect(&mMenuView, + SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), SLOT(addLongPressed(HbAbstractViewItem *, QPointF))); } @@ -206,7 +266,10 @@ mMenuView.disconnect(this); - mBookmark = mMenuView.firstVisibleItemIndex(); + mMenuView.inactivate(); + + if (mContextMenu) + mContextMenu->close(); HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::stateExited"); qDebug("AllCollectionsState::stateExited()"); @@ -250,9 +313,8 @@ { const int itemId = index.data(CaItemModel::IdRole).toInt(); machine()->postEvent( - HsMenuEventFactory::createAddToHomeScreenEvent(itemId)); - machine()->postEvent( - HsMenuEventFactory::createOpenHomeScreenEvent()); + HsMenuEventFactory::createAddToHomeScreenEvent( + itemId, mMenuMode.getHsMenuMode())); } /*! @@ -267,9 +329,8 @@ Q_UNUSED(coords); const int itemId = item->modelIndex().data(CaItemModel::IdRole).toInt(); machine()->postEvent( - HsMenuEventFactory::createAddToHomeScreenEvent(itemId)); - machine()->postEvent( - HsMenuEventFactory::createOpenHomeScreenEvent()); + HsMenuEventFactory::createAddToHomeScreenEvent(itemId, + mMenuMode.getHsMenuMode())); } /*! @@ -285,11 +346,13 @@ const int itemId = item->modelIndex().data(CaItemModel::IdRole).toInt(); - HbMenu *menu = new HbMenu(); + + mContextMenu = new HbMenu; // create context menu - HbAction *addShortcutAction = menu->addAction(hbTrId( + HbAction *addShortcutAction = mContextMenu->addAction(hbTrId( "txt_applib_menu_add_to_home_screen")); + addShortcutAction->setData(AddToHomeScreenContextAction); HbAction *renameAction = NULL; HbAction *deleteAction = NULL; @@ -297,29 +360,50 @@ EntryFlags> (); if ((flags & RemovableEntryFlag)) { - renameAction = menu->addAction( + renameAction = mContextMenu->addAction( hbTrId("txt_common_menu_rename_item")); - deleteAction = menu->addAction(hbTrId("txt_common_menu_delete")); + renameAction->setData(RenameContextAction); + deleteAction = mContextMenu->addAction(hbTrId("txt_common_menu_delete")); + deleteAction->setData(DeleteContextAction); } - // choose proper action - if (HbAction *selectedAction = menu->exec(coords)) { + mContextModelIndex = item->modelIndex(); + mContextMenu->setPreferredPos(coords); + mContextMenu->setAttribute(Qt::WA_DeleteOnClose); + mContextMenu->open(this, SLOT(contextMenuAction(HbAction*))); + + HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::listItemLongPressed"); +} - if (selectedAction == addShortcutAction) { +/*! + Handles context menu actions + */ +void HsAllCollectionsState::contextMenuAction(HbAction *action) +{ + HsContextAction command = + static_cast(action->data().toInt()); + + const int itemId = mContextModelIndex.data(CaItemModel::IdRole).toInt(); + + switch (command) { + case AddToHomeScreenContextAction: machine()->postEvent( - HsMenuEventFactory::createAddToHomeScreenEvent(itemId)); - } else if (renameAction && selectedAction == renameAction) { + HsMenuEventFactory::createAddToHomeScreenEvent( + itemId, mMenuMode.getHsMenuMode())); + break; + case RenameContextAction: machine()->postEvent( HsMenuEventFactory::createRenameCollectionEvent(itemId)); - } else if (deleteAction && selectedAction == deleteAction) { - machine()->postEvent( + break; + case DeleteContextAction: + machine()->postEvent( HsMenuEventFactory::createDeleteCollectionEvent(itemId)); - } - - mMenuView.setSearchPanelVisible(false); + break; + default: + break; } - delete menu; - HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::listItemLongPressed"); + + mMenuView.setSearchPanelVisible(false); } /*! @@ -337,8 +421,16 @@ void HsAllCollectionsState::createArrangeCollection() { // Arrange collection via the Arrange view - QModelIndex idx = mMenuView.firstVisibleItemIndex(); - int topItemId = idx.data(CaItemModel::IdRole).toInt(); + int topItemId(0); + + const QList array = + mMenuView.listView()->visibleItems(); + + if (array.count() >= 1) { + QModelIndex idx = array[0]->modelIndex(); + topItemId = idx.data(CaItemModel::IdRole).toInt(); + } + machine()->postEvent( HsMenuEventFactory::createArrangeCollectionEvent(topItemId)); }