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 /*! |