homescreenapp/stateplugins/hsapplibrarystateplugin/src/hscollectionstate.cpp
changeset 85 35368b604b28
parent 77 4b195f3bea29
child 92 6727c5d0afc7
equal deleted inserted replaced
77:4b195f3bea29 85:35368b604b28
    85 HsCollectionState::HsCollectionState(HsMenuViewBuilder &menuViewBuilder,
    85 HsCollectionState::HsCollectionState(HsMenuViewBuilder &menuViewBuilder,
    86                                      HsMenuModeWrapper &menuMode,
    86                                      HsMenuModeWrapper &menuMode,
    87                                      HsMainWindow &mainWindow,
    87                                      HsMainWindow &mainWindow,
    88                                      QState *parent) :
    88                                      QState *parent) :
    89     HsBaseViewState(mainWindow, menuMode, parent),
    89     HsBaseViewState(mainWindow, menuMode, parent),
    90     mSortAttribute(LatestOnTopHsSortAttribute),
    90     mSortAttribute(Hs::LatestOnTopHsSortAttribute),
    91     mCollectionId(-1)
    91     mCollectionId(-1)
    92 {
    92 {
    93     initialize(menuViewBuilder, HsCollectionContext);
    93     initialize(menuViewBuilder, HsCollectionContext);
    94     construct();
    94     construct();
    95 }
    95 }
   129     QState::onEntry(event);
   129     QState::onEntry(event);
   130 
   130 
   131     if (event->type() == HsMenuEvent::eventType()) {
   131     if (event->type() == HsMenuEvent::eventType()) {
   132         HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
   132         HsMenuEvent *menuEvent = static_cast<HsMenuEvent *>(event);
   133         QVariantMap data = menuEvent->data();
   133         QVariantMap data = menuEvent->data();
   134         mCollectionId = data.value(itemIdKey()).toInt();
   134         mCollectionId = data.value(Hs::itemIdKey).toInt();
   135         mCollectionType = data.value(entryTypeNameKey()).toString();
   135         mCollectionType = data.value(Hs::entryTypeNameKey).toString();
   136     }
   136     }
   137 
   137 
   138     HSMENUTEST_FUNC_EXIT("HsCollectionState::onEntry");
   138     HSMENUTEST_FUNC_EXIT("HsCollectionState::onEntry");
   139 }
   139 }
   140 
   140 
   199         mViewOptions->addAction(
   199         mViewOptions->addAction(
   200             hbTrId("txt_common_opt_delete"),
   200             hbTrId("txt_common_opt_delete"),
   201             this,
   201             this,
   202             SLOT(deleteAction()));
   202             SLOT(deleteAction()));
   203     }
   203     }
   204     if (mCollectionType == collectionDownloadedTypeName()) {
   204     if (mCollectionType == Hs::collectionDownloadedTypeName && 
       
   205             mModel->rowCount() > 0) {
   205         HbMenu *sortMenu = mViewOptions->addMenu(
   206         HbMenu *sortMenu = mViewOptions->addMenu(
   206                                hbTrId("txt_applib_opt_sort_by"));
   207                                hbTrId("txt_applib_opt_sort_by"));
   207         //Grouped options are exclusive by default.
   208         //Grouped options are exclusive by default.
   208         QActionGroup *sortGroup = new QActionGroup(this);
   209         QActionGroup *sortGroup = new QActionGroup(this);
   209         sortGroup->addAction(
   210         sortGroup->addAction(
   210             sortMenu->addAction(
   211             sortMenu->addAction(
   211                 hbTrId("txt_applib_opt_sort_by_sub_latest_on_top"),
   212                 hbTrId("txt_applib_opt_sub_latest_on_top"),
   212                 this,
   213                 this,
   213                 SLOT(latestOnTopMenuAction())));
   214                 SLOT(latestOnTopMenuAction())));
   214         sortGroup->addAction(
   215         sortGroup->addAction(
   215             sortMenu->addAction(
   216             sortMenu->addAction(
   216                 hbTrId("txt_applib_opt_sort_by_sub_oldest_on_top"),
   217                 hbTrId("txt_applib_opt_sub_oldest_on_top"),
   217                 this,
   218                 this,
   218                 SLOT(oldestOnTopMenuAction())));
   219                 SLOT(oldestOnTopMenuAction())));
   219         foreach(QAction *action, sortMenu->actions()) {
   220         foreach(QAction *action, sortMenu->actions()) {
   220             action->setCheckable(true);
   221             action->setCheckable(true);
   221         }
   222         }
   235     mMenuView->disableSearch(false);
   236     mMenuView->disableSearch(false);
   236     makeDisconnect();
   237     makeDisconnect();
   237 
   238 
   238     delete mModel;
   239     delete mModel;
   239     mModel = NULL;
   240     mModel = NULL;
   240     this->mSortAttribute = NoHsSortAttribute;
   241     this->mSortAttribute = Hs::NoHsSortAttribute;
   241 
   242 
   242     HsBaseViewState::stateExited();
   243     HsBaseViewState::stateExited();
   243 
   244 
   244     HSMENUTEST_FUNC_EXIT("HsCollectionState::stateExited");
   245     HSMENUTEST_FUNC_EXIT("HsCollectionState::stateExited");
   245     qDebug("CollectionState::stateExited()");
   246     qDebug("CollectionState::stateExited()");
   254             static_cast<HsBaseViewState*>(this), SLOT(openAppLibrary()));
   255             static_cast<HsBaseViewState*>(this), SLOT(openAppLibrary()));
   255     connect(mMenuView.data(),
   256     connect(mMenuView.data(),
   256             SIGNAL(activated(QModelIndex)),
   257             SIGNAL(activated(QModelIndex)),
   257             static_cast<HsBaseViewState*>(this),
   258             static_cast<HsBaseViewState*>(this),
   258             SLOT(launchItem(QModelIndex)));
   259             SLOT(launchItem(QModelIndex)));
   259     connect(mMenuView.data(),
       
   260             SIGNAL(activated(QModelIndex)),
       
   261             mMenuView.data(),
       
   262             SLOT(hideSearchPanel()));
       
   263     connect(mMenuView.data(),
   260     connect(mMenuView.data(),
   264             SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
   261             SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
   265             static_cast<HsBaseViewState*>(this),
   262             static_cast<HsBaseViewState*>(this),
   266             SLOT(showContextMenu(HbAbstractViewItem *, QPointF)));
   263             SLOT(showContextMenu(HbAbstractViewItem *, QPointF)));
   267     connect(mModel, SIGNAL(modelReset()), SLOT(updateLabel()));
   264     connect(mModel, SIGNAL(modelReset()), SLOT(updateLabel()));
   282     disconnect(mMenuView.data(),
   279     disconnect(mMenuView.data(),
   283                SIGNAL(activated(QModelIndex)),
   280                SIGNAL(activated(QModelIndex)),
   284                static_cast<HsBaseViewState*>(this),
   281                static_cast<HsBaseViewState*>(this),
   285                SLOT(launchItem(QModelIndex)));
   282                SLOT(launchItem(QModelIndex)));
   286     disconnect(mMenuView.data(),
   283     disconnect(mMenuView.data(),
   287             SIGNAL(activated(QModelIndex)),
       
   288             mMenuView.data(),
       
   289             SLOT(hideSearchPanel()));
       
   290     disconnect(mMenuView.data(),
       
   291                SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
   284                SIGNAL(longPressed(HbAbstractViewItem *, QPointF)),
   292                static_cast<HsBaseViewState*>(this),
   285                static_cast<HsBaseViewState*>(this),
   293                SLOT(showContextMenu(HbAbstractViewItem *, QPointF)));
   286                SLOT(showContextMenu(HbAbstractViewItem *, QPointF)));
   294     disconnect(mModel, SIGNAL(empty(bool)),this,
   287     disconnect(mModel, SIGNAL(empty(bool)),this,
   295                SLOT(handleEmptyChange(bool)));
   288                SLOT(handleEmptyChange(bool)));
   301                    this, SLOT(updateLabel()));
   294                    this, SLOT(updateLabel()));
   302 }
   295 }
   303 
   296 
   304 /*!
   297 /*!
   305  Handles context menu actions
   298  Handles context menu actions
       
   299  \param action action taken in context menu
   306  */
   300  */
   307 void HsCollectionState::contextMenuAction(HbAction *action)
   301 void HsCollectionState::contextMenuAction(HbAction *action)
   308 {
   302 {
   309     HsContextAction command =
   303     HsBaseViewState::contextMenuAction(action);
   310         static_cast<HsContextAction>(action->data().toInt());
   304     Hs::HsContextAction command =
   311 
   305             static_cast<Hs::HsContextAction>(action->data().toInt());
   312     const int itemId = mContextModelIndex.data(CaItemModel::IdRole).toInt();
   306     if (command == Hs::RemoveFromCollectionContextAction ) {
   313 
   307         const int itemId = mContextModelIndex.data(CaItemModel::IdRole).toInt();
   314     switch (command) {
   308         machine()->postEvent(
   315         case AddToHomeScreenContextAction:
   309             HsMenuEventFactory::createRemoveAppFromCollectionEvent(
   316             addElementToHomeScreen(mContextModelIndex);
   310                 itemId, mCollectionId));
   317             break;
   311     }
   318         case AddToCollectionContextAction:
       
   319             machine()->postEvent(
       
   320                 HsMenuEventFactory::createAddAppsFromCollectionViewEvent(
       
   321                     mCollectionId, itemId));
       
   322             break;
       
   323         case UninstallContextAction:
       
   324             machine()->postEvent(
       
   325                 HsMenuEventFactory::createUninstallApplicationEvent(
       
   326                     itemId));
       
   327             break;
       
   328         case RemoveFromCollectionContextAction:
       
   329             machine()->postEvent(
       
   330                 HsMenuEventFactory::createRemoveAppFromCollectionEvent(
       
   331                     itemId, mCollectionId));
       
   332             break;
       
   333         case AppSettingContextAction:
       
   334             machine()->postEvent(
       
   335                 HsMenuEventFactory::createAppSettingsViewEvent(itemId));
       
   336             break;
       
   337         case AppDetailsContextAction:
       
   338             machine()->postEvent(
       
   339                 HsMenuEventFactory::createAppDetailsViewEvent(itemId));
       
   340             break;
       
   341         case OpenContextAction:
       
   342             launchItem(mContextModelIndex);
       
   343             break;
       
   344         default:
       
   345             break;
       
   346     }
       
   347 
       
   348     mMenuView->hideSearchPanel();
       
   349 }
   312 }
   350 
   313 
   351 /*!
   314 /*!
   352  Handler to be called when model becomes not empty or model becomes empty.
   315  Handler to be called when model becomes not empty or model becomes empty.
   353   \param empty \a true when model becomes empty \a false otherwise.
   316   \param empty \a true when model becomes empty \a false otherwise.
   361 
   324 
   362     if (empty){
   325     if (empty){
   363         if (flags & RemovableEntryFlag){
   326         if (flags & RemovableEntryFlag){
   364             mMenuView->reset(HsButtonContext);
   327             mMenuView->reset(HsButtonContext);
   365             connect(mMenuView->contentButton(),
   328             connect(mMenuView->contentButton(),
   366                     SIGNAL(toggled(bool)), this, SLOT(addAppsAction(bool)),
   329                     SIGNAL(clicked()), this, SLOT(addAppsAction()),
   367                     Qt::UniqueConnection);
   330                     Qt::UniqueConnection);
   368         } else {
   331         } else {
   369             mMenuView->reset(HsEmptyLabelContext);
   332             mMenuView->reset(HsEmptyLabelContext);
   370         }
   333         }
   371 
   334 
   397 /*!
   360 /*!
   398  Menu add applications action slot
   361  Menu add applications action slot
   399    \param addApps if true create event for add enties to collection.
   362    \param addApps if true create event for add enties to collection.
   400    Parametr use by toggled from HbPushButton
   363    Parametr use by toggled from HbPushButton
   401  */
   364  */
   402 void HsCollectionState::addAppsAction(bool addApps)
   365 void HsCollectionState::addAppsAction()
   403 {
   366 {
   404     // Add applications
   367     // Add applications
   405     if (addApps) {
   368     machine()->postEvent(
   406 
   369         HsMenuEventFactory::createAddAppsFromCollectionViewEvent(
   407         if (mMenuView->contentButton()) {
   370             mCollectionId));
   408             mMenuView->contentButton()->setChecked(false);
       
   409         }
       
   410 
       
   411         machine()->postEvent(
       
   412             HsMenuEventFactory::createAddAppsFromCollectionViewEvent(
       
   413                 mCollectionId));
       
   414     }
       
   415 }
   371 }
   416 
   372 
   417 /*!
   373 /*!
   418  Menu add shortcut action slot
   374  Menu add shortcut action slot
   419  */
   375  */
   420 void HsCollectionState::addCollectionShortcutToHomeScreenAction()
   376 void HsCollectionState::addCollectionShortcutToHomeScreenAction()
   421 {
   377 {
   422     machine()->postEvent(HsMenuEventFactory::createAddToHomeScreenEvent(
   378     addToHomeScreen(mCollectionId);
   423                              mCollectionId, mMenuMode->getHsMenuMode(),
       
   424                              mMenuMode->getHsToken()));
       
   425 }
   379 }
   426 
   380 
   427 /*!
   381 /*!
   428  Menu rename action slot
   382  Menu rename action slot
   429  */
   383  */
   454     }
   408     }
   455     HSMENUTEST_FUNC_EXIT("HsCollectionState::updateLabel");
   409     HSMENUTEST_FUNC_EXIT("HsCollectionState::updateLabel");
   456 }
   410 }
   457 
   411 
   458 /*!
   412 /*!
   459   Triggers event so that a state adding to Home Screen is reached
       
   460   \param index of an item to be added to homescreen.
       
   461   \retval void
       
   462  */
       
   463 void HsCollectionState::addElementToHomeScreen(const QModelIndex &index)
       
   464 {
       
   465     QSharedPointer<const CaEntry> entry = mModel->entry(index);
       
   466 
       
   467     QMap<QString, QString> attributes = entry->attributes();
       
   468 
       
   469     machine()->postEvent(
       
   470         HsMenuEventFactory::createAddToHomeScreenEvent(
       
   471             entry->id(), mMenuMode->getHsMenuMode(), mMenuMode->getHsToken()));
       
   472 }
       
   473 
       
   474 /*!
       
   475  Method setting context menu options.
   413  Method setting context menu options.
   476  */
   414  */
   477 void HsCollectionState::setContextMenuOptions(HbAbstractViewItem *item, EntryFlags flags)
   415 void HsCollectionState::setContextMenuOptions(HbAbstractViewItem *item, EntryFlags flags)
   478 {
   416 {
   479     HbAction *openAction = mContextMenu->addAction(hbTrId(
   417     HbAction *openAction = mContextMenu->addAction(hbTrId(
   480         "txt_common_menu_open"));
   418         "txt_common_menu_open"));
   481     openAction->setData(OpenContextAction);
   419     openAction->setData(Hs::OpenAppContextAction);
   482     HbAction *addToHomeScreenAction = mContextMenu->addAction(hbTrId(
   420     HbAction *addToHomeScreenAction = mContextMenu->addAction(hbTrId(
   483         "txt_applib_menu_add_to_home_screen"));
   421         "txt_applib_menu_add_to_home_screen"));
   484     addToHomeScreenAction->setData(AddToHomeScreenContextAction);
   422     addToHomeScreenAction->setData(Hs::AddToHomeScreenContextAction);
   485     HbAction *addToCollection = mContextMenu->addAction(hbTrId(
   423     HbAction *addToCollection = mContextMenu->addAction(hbTrId(
   486         "txt_applib_menu_add_to_collection"));
   424         "txt_applib_menu_add_to_collection"));
   487     addToCollection->setData(AddToCollectionContextAction);
   425     addToCollection->setData(Hs::AddToCollectionFromCollectionViewContextAction);
   488     HbAction *removeAction(NULL);
   426     HbAction *removeAction(NULL);
   489     HbAction *uninstallAction(NULL);
   427     HbAction *uninstallAction(NULL);
   490     HbAction *appSettingsAction(NULL);
   428     HbAction *appSettingsAction(NULL);
   491     HbAction *appDetailsAction(NULL);
   429     HbAction *appDetailsAction(NULL);
   492     // we do not add remove option in locked collection
   430     // we do not add remove option in locked collection
   496         EntryFlags> ();
   434         EntryFlags> ();
   497 
   435 
   498     if (rootFlags & RemovableEntryFlag) {
   436     if (rootFlags & RemovableEntryFlag) {
   499         removeAction = mContextMenu->addAction(
   437         removeAction = mContextMenu->addAction(
   500                            hbTrId("txt_applib_menu_remove_from_collection"));
   438                            hbTrId("txt_applib_menu_remove_from_collection"));
   501         removeAction->setData(RemoveFromCollectionContextAction);
   439         removeAction->setData(Hs::RemoveFromCollectionContextAction);
   502     }
   440     }
   503 
   441 
   504     if ((flags & RemovableEntryFlag)) {
   442     if ((flags & RemovableEntryFlag)) {
   505         uninstallAction = mContextMenu->addAction(hbTrId("txt_common_menu_delete"));
   443         uninstallAction = mContextMenu->addAction(hbTrId("txt_common_menu_delete"));
   506         uninstallAction->setData(UninstallContextAction);
   444         uninstallAction->setData(Hs::UninstallContextAction);
   507     }
   445     }
   508     QSharedPointer<const CaEntry> entry = mModel->entry(item->modelIndex());
   446     QSharedPointer<const CaEntry> entry = mModel->entry(item->modelIndex());
   509 
   447 
   510     if (!(entry->attribute(appSettingsPlugin()).isEmpty())) {
   448     if (!(entry->attribute(Hs::appSettingsPlugin).isEmpty())) {
   511         appSettingsAction = mContextMenu->addAction(hbTrId(
   449         appSettingsAction = mContextMenu->addAction(hbTrId(
   512                                                 "txt_common_menu_settings"));
   450                                                 "txt_common_menu_settings"));
   513         appSettingsAction->setData(AppSettingContextAction);
   451         appSettingsAction->setData(Hs::AppSettingContextAction);
   514     }
   452     }
   515 
   453 
   516     if (!(entry->attribute(componentIdAttributeName()).isEmpty()) &&
   454     if (!(entry->attribute(Hs::componentIdAttributeName).isEmpty()) &&
   517             (flags & RemovableEntryFlag) ) {
   455             (flags & RemovableEntryFlag) ) {
   518         appDetailsAction = mContextMenu->addAction(hbTrId(
   456         appDetailsAction = mContextMenu->addAction(hbTrId(
   519                                                 "txt_common_menu_details"));
   457                                                 "txt_common_menu_details"));
   520         appDetailsAction->setData(AppDetailsContextAction);
   458         appDetailsAction->setData(Hs::AppDetailsContextAction);
   521     }
   459     }
   522     
   460     
   523     addToHomeScreenAction->setVisible(
   461     addToHomeScreenAction->setVisible(
   524         !HsAppLibStateUtils::isCWRTWidgetOnHomeScreen(entry.data()));
   462         !HsAppLibStateUtils::isCWRTWidgetOnHomeScreen(entry.data()));
   525 }
   463 }
   528   A Slot called when an action for sorting (latest
   466   A Slot called when an action for sorting (latest
   529   on top) is invoked for Downloaded collection.
   467   on top) is invoked for Downloaded collection.
   530  */
   468  */
   531 void HsCollectionState::latestOnTopMenuAction()
   469 void HsCollectionState::latestOnTopMenuAction()
   532 {
   470 {
   533     mSortAttribute = LatestOnTopHsSortAttribute;
   471     mSortAttribute = Hs::LatestOnTopHsSortAttribute;
   534     mModel->setSort(mSortAttribute);
   472     mModel->setSort(mSortAttribute);
   535     emit sortOrderChanged(mSortAttribute);
   473     emit sortOrderChanged(mSortAttribute);
   536 }
   474 }
   537 
   475 
   538 /*!
   476 /*!
   539   A Slot called when an action for sorting (oldest
   477   A Slot called when an action for sorting (oldest
   540   on top) is invoked for Downloaded collection.
   478   on top) is invoked for Downloaded collection.
   541  */
   479  */
   542 void HsCollectionState::oldestOnTopMenuAction()
   480 void HsCollectionState::oldestOnTopMenuAction()
   543 {
   481 {
   544     mSortAttribute = OldestOnTopHsSortAttribute;
   482     mSortAttribute = Hs::OldestOnTopHsSortAttribute;
   545     mModel->setSort(mSortAttribute);
   483     mModel->setSort(mSortAttribute);
   546     emit sortOrderChanged(mSortAttribute);
   484     emit sortOrderChanged(mSortAttribute);
   547 }
   485 }
   548 
   486 
   549 /*!
   487 /*!