diff -r 2b1b11a301d2 -r 4b195f3bea29 homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallappsstate.cpp --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallappsstate.cpp Tue Jul 06 14:06:53 2010 +0300 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallappsstate.cpp Wed Aug 18 09:40:07 2010 +0300 @@ -15,30 +15,29 @@ * */ -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include #include -#include -#include -#include +#include +#include +#include "hsapp_defs.h" +#include "hsmenueventfactory.h" #include "hsmenuitemmodel.h" -#include "cadefs.h" #include "hsallappsstate.h" -#include "hsaddappstocollectionstate.h" -#include "hsapp_defs.h" #include "hsmenumodewrapper.h" #include "hsmenuviewbuilder.h" -#include "hsmenumodetransition.h" -#include "caentry.h" -#include "caservice.h" #include "hsmainwindow.h" +#include "hsaddmodeproxymodel.h" +#include "hsapplibstateutils.h" /*! \class HsAllAppsState @@ -55,40 +54,24 @@ */ /*! - \var HsAllAppsState::mCollectionsSortAttribute - Collections sort order - */ - -/*! - \var HsAllAppsState::mMenuView - Wrapper for All Applications View. - */ - -/*! - \var HsAllAppsState::mMenuMode - Menu view mode wrapper. - Not Own. - */ - -/*! Constructor. \param menuViewBuilder Menu view builder. - \param menuMode reference to object representing menu mode (add mode on/add mode off). + \param menuMode Menu mode object(add mode on/add mode off). + \param mainWindow Main window wrapper. \param parent Owner. */ HsAllAppsState::HsAllAppsState(HsMenuViewBuilder &menuViewBuilder, HsMenuModeWrapper &menuMode, HsMainWindow &mainWindow, QState *parent) : - HsBaseViewState(parent), mSortAttribute(AscendingNameHsSortAttribute), - mCollectionsSortAttribute(LatestOnTopHsSortAttribute), - mMenuView(menuViewBuilder, HsAllAppsContext), - mMenuMode(menuMode), - mAllAppsModel(0), - mMainWindow(mainWindow), - mContextModelIndex(), mContextMenu(0) + HsBaseViewState(mainWindow, menuMode, parent), + mAddModeProxyModel(0), + mSortAttribute(AscendingNameHsSortAttribute) { + initialize(menuViewBuilder, HsAllAppsContext); construct(); + mAddModeProxyModel = new HsAddModeProxyModel(this); + mAddModeProxyModel->setSourceModel(mModel); } /*! @@ -98,64 +81,46 @@ { 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( - mMenuMode, NormalHsMenuMode, normalModeState)); - initialState->addTransition(new HsMenuModeTransition( - mMenuMode, AddHsMenuMode, addModeState)); + defineTransitions(); const QString parentName = parent() != 0 ? parent()->objectName() : QString(""); setObjectName(parentName + "/allappsstate"); - connect(this, SIGNAL(entered()),SLOT(stateEntered())); - connect(this, SIGNAL(exited()),SLOT(stateExited())); + connect(mBackKeyAction, SIGNAL(triggered()), SIGNAL(toAppLibraryState())); - mSecondarySoftkeyAction = new HbAction(Hb::BackNaviAction, this); - - mMenuView.view()->setNavigationAction( - mSecondarySoftkeyAction); + mModel = HsMenuService::getAllApplicationsModel(mSortAttribute); + mMenuView->setModel(mModel); - connect(mSecondarySoftkeyAction, SIGNAL(triggered()), - SIGNAL(toAppLibraryState())); + mModel->preloadIcons(); - mAllAppsModel = HsMenuService::getAllApplicationsModel(mSortAttribute); - mMenuView.setModel(mAllAppsModel); - - mMenuView.listView()->verticalScrollBar()->setInteractive(true); - HbIndexFeedback *indexFeedback = new HbIndexFeedback(mMenuView.view()); + mMenuView->listView()->verticalScrollBar()->setInteractive(true); + HbIndexFeedback *indexFeedback = new HbIndexFeedback(mMenuView->view()); indexFeedback->setIndexFeedbackPolicy(HbIndexFeedback::IndexFeedbackSingleCharacter); - indexFeedback->setItemView(mMenuView.listView()); + indexFeedback->setItemView(mMenuView->listView()); HSMENUTEST_FUNC_EXIT("HsAllAppsState::construct"); } + /*! Creates and installs menu options for the view */ void HsAllAppsState::setMenuOptions() { HSMENUTEST_FUNC_ENTRY("HsAllAppsState::setMenuOptions"); - QScopedPointer viewOptions(new HbMenu); - viewOptions->addAction(hbTrId("txt_applib_opt_task_switcher"), - this, SLOT(openTaskSwitcher())); - viewOptions->addAction(hbTrId("txt_applib_opt_add_to_collection"), + mViewOptions->clearActions(); + mViewOptions->addAction(hbTrId("txt_applib_opt_task_switcher"), + static_cast(this), SLOT(openTaskSwitcher())); + mViewOptions->addAction(hbTrId("txt_applib_opt_add_to_collection"), this, SLOT(addToCollection())); - viewOptions->addAction(hbTrId("txt_applib_opt_check_software_updates"), - this, SLOT(checkSoftwareUpdates())); + mViewOptions->addAction(hbTrId("txt_applib_opt_check_software_updates"), + static_cast(this), SLOT(checkSoftwareUpdates())); - HbMenu *const sortMenu = viewOptions->addMenu(hbTrId( + HbMenu *const sortMenu = mViewOptions->addMenu(hbTrId( "txt_applib_opt_sort_by")); //Grouped options are exclusive by default. - QActionGroup *sortGroup = new QActionGroup(viewOptions.data()); + QActionGroup *sortGroup = new QActionGroup(this); sortGroup->addAction( sortMenu->addAction(hbTrId("txt_applib_opt_sub_ascending"), @@ -164,7 +129,7 @@ sortMenu->addAction(hbTrId("txt_applib_opt_sub_descending"), this, SLOT(descendingMenuAction()))); - viewOptions->addAction(hbTrId("txt_applib_subtitle_installed"), + mViewOptions->addAction(hbTrId("txt_applib_opt_view_installed_applications"), this, SLOT(openInstalledView())); foreach(QAction *action, sortMenu->actions()) { @@ -184,7 +149,6 @@ if (currentSortingPosition >= 0) { sortGroup->actions().at(currentSortingPosition)->setChecked(true); } - mMenuView.view()->setMenu(viewOptions.take()); HSMENUTEST_FUNC_EXIT("HsAllAppsState::setMenuOptions"); } @@ -195,63 +159,32 @@ HsAllAppsState::~HsAllAppsState() { - mMenuView.setModel(NULL); - delete mAllAppsModel; } -/*! - Scrolls view to first item at top - */ -void HsAllAppsState::scrollToBeginning() -{ - mMenuView.listView()->scrollTo( - mAllAppsModel->index(0), HbAbstractItemView::PositionAtTop); -} /*! - Slot invoked when a state is entered. + Slot invoked when normal mode entered. */ - - -void HsAllAppsState::stateEntered() +void HsAllAppsState::normalModeEntered() { - qDebug("AllAppsState::stateEntered()"); - HSMENUTEST_FUNC_ENTRY("HsAllAppsState::stateEntered"); - - mMainWindow.setCurrentView(mMenuView); - mMenuView.activate(); - - HSMENUTEST_FUNC_EXIT("HsAllAppsState::stateEntered"); + HsBaseViewState::normalModeEntered(); + if (mMenuView->model() != mModel) { + mMenuView->setModel(mModel); + } + connect(mMenuView.data(), + SIGNAL(activated(QModelIndex)), + static_cast(this), SLOT(launchItem(QModelIndex))); } /*! Slot invoked when add mode entered. */ -void HsAllAppsState::normalModeEntered() -{ - setMenuOptions(); - connect(&mMainWindow, SIGNAL(viewIsReady()), - &mMainWindow, SLOT(saveActivity()), - Qt::UniqueConnection); - connect(&mMenuView, - SIGNAL(activated(QModelIndex)), - SLOT(listItemActivated(QModelIndex))); - connect(&mMenuView, - SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), - SLOT(listItemLongPressed(HbAbstractViewItem *, QPointF))); -} - -/*! - Add mode entered. - */ void HsAllAppsState::addModeEntered() { - connect(&mMenuView, - SIGNAL(activated(QModelIndex)), - SLOT(addActivated(QModelIndex))); - connect(&mMenuView, - SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), - SLOT(addLongPressed(HbAbstractViewItem *, QPointF))); + HsBaseViewState::addModeEntered(); + if (mMenuView->model() != mAddModeProxyModel) { + mMenuView->setModel(mAddModeProxyModel); + } } /*! @@ -261,161 +194,31 @@ { HSMENUTEST_FUNC_ENTRY("HsAllAppsState::stateExited"); - disconnect(&mMainWindow, SIGNAL(viewIsReady()), - &mMainWindow, SLOT(saveActivity())); - - mMenuView.setSearchPanelVisible(false); - - mMenuView.disconnect(this); + HsBaseViewState::stateExited(); - mMenuView.view()->setMenu(NULL); - - mMenuView.inactivate(); - - if (mContextMenu) - mContextMenu->close(); - - HsBaseViewState::stateExited(); - HSMENUTEST_FUNC_EXIT("HsAllAppsState::stateExited"); qDebug("AllAppsState::stateExited()"); } /*! - Open task switcher. - \retval true if operation is successful. - */ -bool HsAllAppsState::openTaskSwitcher() -{ - return HsMenuService::launchTaskSwitcher(); -} - -/*! - Check software updates. - \retval 0 if operation is successful. - */ -int HsAllAppsState::checkSoftwareUpdates() -{ - int errCode = HsMenuService::launchSoftwareUpdate(); - if (errCode != 0){ - createApplicationLaunchFailMessage(errCode,0); - } - return errCode; -} - -/*! - Slot connected to List widget in normal mode. - \param index Model index of the activated item. - */ -void HsAllAppsState::listItemActivated(const QModelIndex &index) -{ - HSMENUTEST_FUNC_ENTRY("HsAllAppsState::listItemActivated"); - - QSharedPointer entry = mAllAppsModel->entry(index); - - if (entry->entryTypeName() == widgetTypeName()) { - EntryFlags flags = index.data(CaItemModel::FlagsRole).value< - EntryFlags> (); - if (!(flags & UninstallEntryFlag)) { - 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); - int errCode = HsMenuService::executeAction(data.toInt()); - if (errCode != 0) { - createApplicationLaunchFailMessage(errCode,index.data(CaItemModel::IdRole).toInt()); - } - } - - mMenuView.setSearchPanelVisible(false); - - HSMENUTEST_FUNC_EXIT("HsAllAppsState::listItemActivated"); -} - -/*! Slot connected to List widget in add mode. \param index Model index of the activated item. */ void HsAllAppsState::addActivated(const QModelIndex &index) { + mMenuView->disconnect(this); HSMENUTEST_FUNC_ENTRY("HsAllAppsState::addActivated"); addToHomeScreen(index); HSMENUTEST_FUNC_EXIT("HsAllAppsState::addActivated"); } -/*! - Handles long-item-pressed event in all apps view by showing context menu - \param item View item - \param coords Press point coordinates - */ -void HsAllAppsState::listItemLongPressed(HbAbstractViewItem *item, - const QPointF &coords) -{ - HSMENUTEST_FUNC_ENTRY("HsAllAppsState::listItemLongPressed"); - - EntryFlags flags = item->modelIndex().data( - CaItemModel::FlagsRole).value (); - - if (!(flags & UninstallEntryFlag)) { - // create context menu - mContextMenu = new HbMenu; - - HbAction *addToHomeScreenAction = mContextMenu->addAction( - hbTrId("txt_applib_menu_add_to_home_screen")); - addToHomeScreenAction->setData(AddToHomeScreenContextAction); - - HbAction *addToCollectionAction = mContextMenu->addAction( - hbTrId("txt_applib_menu_add_to_collection")); - addToCollectionAction->setData(AddToCollectionContextAction); - - HbAction *uninstallAction = mContextMenu->addAction( - hbTrId("txt_common_menu_delete")); - uninstallAction->setData(UninstallContextAction); - HbAction *appSettingsAction(NULL); - HbAction *appDetailsAction(NULL); - - // check conditions and hide irrelevant menu items - QSharedPointer entry = mAllAppsModel->entry(item->modelIndex()); - - if (!(entry->attribute(appSettingsPlugin()).isEmpty())) { - appSettingsAction = mContextMenu->addAction( - hbTrId("txt_common_menu_settings")); - appSettingsAction->setData(AppSettingContextAction); - } - if (!(entry->attribute(componentIdAttributeName()).isEmpty()) && - (flags & RemovableEntryFlag) ) { - appDetailsAction = mContextMenu->addAction( - hbTrId("txt_common_menu_details")); - appDetailsAction->setData(AppDetailsContextAction); - } - - if (!(flags & RemovableEntryFlag)) { - uninstallAction->setVisible(false); - } - - mContextModelIndex = item->modelIndex(); - mContextMenu->setPreferredPos(coords); - mContextMenu->setAttribute(Qt::WA_DeleteOnClose); - mContextMenu->open(this, SLOT(contextMenuAction(HbAction*))); - } - - - HSMENUTEST_FUNC_EXIT("HsAllAppsState::listItemLongPressed"); -} /*! Handles context menu actions */ void HsAllAppsState::contextMenuAction(HbAction *action) { - HsContextAction command = + HsContextAction command = static_cast(action->data().toInt()); const int itemId = mContextModelIndex.data(CaItemModel::IdRole).toInt(); @@ -429,25 +232,27 @@ // an existing collection via item specific menu. machine()->postEvent( HsMenuEventFactory::createAddAppsFromApplicationsViewEvent( - mSortAttribute, mCollectionsSortAttribute, itemId)); + mSortAttribute, itemId)); break; case UninstallContextAction: machine()->postEvent( HsMenuEventFactory::createUninstallApplicationEvent(itemId)); break; - case AppSettingContextAction: + case AppSettingContextAction: machine()->postEvent( HsMenuEventFactory::createAppSettingsViewEvent(itemId)); break; - case AppDetailsContextAction: + case AppDetailsContextAction: machine()->postEvent( HsMenuEventFactory::createAppDetailsViewEvent(itemId)); - break; + break; + case OpenContextAction: + launchItem(mContextModelIndex); + break; default: break; } - - mMenuView.setSearchPanelVisible(false); + mMenuView->hideSearchPanel(); } /*! @@ -460,6 +265,7 @@ const QPointF &coords) { Q_UNUSED(coords); + mMenuView->disconnect(this); HSMENUTEST_FUNC_ENTRY("HsAllAppsState::addLongPressed"); addToHomeScreen(item->modelIndex()); HSMENUTEST_FUNC_EXIT("HsAllAppsState::addLongPressed"); @@ -475,7 +281,7 @@ // a new/an existing collection via the All view machine()->postEvent( HsMenuEventFactory::createAddAppsFromApplicationsViewEvent( - mSortAttribute, mCollectionsSortAttribute)); + mSortAttribute)); } /*! @@ -495,50 +301,86 @@ /*! Triggers event so that a state adding to Home Screen is reached - \param index of an item to be added to homescreen + \param index of an item to be added to homescreen. \retval void */ void HsAllAppsState::addToHomeScreen(const QModelIndex &index) { HSMENUTEST_FUNC_ENTRY("HsAllAppsState::addToHomeScreen"); - QSharedPointer entry = mAllAppsModel->entry(index); + QSharedPointer entry = mModel->entry(index); machine()-> postEvent(HsMenuEventFactory::createAddToHomeScreenEvent( - entry->id(), mMenuMode.getHsMenuMode(), - mMenuMode.getHsToken())); + entry->id(), mMenuMode->getHsMenuMode(), + mMenuMode->getHsToken())); HSMENUTEST_FUNC_EXIT("HsAllAppsState::addToHomeScreen"); } /*! + Method seting context menu options. + */ +void HsAllAppsState::setContextMenuOptions(HbAbstractViewItem *item, EntryFlags flags) +{ + HbAction *openAction = mContextMenu->addAction(hbTrId( + "txt_common_menu_open")); + openAction->setData(OpenContextAction); + + HbAction *addToHomeScreenAction = mContextMenu->addAction( + hbTrId("txt_applib_menu_add_to_home_screen")); + addToHomeScreenAction->setData(AddToHomeScreenContextAction); + + HbAction *addToCollectionAction = mContextMenu->addAction( + hbTrId("txt_applib_menu_add_to_collection")); + addToCollectionAction->setData(AddToCollectionContextAction); + + HbAction *uninstallAction = mContextMenu->addAction( + hbTrId("txt_common_menu_delete")); + uninstallAction->setData(UninstallContextAction); + HbAction *appSettingsAction(NULL); + HbAction *appDetailsAction(NULL); + + // check conditions and hide irrelevant menu items + QSharedPointer entry = mModel->entry(item->modelIndex()); + + if (!(entry->attribute(appSettingsPlugin()).isEmpty())) { + appSettingsAction = mContextMenu->addAction( + hbTrId("txt_common_menu_settings")); + appSettingsAction->setData(AppSettingContextAction); + } + if (!(entry->attribute(componentIdAttributeName()).isEmpty()) && + (flags & RemovableEntryFlag) ) { + appDetailsAction = mContextMenu->addAction( + hbTrId("txt_common_menu_details")); + appDetailsAction->setData(AppDetailsContextAction); + } + + if (!(flags & RemovableEntryFlag)) { + uninstallAction->setVisible(false); + } + + addToHomeScreenAction->setVisible( + !HsAppLibStateUtils::isCWRTWidgetOnHomeScreen(entry.data())); +} + +/*! Menu ascending sort action slot. */ void HsAllAppsState::ascendingMenuAction() { HSMENUTEST_FUNC_ENTRY("HsAllAppsState::ascendingMenuAction"); mSortAttribute = AscendingNameHsSortAttribute; - mAllAppsModel->setSort(mSortAttribute); + mModel->setSort(mSortAttribute); HSMENUTEST_FUNC_EXIT("HsAllAppsState::ascendingMenuAction"); } /*! - Sets collections sort order - /param sortOrder sort order. - */ -void HsAllAppsState::collectionsSortOrder( - HsSortAttribute sortOrder) -{ - mCollectionsSortAttribute = sortOrder; -} - -/*! Menu descending sort action slot. */ void HsAllAppsState::descendingMenuAction() { HSMENUTEST_FUNC_ENTRY("HsAllAppsState::descendingMenuAction"); mSortAttribute = DescendingNameHsSortAttribute; - mAllAppsModel->setSort(mSortAttribute); + mModel->setSort(mSortAttribute); HSMENUTEST_FUNC_EXIT("HsAllAppsState::descendingMenuAction"); }