190 } |
139 } |
191 |
140 |
192 /*! |
141 /*! |
193 Slot invoked when a state is entered. |
142 Slot invoked when a state is entered. |
194 */ |
143 */ |
195 |
|
196 |
|
197 void HsCollectionState::stateEntered() |
144 void HsCollectionState::stateEntered() |
198 { |
145 { |
199 HSMENUTEST_FUNC_ENTRY("HsCollectionState::stateEntered"); |
146 HSMENUTEST_FUNC_ENTRY("HsCollectionState::stateEntered"); |
200 |
147 HsBaseViewState::stateEntered(); |
201 mMainWindow.setCurrentView(mMenuView); |
148 makeConnect(); |
202 mMenuView.activate(); |
149 if (!mModel) { |
203 |
150 mModel = |
204 if (!mCollectionModel) { |
|
205 mCollectionModel = |
|
206 HsMenuService::getCollectionModel( |
151 HsMenuService::getCollectionModel( |
207 mCollectionId, mSortAttribute, mCollectionType); |
152 mCollectionId, mSortAttribute, mCollectionType); |
208 } |
153 } |
209 |
154 |
210 EntryFlags flags = |
155 EntryFlags flags = |
211 mCollectionModel->root().data(CaItemModel::FlagsRole).value< |
156 mModel->root().data(CaItemModel::FlagsRole).value< |
212 EntryFlags> (); |
157 EntryFlags> (); |
213 |
158 |
214 if (mCollectionModel->rowCount() == 0){ |
159 if (mModel->rowCount() == 0){ |
215 if (flags & RemovableEntryFlag){ |
160 if (flags & RemovableEntryFlag){ |
216 mMenuView.setContext(HsCollectionContext,HsButtonContext); |
161 mMenuView->setContext(HsCollectionContext,HsButtonContext); |
217 } else { |
162 } else { |
218 mMenuView.setContext(HsCollectionContext,HsEmptyLabelContext); |
163 mMenuView->setContext(HsCollectionContext,HsEmptyLabelContext); |
219 } |
164 } |
220 mMenuView.disableSearch(true); |
165 mMenuView->disableSearch(true); |
221 } else { |
166 } else { |
222 mMenuView.setContext(HsCollectionContext,HsItemViewContext); |
167 mMenuView->setContext(HsCollectionContext,HsItemViewContext); |
223 mMenuView.disableSearch(false); |
168 mMenuView->disableSearch(false); |
224 } |
169 } |
225 |
170 |
226 connect(mCollectionModel, SIGNAL(modelReset()), SLOT(updateLabel())); |
171 connect(mModel, SIGNAL(modelReset()), SLOT(updateLabel())); |
227 connect(mCollectionModel, SIGNAL(empty(bool)),this, |
172 connect(mModel, SIGNAL(empty(bool)),this, |
228 SLOT(handleEmptyChange(bool))); |
173 SLOT(handleEmptyChange(bool))); |
229 connect(mCollectionModel, SIGNAL(empty(bool)),this, |
174 connect(mModel, SIGNAL(empty(bool)),this, |
230 SLOT(lockSearchButton(bool))); |
175 SLOT(lockSearchButton(bool))); |
231 |
176 |
232 mMenuView.setModel(mCollectionModel); |
177 mMenuView->setModel(mModel); |
233 |
178 |
234 mMenuView.listView()->scrollTo( |
179 mMenuView->listView()->scrollTo( |
235 mCollectionModel->index(0), HbAbstractItemView::PositionAtTop); |
180 mModel->index(0), HbAbstractItemView::PositionAtTop); |
236 |
181 |
237 mMenuView.viewLabel()->setHeading( |
182 mMenuView->viewLabel()->setHeading( |
238 mCollectionModel->root().data(Qt::DisplayRole).toString()); |
183 mModel->root().data(Qt::DisplayRole).toString()); |
239 |
184 setMenuOptions(); |
240 if (!mOptions) { |
185 |
241 mOptions = new HbMenu(); |
186 HSMENUTEST_FUNC_EXIT("HsCollectionState::stateEntered"); |
242 mOptions->addAction(hbTrId("txt_applib_opt_task_switcher"), |
187 } |
243 this, |
188 |
|
189 /*! |
|
190 Creates and installs menu options for the view |
|
191 */ |
|
192 void HsCollectionState::setMenuOptions() |
|
193 { |
|
194 HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::setMenuOptions"); |
|
195 |
|
196 EntryFlags flags = |
|
197 mModel->root().data(CaItemModel::FlagsRole).value<EntryFlags> (); |
|
198 |
|
199 QScopedPointer<HbMenu> viewOptions(new HbMenu); |
|
200 |
|
201 viewOptions->addAction(hbTrId("txt_applib_opt_task_switcher"), |
|
202 static_cast<HsBaseViewState*>(this), |
244 SLOT(openTaskSwitcher())); |
203 SLOT(openTaskSwitcher())); |
245 |
204 |
246 if (flags & RemovableEntryFlag) { |
205 if (flags & RemovableEntryFlag) { |
247 mOptions->addAction(hbTrId("txt_applib_opt_add_content"), this, |
206 viewOptions->addAction(hbTrId("txt_applib_opt_add_content"), this, |
248 SLOT(addAppsAction())); |
207 SLOT(addAppsAction())); |
|
208 } |
|
209 |
|
210 viewOptions->addAction(hbTrId("txt_applib_opt_add_to_home_screen"), |
|
211 this, SLOT(addCollectionShortcutToHomeScreenAction())); |
|
212 |
|
213 if (flags & RemovableEntryFlag) { |
|
214 if (mModel->rowCount() > 0) { |
|
215 viewOptions->addAction( |
|
216 hbTrId("txt_applib_opt_arrange"), |
|
217 this, |
|
218 SLOT(createArrangeCollection())); |
249 } |
219 } |
250 |
220 viewOptions->addAction( |
251 mOptions->addAction(hbTrId("txt_applib_opt_add_to_home_screen"), |
221 hbTrId("txt_common_opt_rename_item"), |
252 this, SLOT(addCollectionShortcutToHomeScreenAction())); |
222 this, |
253 |
223 SLOT(renameAction())); |
254 if (flags & RemovableEntryFlag) { |
224 viewOptions->addAction( |
255 mOptions->addAction( |
225 hbTrId("txt_common_opt_delete"), |
256 hbTrId("txt_common_opt_rename_item"), |
226 this, |
|
227 SLOT(deleteAction())); |
|
228 } |
|
229 if (mCollectionType == collectionDownloadedTypeName()) { |
|
230 HbMenu *sortMenu = viewOptions->addMenu( |
|
231 hbTrId("txt_applib_opt_sort_by")); |
|
232 //Grouped options are exclusive by default. |
|
233 QActionGroup *sortGroup = new QActionGroup(viewOptions.data()); |
|
234 sortGroup->addAction( |
|
235 sortMenu->addAction( |
|
236 hbTrId("txt_applib_opt_sort_by_sub_latest_on_top"), |
257 this, |
237 this, |
258 SLOT(renameAction())); |
238 SLOT(latestOnTopMenuAction()))); |
259 mOptions->addAction( |
239 sortGroup->addAction( |
260 hbTrId("txt_common_opt_delete"), |
240 sortMenu->addAction( |
|
241 hbTrId("txt_applib_opt_sort_by_sub_oldest_on_top"), |
261 this, |
242 this, |
262 SLOT(deleteAction())); |
243 SLOT(oldestOnTopMenuAction()))); |
|
244 foreach(QAction *action, sortMenu->actions()) { |
|
245 action->setCheckable(true); |
263 } |
246 } |
264 if (mCollectionType == collectionDownloadedTypeName()) { |
247 static const int defaultSortingPosition = 0; |
265 HbMenu *sortMenu = mOptions->addMenu( |
248 sortGroup->actions().at(defaultSortingPosition)->setChecked(true); |
266 hbTrId("txt_applib_opt_sort_by")); |
249 } |
267 //Grouped options are exclusive by default. |
250 mMenuView->view()->setMenu(viewOptions.take()); |
268 QActionGroup *sortGroup = new QActionGroup(mOptions); |
251 HSMENUTEST_FUNC_EXIT("HsAllCollectionsState::setMenuOptions"); |
269 sortGroup->addAction( |
|
270 sortMenu->addAction( |
|
271 hbTrId("txt_applib_opt_sort_by_sub_latest_on_top"), |
|
272 this, |
|
273 SLOT(latestOnTopMenuAction()))); |
|
274 sortGroup->addAction( |
|
275 sortMenu->addAction( |
|
276 hbTrId("txt_applib_opt_sort_by_sub_oldest_on_top"), |
|
277 this, |
|
278 SLOT(oldestOnTopMenuAction()))); |
|
279 foreach(QAction *action, sortMenu->actions()) { |
|
280 action->setCheckable(true); |
|
281 } |
|
282 static const int defaultSortingPosition = 0; |
|
283 sortGroup->actions().at(defaultSortingPosition)->setChecked(true); |
|
284 } |
|
285 |
|
286 mOptions->setParent(this); |
|
287 mMenuView.view()->setMenu(mOptions); |
|
288 } |
|
289 HSMENUTEST_FUNC_EXIT("HsCollectionState::stateEntered"); |
|
290 } |
252 } |
291 |
253 |
292 /*! |
254 /*! |
293 Slot invoked when a state is exited. |
255 Slot invoked when a state is exited. |
294 */ |
256 */ |
295 void HsCollectionState::stateExited() |
257 void HsCollectionState::stateExited() |
296 { |
258 { |
297 HSMENUTEST_FUNC_ENTRY("HsCollectionState::stateExited"); |
259 HSMENUTEST_FUNC_ENTRY("HsCollectionState::stateExited"); |
298 |
260 makeDisconnect(); |
299 mMenuView.inactivate(); |
261 mMenuView->disableSearch(false); |
300 mMenuView.setSearchPanelVisible(false); |
262 disconnect(mModel, SIGNAL(empty(bool)),this, |
301 mMenuView.disableSearch(false); |
|
302 disconnect(mCollectionModel, SIGNAL(empty(bool)),this, |
|
303 SLOT(handleEmptyChange(bool))); |
263 SLOT(handleEmptyChange(bool))); |
304 |
264 |
305 disconnect(mCollectionModel, SIGNAL(empty(bool)),this, |
265 disconnect(mModel, SIGNAL(empty(bool)),this, |
306 SLOT(lockSearchButton(bool))); |
266 SLOT(lockSearchButton(bool))); |
307 |
267 |
308 disconnect(mCollectionModel, SIGNAL(modelReset()), |
268 disconnect(mModel, SIGNAL(modelReset()), |
309 this, SLOT(updateLabel())); |
269 this, SLOT(updateLabel())); |
310 delete mCollectionModel; |
270 delete mModel; |
311 mCollectionModel = NULL; |
271 mModel = NULL; |
312 mOptions->close(); |
|
313 delete mOptions; |
|
314 mOptions = NULL; |
|
315 if (mContextMenu) |
|
316 mContextMenu->close(); |
|
317 this->mSortAttribute = NoHsSortAttribute; |
272 this->mSortAttribute = NoHsSortAttribute; |
318 |
273 |
319 HsBaseViewState::stateExited(); |
274 HsBaseViewState::stateExited(); |
320 |
275 |
321 HSMENUTEST_FUNC_EXIT("HsCollectionState::stateExited"); |
276 HSMENUTEST_FUNC_EXIT("HsCollectionState::stateExited"); |
322 qDebug("CollectionState::stateExited()"); |
277 qDebug("CollectionState::stateExited()"); |
323 } |
278 } |
324 |
279 |
325 /*! |
280 /*! |
326 Perform all signal connections. |
281 Perform all signal connections. |
327 */ |
282 */ |
328 void HsCollectionState::makeConnect() |
283 void HsCollectionState::makeConnect() |
329 { |
284 { |
330 connect(mSecondarySoftkeyAction, SIGNAL(triggered()), |
285 connect(mBackKeyAction, SIGNAL(triggered()), |
331 SLOT(backSteppingAction())); |
286 static_cast<HsBaseViewState*>(this), SLOT(openAppLibrary())); |
332 connect(&mMenuView, |
287 connect(mMenuView.data(), |
333 SIGNAL(activated(QModelIndex)), |
288 SIGNAL(activated(QModelIndex)), |
334 SLOT(listItemActivated(QModelIndex))); |
289 static_cast<HsBaseViewState*>(this), |
335 connect(&mMenuView, |
290 SLOT(launchItem(QModelIndex))); |
|
291 connect(mMenuView.data(), |
|
292 SIGNAL(activated(QModelIndex)), |
|
293 mMenuView.data(), |
|
294 SLOT(hideSearchPanel())); |
|
295 connect(mMenuView.data(), |
336 SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), |
296 SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), |
337 SLOT(listItemLongPressed(HbAbstractViewItem *, QPointF))); |
297 static_cast<HsBaseViewState*>(this), |
338 connect(mMenuView.collectionButton(), |
298 SLOT(showContextMenu(HbAbstractViewItem *, QPointF))); |
|
299 connect(mMenuView->collectionButton(), |
339 SIGNAL(toggled(bool)), this, SLOT(addAppsAction(bool))); |
300 SIGNAL(toggled(bool)), this, SLOT(addAppsAction(bool))); |
340 } |
301 } |
341 |
302 |
342 /*! |
303 /*! |
343 Perform all signal disconnections. |
304 Perform all signal disconnections. |
344 */ |
305 */ |
345 void HsCollectionState::makeDisconnect() |
306 void HsCollectionState::makeDisconnect() |
346 { |
307 { |
347 disconnect(mMenuView.collectionButton(), |
308 disconnect(mMenuView->collectionButton(), |
348 SIGNAL(toggled(bool)), this, SLOT(addAppsAction(bool))); |
309 SIGNAL(toggled(bool)), this, SLOT(addAppsAction(bool))); |
349 |
310 |
350 disconnect(mSecondarySoftkeyAction, SIGNAL(triggered()), |
311 disconnect(mBackKeyAction, SIGNAL(triggered()), |
351 this, SLOT(backSteppingAction())); |
312 static_cast<HsBaseViewState*>(this), SLOT(openAppLibrary())); |
352 |
313 |
353 disconnect(&mMenuView, |
314 disconnect(mMenuView.data(), |
354 SIGNAL(activated(QModelIndex)), |
315 SIGNAL(activated(QModelIndex)), |
355 this, SLOT(listItemActivated(QModelIndex))); |
316 static_cast<HsBaseViewState*>(this), |
356 |
317 SLOT(launchItem(QModelIndex))); |
357 disconnect(&mMenuView, |
318 disconnect(mMenuView.data(), |
|
319 SIGNAL(activated(QModelIndex)), |
|
320 mMenuView.data(), |
|
321 SLOT(hideSearchPanel())); |
|
322 disconnect(mMenuView.data(), |
358 SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), |
323 SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), |
359 this, SLOT(listItemLongPressed(HbAbstractViewItem *, QPointF))); |
324 static_cast<HsBaseViewState*>(this), |
360 } |
325 SLOT(showContextMenu(HbAbstractViewItem *, QPointF))); |
361 |
|
362 /*! |
|
363 Open task switcher. |
|
364 \retval true if operation is successful. |
|
365 */ |
|
366 bool HsCollectionState::openTaskSwitcher() |
|
367 { |
|
368 return HsMenuService::launchTaskSwitcher(); |
|
369 } |
|
370 |
|
371 /*! |
|
372 Slot connected to List widget. |
|
373 \param index Model index of the activated item. |
|
374 */ |
|
375 void HsCollectionState::listItemActivated(const QModelIndex &index) |
|
376 { |
|
377 HSMENUTEST_FUNC_ENTRY("HsCollectionState::listItemActivated"); |
|
378 |
|
379 QSharedPointer<const CaEntry> entry = mCollectionModel->entry(index); |
|
380 |
|
381 if (entry->entryTypeName() == widgetTypeName()) { |
|
382 EntryFlags flags = index.data(CaItemModel::FlagsRole).value< |
|
383 EntryFlags> (); |
|
384 if (!(flags & UninstallEntryFlag)) { |
|
385 machine()->postEvent( |
|
386 HsMenuEventFactory::createPreviewHSWidgetEvent( |
|
387 entry->id(), entry->entryTypeName(), entry->attribute( |
|
388 widgetUriAttributeName()), entry->attribute( |
|
389 widgetLibraryAttributeName()))); |
|
390 |
|
391 const int itemId = index.data(CaItemModel::IdRole).toInt(); |
|
392 HsMenuService::touch(itemId); |
|
393 } |
|
394 } else { |
|
395 QVariant data = mCollectionModel->data(index, CaItemModel::IdRole); |
|
396 int errCode = HsMenuService::executeAction(data.toInt()); |
|
397 if (errCode != 0) { |
|
398 createApplicationLaunchFailMessage(errCode,index.data(CaItemModel::IdRole).toInt()); |
|
399 } |
|
400 } |
|
401 |
|
402 mMenuView.setSearchPanelVisible(false); |
|
403 HSMENUTEST_FUNC_EXIT("HsCollectionState::listItemActivated"); |
|
404 } |
|
405 |
|
406 /*! |
|
407 Handles long-item-pressed event in all apps view by showing context menu |
|
408 \param item the event pertains to |
|
409 \param coords press point coordinates. |
|
410 \retval void |
|
411 */ |
|
412 void HsCollectionState::listItemLongPressed(HbAbstractViewItem *item, |
|
413 const QPointF &coords) |
|
414 { |
|
415 HSMENUTEST_FUNC_ENTRY("HsCollectionState::listItemLongPressed"); |
|
416 |
|
417 EntryFlags flags = item->modelIndex().data(CaItemModel::FlagsRole).value< |
|
418 EntryFlags> (); |
|
419 |
|
420 if (!(flags & UninstallEntryFlag)) { |
|
421 // create context menu |
|
422 mContextMenu = new HbMenu(); |
|
423 |
|
424 HbAction *addShortcutAction = mContextMenu->addAction(hbTrId( |
|
425 "txt_applib_menu_add_to_home_screen")); |
|
426 addShortcutAction->setData(AddToHomeScreenContextAction); |
|
427 HbAction *addToCollection = mContextMenu->addAction(hbTrId( |
|
428 "txt_applib_menu_add_to_collection")); |
|
429 addToCollection->setData(AddToCollectionContextAction); |
|
430 HbAction *removeAction(NULL); |
|
431 HbAction *uninstallAction(NULL); |
|
432 HbAction *appSettingsAction(NULL); |
|
433 HbAction *appDetailsAction(NULL); |
|
434 // we do not add remove option in locked collection |
|
435 // check conditions and hide irrelevant menu items |
|
436 EntryFlags rootFlags = |
|
437 mCollectionModel->root().data(CaItemModel::FlagsRole).value< |
|
438 EntryFlags> (); |
|
439 |
|
440 if (rootFlags & RemovableEntryFlag) { |
|
441 removeAction = mContextMenu->addAction( |
|
442 hbTrId("txt_applib_menu_remove_from_collection")); |
|
443 removeAction->setData(RemoveFromCollectionContextAction); |
|
444 } |
|
445 |
|
446 if ((flags & RemovableEntryFlag)) { |
|
447 uninstallAction = mContextMenu->addAction(hbTrId("txt_common_menu_delete")); |
|
448 uninstallAction->setData(UninstallContextAction); |
|
449 } |
|
450 QSharedPointer<const CaEntry> entry = mCollectionModel->entry(item->modelIndex()); |
|
451 |
|
452 if (!(entry->attribute(appSettingsPlugin()).isEmpty())) { |
|
453 appSettingsAction = mContextMenu->addAction(hbTrId( |
|
454 "txt_common_menu_settings")); |
|
455 appSettingsAction->setData(AppSettingContextAction); |
|
456 } |
|
457 |
|
458 if (!(entry->attribute(componentIdAttributeName()).isEmpty()) && |
|
459 (flags & RemovableEntryFlag) ) { |
|
460 appDetailsAction = mContextMenu->addAction(hbTrId( |
|
461 "txt_common_menu_details")); |
|
462 appDetailsAction->setData(AppDetailsContextAction); |
|
463 } |
|
464 mContextModelIndex = item->modelIndex(); |
|
465 mContextMenu->setPreferredPos(coords); |
|
466 mContextMenu->setAttribute(Qt::WA_DeleteOnClose); |
|
467 mContextMenu->open(this, SLOT(contextMenuAction(HbAction*))); |
|
468 } |
|
469 |
|
470 HSMENUTEST_FUNC_EXIT("HsCollectionState::listItemLongPressed"); |
|
471 } |
326 } |
472 |
327 |
473 /*! |
328 /*! |
474 Handles context menu actions |
329 Handles context menu actions |
475 */ |
330 */ |
476 void HsCollectionState::contextMenuAction(HbAction *action) |
331 void HsCollectionState::contextMenuAction(HbAction *action) |
477 { |
332 { |
478 HsContextAction command = |
333 HsContextAction command = |
479 static_cast<HsContextAction>(action->data().toInt()); |
334 static_cast<HsContextAction>(action->data().toInt()); |
480 |
335 |
481 const int itemId = mContextModelIndex.data(CaItemModel::IdRole).toInt(); |
336 const int itemId = mContextModelIndex.data(CaItemModel::IdRole).toInt(); |
482 |
337 |
483 switch (command) { |
338 switch (command) { |
484 case AddToHomeScreenContextAction: |
339 case AddToHomeScreenContextAction: |
485 addElementToHomeScreen(mContextModelIndex); |
340 addElementToHomeScreen(mContextModelIndex); |
486 break; |
341 break; |
487 case AddToCollectionContextAction: |
342 case AddToCollectionContextAction: |
488 machine()->postEvent( |
343 machine()->postEvent( |
489 HsMenuEventFactory::createAddAppsFromCallectionViewEvent( |
344 HsMenuEventFactory::createAddAppsFromCollectionViewEvent( |
490 mCollectionId, itemId, mCollectionsSortAttribute)); |
345 mCollectionId, itemId)); |
491 break; |
346 break; |
492 case UninstallContextAction: |
347 case UninstallContextAction: |
493 machine()->postEvent( |
348 machine()->postEvent( |
494 HsMenuEventFactory::createUninstallApplicationEvent( |
349 HsMenuEventFactory::createUninstallApplicationEvent( |
495 itemId)); |
350 itemId)); |
497 case RemoveFromCollectionContextAction: |
352 case RemoveFromCollectionContextAction: |
498 machine()->postEvent( |
353 machine()->postEvent( |
499 HsMenuEventFactory::createRemoveAppFromCollectionEvent( |
354 HsMenuEventFactory::createRemoveAppFromCollectionEvent( |
500 itemId, mCollectionId)); |
355 itemId, mCollectionId)); |
501 break; |
356 break; |
502 case AppSettingContextAction: |
357 case AppSettingContextAction: |
503 machine()->postEvent( |
358 machine()->postEvent( |
504 HsMenuEventFactory::createAppSettingsViewEvent(itemId)); |
359 HsMenuEventFactory::createAppSettingsViewEvent(itemId)); |
505 break; |
360 break; |
506 case AppDetailsContextAction: |
361 case AppDetailsContextAction: |
507 machine()->postEvent( |
362 machine()->postEvent( |
508 HsMenuEventFactory::createAppDetailsViewEvent(itemId)); |
363 HsMenuEventFactory::createAppDetailsViewEvent(itemId)); |
509 break; |
364 break; |
510 default: |
365 default: |
511 break; |
366 break; |
512 } |
367 } |
513 |
368 |
514 mMenuView.setSearchPanelVisible(false); |
369 mMenuView->setSearchPanelVisible(false); |
515 } |
370 } |
516 |
371 |
517 /*! |
372 /*! |
518 Handles button visibility |
373 Handles button visibility |
519 \param empty if true set empty text label or button to add entries to collection |
374 \param empty if true set empty text label or button to add entries to collection. |
520 */ |
375 */ |
521 void HsCollectionState::handleEmptyChange(bool empty) |
376 void HsCollectionState::handleEmptyChange(bool empty) |
522 { |
377 { |
523 EntryFlags flags = |
378 EntryFlags flags = |
524 mCollectionModel->root().data(CaItemModel::FlagsRole).value< |
379 mModel->root().data(CaItemModel::FlagsRole).value< |
525 EntryFlags> (); |
380 EntryFlags> (); |
526 |
381 |
527 if (empty){ |
382 if (empty){ |
528 if (flags & RemovableEntryFlag){ |
383 if (flags & RemovableEntryFlag){ |
529 mMenuView.setContext(HsCollectionContext,HsButtonContext); |
384 mMenuView->setContext(HsCollectionContext,HsButtonContext); |
530 } else { |
385 } else { |
531 mMenuView.setContext(HsCollectionContext,HsEmptyLabelContext); |
386 mMenuView->setContext(HsCollectionContext,HsEmptyLabelContext); |
532 } |
387 } |
533 } else { |
388 } else { |
534 mMenuView.setContext(HsCollectionContext,HsItemViewContext); |
389 mMenuView->setContext(HsCollectionContext,HsItemViewContext); |
535 } |
390 } |
536 } |
391 setMenuOptions(); |
537 |
392 } |
538 |
393 |
539 /*! |
394 |
540 Handles lock serch button |
395 /*! |
541 \param lock if true lock search button |
396 Handles lock search button |
|
397 \param lock if true lock search button. |
542 */ |
398 */ |
543 void HsCollectionState::lockSearchButton(bool lock) |
399 void HsCollectionState::lockSearchButton(bool lock) |
544 { |
400 { |
545 mMenuView.disableSearch(lock); |
401 mMenuView->disableSearch(lock); |
546 } |
402 } |
547 |
403 |
548 |
404 |
549 /*! |
405 /*! |
550 Menu add applications action slot |
406 Menu add applications action slot |
551 \param addApps if true create event for add enties to collection. Parametr use by toggled from HbPushButton |
407 \param addApps if true create event for add enties to collection. |
|
408 Parametr use by toggled from HbPushButton |
552 */ |
409 */ |
553 void HsCollectionState::addAppsAction(bool addApps) |
410 void HsCollectionState::addAppsAction(bool addApps) |
554 { |
411 { |
555 // Add applications |
412 // Add applications |
556 if (addApps) { |
413 if (addApps) { |
557 mMenuView.collectionButton()->setChecked(false); |
414 mMenuView->collectionButton()->setChecked(false); |
558 machine()->postEvent( |
415 machine()->postEvent( |
559 HsMenuEventFactory::createAddAppsFromCallectionViewEvent( |
416 HsMenuEventFactory::createAddAppsFromCollectionViewEvent( |
560 mCollectionId)); |
417 mCollectionId)); |
561 } |
418 } |
562 } |
419 } |
563 |
420 |
564 /*! |
421 /*! |
565 Menu add shortcut action slot |
422 Menu add shortcut action slot |
566 */ |
423 */ |
567 void HsCollectionState::addCollectionShortcutToHomeScreenAction() |
424 void HsCollectionState::addCollectionShortcutToHomeScreenAction() |
568 { |
425 { |
569 machine()->postEvent(HsMenuEventFactory::createAddToHomeScreenEvent( |
426 machine()->postEvent(HsMenuEventFactory::createAddToHomeScreenEvent( |
570 mCollectionId, mMenuMode.getHsMenuMode(), |
427 mCollectionId, mMenuMode->getHsMenuMode(), |
571 mMenuMode.getHsToken())); |
428 mMenuMode->getHsToken())); |
572 } |
429 } |
573 |
430 |
574 /*! |
431 /*! |
575 Menu rename action slot |
432 Menu rename action slot |
576 */ |
433 */ |
588 machine()->postEvent(HsMenuEventFactory::createDeleteCollectionEvent( |
445 machine()->postEvent(HsMenuEventFactory::createDeleteCollectionEvent( |
589 mCollectionId)); |
446 mCollectionId)); |
590 } |
447 } |
591 |
448 |
592 /*! |
449 /*! |
593 Menu softkey back action slot |
|
594 */ |
|
595 void HsCollectionState::backSteppingAction() |
|
596 { |
|
597 machine()->postEvent(HsMenuEventFactory::createOpenAppLibraryEvent()); |
|
598 } |
|
599 |
|
600 /*! |
|
601 Updates label |
450 Updates label |
602 */ |
451 */ |
603 void HsCollectionState::updateLabel() |
452 void HsCollectionState::updateLabel() |
604 { |
453 { |
605 HSMENUTEST_FUNC_ENTRY("HsCollectionState::updateLabel"); |
454 HSMENUTEST_FUNC_ENTRY("HsCollectionState::updateLabel"); |
606 if (mCollectionModel) { |
455 if (mModel) { |
607 mMenuView.viewLabel()->setHeading( |
456 mMenuView->viewLabel()->setHeading( |
608 mCollectionModel->root().data(Qt::DisplayRole).toString()); |
457 mModel->root().data(Qt::DisplayRole).toString()); |
609 } |
458 } |
610 HSMENUTEST_FUNC_EXIT("HsCollectionState::updateLabel"); |
459 HSMENUTEST_FUNC_EXIT("HsCollectionState::updateLabel"); |
611 } |
460 } |
612 |
461 |
613 /*! |
462 /*! |
614 Triggers event so that a state adding to Home Screen is reached |
463 Triggers event so that a state adding to Home Screen is reached |
615 \param index of an item to be added to homescreen |
464 \param index of an item to be added to homescreen. |
616 \retval void |
465 \retval void |
617 */ |
466 */ |
618 void HsCollectionState::addElementToHomeScreen(const QModelIndex &index) |
467 void HsCollectionState::addElementToHomeScreen(const QModelIndex &index) |
619 { |
468 { |
620 QSharedPointer<const CaEntry> entry = mCollectionModel->entry(index); |
469 QSharedPointer<const CaEntry> entry = mModel->entry(index); |
621 |
470 |
622 QMap<QString, QString> attributes = entry->attributes(); |
471 QMap<QString, QString> attributes = entry->attributes(); |
623 |
472 |
624 machine()->postEvent( |
473 machine()->postEvent( |
625 HsMenuEventFactory::createAddToHomeScreenEvent( |
474 HsMenuEventFactory::createAddToHomeScreenEvent( |
626 entry->id(), mMenuMode.getHsMenuMode(), mMenuMode.getHsToken())); |
475 entry->id(), mMenuMode->getHsMenuMode(), mMenuMode->getHsToken())); |
|
476 } |
|
477 |
|
478 /*! |
|
479 Method seting context menu options. |
|
480 */ |
|
481 void HsCollectionState::setContextMenuOptions(HbAbstractViewItem *item, EntryFlags flags) |
|
482 { |
|
483 HbAction *addShortcutAction = mContextMenu->addAction(hbTrId( |
|
484 "txt_applib_menu_add_to_home_screen")); |
|
485 addShortcutAction->setData(AddToHomeScreenContextAction); |
|
486 HbAction *addToCollection = mContextMenu->addAction(hbTrId( |
|
487 "txt_applib_menu_add_to_collection")); |
|
488 addToCollection->setData(AddToCollectionContextAction); |
|
489 HbAction *removeAction(NULL); |
|
490 HbAction *uninstallAction(NULL); |
|
491 HbAction *appSettingsAction(NULL); |
|
492 HbAction *appDetailsAction(NULL); |
|
493 // we do not add remove option in locked collection |
|
494 // check conditions and hide irrelevant menu items |
|
495 EntryFlags rootFlags = |
|
496 mModel->root().data(CaItemModel::FlagsRole).value< |
|
497 EntryFlags> (); |
|
498 |
|
499 if (rootFlags & RemovableEntryFlag) { |
|
500 removeAction = mContextMenu->addAction( |
|
501 hbTrId("txt_applib_menu_remove_from_collection")); |
|
502 removeAction->setData(RemoveFromCollectionContextAction); |
|
503 } |
|
504 |
|
505 if ((flags & RemovableEntryFlag)) { |
|
506 uninstallAction = mContextMenu->addAction(hbTrId("txt_common_menu_delete")); |
|
507 uninstallAction->setData(UninstallContextAction); |
|
508 } |
|
509 QSharedPointer<const CaEntry> entry = mModel->entry(item->modelIndex()); |
|
510 |
|
511 if (!(entry->attribute(appSettingsPlugin()).isEmpty())) { |
|
512 appSettingsAction = mContextMenu->addAction(hbTrId( |
|
513 "txt_common_menu_settings")); |
|
514 appSettingsAction->setData(AppSettingContextAction); |
|
515 } |
|
516 |
|
517 if (!(entry->attribute(componentIdAttributeName()).isEmpty()) && |
|
518 (flags & RemovableEntryFlag) ) { |
|
519 appDetailsAction = mContextMenu->addAction(hbTrId( |
|
520 "txt_common_menu_details")); |
|
521 appDetailsAction->setData(AppDetailsContextAction); |
|
522 } |
627 } |
523 } |
628 |
524 |
629 /*! |
525 /*! |
630 A Slot called when an action for sorting (latest |
526 A Slot called when an action for sorting (latest |
631 on top) is invoked for Downloaded collection. |
527 on top) is invoked for Downloaded collection. |
632 */ |
528 */ |
633 void HsCollectionState::latestOnTopMenuAction() |
529 void HsCollectionState::latestOnTopMenuAction() |
634 { |
530 { |
635 mSortAttribute = LatestOnTopHsSortAttribute; |
531 mSortAttribute = LatestOnTopHsSortAttribute; |
636 mCollectionModel->setSort(mSortAttribute); |
532 mModel->setSort(mSortAttribute); |
637 emit sortOrderChanged(mSortAttribute); |
533 emit sortOrderChanged(mSortAttribute); |
638 } |
534 } |
639 |
535 |
640 /*! |
536 /*! |
641 A Slot called when an action for sorting (oldest |
537 A Slot called when an action for sorting (oldest |
642 on top) is invoked for Downloaded collection. |
538 on top) is invoked for Downloaded collection. |
643 */ |
539 */ |
644 void HsCollectionState::oldestOnTopMenuAction() |
540 void HsCollectionState::oldestOnTopMenuAction() |
645 { |
541 { |
646 mSortAttribute = OldestOnTopHsSortAttribute; |
542 mSortAttribute = OldestOnTopHsSortAttribute; |
647 mCollectionModel->setSort(mSortAttribute); |
543 mModel->setSort(mSortAttribute); |
648 emit sortOrderChanged(mSortAttribute); |
544 emit sortOrderChanged(mSortAttribute); |
649 } |
545 } |
650 |
546 |
651 /*! |
547 /*! |
652 Slot for setting all collections sort order |
548 A Slot called when an arrange operation |
653 \param sortOrder all collections sort order |
549 is invoked for a static collection. |
654 */ |
550 */ |
655 void HsCollectionState::collectionsSortOrder( |
551 void HsCollectionState::createArrangeCollection() |
656 HsSortAttribute sortOrder) |
552 { |
657 { |
553 // Arrange collection via the Arrange view |
658 mCollectionsSortAttribute = sortOrder; |
554 int topItemId(0); |
659 } |
555 |
|
556 const QList<HbAbstractViewItem *> array = |
|
557 mMenuView->listView()->visibleItems(); |
|
558 |
|
559 if (array.count() >= 1) { |
|
560 QModelIndex idx = array[0]->modelIndex(); |
|
561 topItemId = idx.data(CaItemModel::IdRole).toInt(); |
|
562 } |
|
563 |
|
564 machine()->postEvent( |
|
565 HsMenuEventFactory::createArrangeCollectionEvent( |
|
566 topItemId, |
|
567 mCollectionId)); |
|
568 } |