13 * |
13 * |
14 * Description: Base for menu view states. |
14 * Description: Base for menu view states. |
15 * |
15 * |
16 */ |
16 */ |
17 |
17 |
18 #include <hbmessagebox.h> |
18 #include <QStateMachine> |
|
19 #include <HbMessageBox> |
19 #include <HbParameterLengthLimiter> |
20 #include <HbParameterLengthLimiter> |
20 #include <hbaction.h> |
21 #include <HbAction> |
|
22 #include <HbMenu> |
|
23 #include <HbAbstractViewItem> |
|
24 #include <HbView> |
|
25 #include <HbListView> |
|
26 |
21 #include <canotifier.h> |
27 #include <canotifier.h> |
22 |
28 |
23 #include "hsbaseviewstate.h" |
29 #include "hsbaseviewstate.h" |
|
30 #include "hsmenueventfactory.h" |
|
31 #include "hsmenudialogfactory.h" |
|
32 #include "hsmenuitemmodel.h" |
|
33 #include "hsmenumodetransition.h" |
|
34 #include "hsmainwindow.h" |
|
35 |
24 |
36 |
25 /*! |
37 /*! |
26 Constructor. |
38 Constructor. |
27 */ |
39 \param mainWindow main window wrapper object. |
28 HsBaseViewState::HsBaseViewState( |
40 \param parent Owner. |
|
41 */ |
|
42 HsBaseViewState::HsBaseViewState(HsMainWindow &mainWindow, QState *parent): |
|
43 QState(parent), |
|
44 mNotifier(0), |
|
45 mMessageRelatedItemId(0), |
|
46 mApplicationLaunchFailMessage(0), |
|
47 mModel(0), |
|
48 mContextMenu(0), |
|
49 mContextModelIndex(), |
|
50 mBackKeyAction(0), |
|
51 mMenuView(0), |
|
52 mMenuMode(0), |
|
53 mMainWindow(mainWindow) |
|
54 { |
|
55 mBackKeyAction = new HbAction(Hb::BackNaviAction, this); |
|
56 } |
|
57 |
|
58 /*! |
|
59 Constructor. |
|
60 \param mainWindow main window wrapper object. |
|
61 \param menuMode menu mode object. |
|
62 \param parent Owner. |
|
63 */ |
|
64 HsBaseViewState::HsBaseViewState(HsMainWindow &mainWindow, |
|
65 HsMenuModeWrapper& menuMode, |
29 QState *parent): |
66 QState *parent): |
30 QState(parent), |
67 QState(parent), |
31 mNotifier(0), |
68 mNotifier(0), |
32 mMessageRelatedItemId(0), |
69 mMessageRelatedItemId(0), |
33 mApplicationLaunchFailMessage(0) |
70 mApplicationLaunchFailMessage(0), |
34 { |
71 mModel(0), |
35 construct(); |
72 mContextMenu(0), |
36 } |
73 mContextModelIndex(), |
37 |
74 mBackKeyAction(0), |
38 /*! |
75 mMenuView(0), |
39 Constructs contained objects. |
76 mMenuMode(&menuMode), |
40 */ |
77 mMainWindow(mainWindow) |
41 void HsBaseViewState::construct() |
78 { |
42 { |
79 mBackKeyAction = new HbAction(Hb::BackNaviAction, this); |
|
80 } |
|
81 /*! |
|
82 Initialize contained objects. |
|
83 \param menuViewBuilder object providing widgets for menu view. |
|
84 \param viewContext state context of the view the builder is to provide widgets for. |
|
85 */ |
|
86 void HsBaseViewState::initialize(HsMenuViewBuilder &menuViewBuilder, |
|
87 HsViewContext viewContext) |
|
88 { |
|
89 mMenuView.reset(new HsMenuView(menuViewBuilder, viewContext)); |
|
90 mMenuView->view()->setNavigationAction(mBackKeyAction); |
|
91 |
|
92 connect(this, SIGNAL(entered()),SLOT(stateEntered())); |
|
93 connect(this, SIGNAL(exited()),SLOT(stateExited())); |
43 } |
94 } |
44 |
95 |
45 /*! |
96 /*! |
46 Creates and open application launch fail message. |
97 Creates and open application launch fail message. |
47 \param errorCode eroor code to display. |
98 \param errorCode eroor code to display. |
48 */ |
99 \param itemId id of the launched item. |
49 void HsBaseViewState::createApplicationLaunchFailMessage(int errorCode,int itemId) |
100 */ |
|
101 void HsBaseViewState::createApplicationLaunchFailMessage(int errorCode, |
|
102 int itemId) |
50 { |
103 { |
51 QString message; |
104 QString message; |
52 message.append( |
105 message.append( |
53 HbParameterLengthLimiter("txt_applib_info_launching_the_application_failed").arg( |
106 HbParameterLengthLimiter("txt_applib_info_launching_the_application_failed").arg( |
54 errorCode)); |
107 errorCode)); |
55 |
108 |
56 mMessageRelatedItemId = itemId; |
109 mMessageRelatedItemId = itemId; |
57 |
110 |
58 // create and show message box |
111 // create and show message box |
59 mApplicationLaunchFailMessage = new HbMessageBox(HbMessageBox::MessageTypeInformation); |
112 mApplicationLaunchFailMessage = HsMenuDialogFactory().create(message, HsMenuDialogFactory::Close); |
60 mApplicationLaunchFailMessage->setAttribute(Qt::WA_DeleteOnClose); |
|
61 |
|
62 mApplicationLaunchFailMessage->setText(message); |
|
63 |
|
64 mApplicationLaunchFailMessage->clearActions(); |
|
65 HbAction *mClosemAction = new HbAction(hbTrId("txt_common_button_close"), |
|
66 mApplicationLaunchFailMessage); |
|
67 mApplicationLaunchFailMessage->addAction(mClosemAction); |
|
68 |
113 |
69 mApplicationLaunchFailMessage->open(this, SLOT(applicationLaunchFailMessageFinished(HbAction*))); |
114 mApplicationLaunchFailMessage->open(this, SLOT(applicationLaunchFailMessageFinished(HbAction*))); |
70 |
115 |
71 subscribeForMemoryCardRemove(); |
116 subscribeForMemoryCardRemove(); |
72 } |
117 } |
113 { |
158 { |
114 mApplicationLaunchFailMessage = NULL; |
159 mApplicationLaunchFailMessage = NULL; |
115 cleanUpApplicationLaunchFailMessage(); |
160 cleanUpApplicationLaunchFailMessage(); |
116 } |
161 } |
117 |
162 |
|
163 |
|
164 /*! |
|
165 Slot invoked when a state is entered. |
|
166 */ |
|
167 void HsBaseViewState::stateEntered() |
|
168 { |
|
169 qDebug("HsBaseViewState::stateEntered()"); |
|
170 HSMENUTEST_FUNC_ENTRY("HsBaseViewState::stateEntered"); |
|
171 |
|
172 mMainWindow.setCurrentView(*mMenuView); |
|
173 mMenuView->activate(); |
|
174 |
|
175 HSMENUTEST_FUNC_EXIT("HsBaseViewState::stateEntered"); |
|
176 } |
|
177 |
118 /*! |
178 /*! |
119 Slot invoked when a state is exited. |
179 Slot invoked when a state is exited. |
120 */ |
180 */ |
121 void HsBaseViewState::stateExited() |
181 void HsBaseViewState::stateExited() |
122 { |
182 { |
123 HSMENUTEST_FUNC_ENTRY("HsBaseViewState::stateExited"); |
183 HSMENUTEST_FUNC_ENTRY("HsBaseViewState::stateExited"); |
|
184 mMenuView->setSearchPanelVisible(false); |
|
185 mMenuView->disconnect(this); |
|
186 mMenuView->view()->setMenu(NULL); |
|
187 mMenuView->inactivate(); |
124 cleanUpApplicationLaunchFailMessage(); |
188 cleanUpApplicationLaunchFailMessage(); |
|
189 if (mContextMenu){ |
|
190 mContextMenu->close(); |
|
191 } |
125 HSMENUTEST_FUNC_EXIT("HsBaseViewState::stateExited"); |
192 HSMENUTEST_FUNC_EXIT("HsBaseViewState::stateExited"); |
126 } |
193 } |
127 |
194 |
128 /*! |
195 /*! |
|
196 Add mode entered. |
|
197 */ |
|
198 void HsBaseViewState::addModeEntered() |
|
199 { |
|
200 connect(mMenuView.data(), |
|
201 SIGNAL(activated(QModelIndex)), |
|
202 SLOT(addActivated(QModelIndex))); |
|
203 connect(mMenuView.data(), |
|
204 SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), |
|
205 SLOT(addLongPressed(HbAbstractViewItem *, QPointF))); |
|
206 } |
|
207 |
|
208 /*! |
|
209 Slot invoked when add mode entered. |
|
210 */ |
|
211 void HsBaseViewState::normalModeEntered() |
|
212 { |
|
213 setMenuOptions(); |
|
214 connect(mMenuView.data(), |
|
215 SIGNAL(activated(QModelIndex)), |
|
216 mMenuView.data(), |
|
217 SLOT(hideSearchPanel())); |
|
218 connect(mMenuView.data(), |
|
219 SIGNAL(longPressed(HbAbstractViewItem *, QPointF)), |
|
220 SLOT(showContextMenu(HbAbstractViewItem *, QPointF))); |
|
221 } |
|
222 |
|
223 /*! |
129 Destructor. |
224 Destructor. |
130 */ |
225 */ |
131 HsBaseViewState::~HsBaseViewState() |
226 HsBaseViewState::~HsBaseViewState() |
132 { |
227 { |
133 } |
228 mMenuView->setModel(NULL); |
|
229 delete mModel; |
|
230 } |
|
231 |
|
232 /*! |
|
233 Slot connected to List widget in normal mode. |
|
234 \param index Model index of the activated item. |
|
235 */ |
|
236 void HsBaseViewState::launchItem(const QModelIndex &index) |
|
237 { |
|
238 HSMENUTEST_FUNC_ENTRY("HsBaseViewState::launchItem"); |
|
239 |
|
240 QSharedPointer<const CaEntry> entry = mModel->entry(index); |
|
241 |
|
242 if (entry->entryTypeName() == widgetTypeName()) { |
|
243 EntryFlags flags = index.data(CaItemModel::FlagsRole).value< |
|
244 EntryFlags> (); |
|
245 if (!(flags & UninstallEntryFlag)) { |
|
246 machine()->postEvent( |
|
247 HsMenuEventFactory::createPreviewHSWidgetEvent( |
|
248 entry->id(), entry->entryTypeName(), entry->attribute( |
|
249 widgetUriAttributeName()), entry->attribute( |
|
250 widgetLibraryAttributeName()))); |
|
251 |
|
252 const int itemId = index.data(CaItemModel::IdRole).toInt(); |
|
253 HsMenuService::touch(itemId); |
|
254 } |
|
255 } else { |
|
256 QVariant data = mModel->data(index, CaItemModel::IdRole); |
|
257 int errCode = HsMenuService::executeAction(data.toInt()); |
|
258 if (errCode != 0) { |
|
259 createApplicationLaunchFailMessage(errCode,index.data(CaItemModel::IdRole).toInt()); |
|
260 } |
|
261 } |
|
262 |
|
263 HSMENUTEST_FUNC_EXIT("HsBaseViewState::launchItem"); |
|
264 } |
|
265 |
|
266 /*! |
|
267 Slot connected to List widget in normal mode. |
|
268 \param index Model index of the activated item. |
|
269 */ |
|
270 void HsBaseViewState::openCollection(const QModelIndex &index) |
|
271 { |
|
272 HSMENUTEST_FUNC_ENTRY("HsBaseViewState::openCollection"); |
|
273 QVariant data = mModel->data(index, CaItemModel::IdRole); |
|
274 int id = data.toInt(); |
|
275 QString collectionType = |
|
276 mModel->data(index, CaItemModel::TypeRole).toString(); |
|
277 qDebug("HsBaseViewState::openCollection - MCS ID: %d", |
|
278 data.toInt()); |
|
279 |
|
280 machine()->postEvent(HsMenuEventFactory::createOpenCollectionFromAppLibraryEvent(id, |
|
281 collectionType)); |
|
282 HSMENUTEST_FUNC_EXIT("HsBaseViewState::openCollection"); |
|
283 } |
|
284 |
|
285 /*! |
|
286 Slot connected to List widget in normal mode. |
|
287 \param index Model index of the activated item. |
|
288 */ |
|
289 void HsBaseViewState::showContextMenu(HbAbstractViewItem *item, const QPointF &coords) |
|
290 { |
|
291 |
|
292 HSMENUTEST_FUNC_ENTRY("HsBaseViewState::showContextMenu"); |
|
293 |
|
294 EntryFlags flags = item->modelIndex().data( |
|
295 CaItemModel::FlagsRole).value<EntryFlags> (); |
|
296 |
|
297 if (!(flags & UninstallEntryFlag)) { |
|
298 mContextMenu = new HbMenu; |
|
299 setContextMenuOptions(item,flags); |
|
300 mContextModelIndex = item->modelIndex(); |
|
301 mContextMenu->setPreferredPos(coords); |
|
302 mContextMenu->setAttribute(Qt::WA_DeleteOnClose); |
|
303 mContextMenu->open(this, SLOT(contextMenuAction(HbAction*))); |
|
304 } |
|
305 HSMENUTEST_FUNC_EXIT("HsBaseViewState::showContextMenu"); |
|
306 |
|
307 } |
|
308 |
|
309 /*! |
|
310 Open task switcher. |
|
311 \retval true if operation is successful. |
|
312 */ |
|
313 bool HsBaseViewState::openTaskSwitcher() |
|
314 { |
|
315 return HsMenuService::launchTaskSwitcher(); |
|
316 } |
|
317 |
|
318 /*! |
|
319 Menu softkey back action slot |
|
320 */ |
|
321 void HsBaseViewState::openAppLibrary() |
|
322 { |
|
323 machine()->postEvent(HsMenuEventFactory::createOpenAppLibraryEvent()); |
|
324 } |
|
325 |
|
326 /*! |
|
327 Check software updates. |
|
328 \retval 0 if operation is successful. |
|
329 */ |
|
330 int HsBaseViewState::checkSoftwareUpdates() |
|
331 { |
|
332 int errCode = HsMenuService::launchSoftwareUpdate(); |
|
333 if (errCode != 0){ |
|
334 createApplicationLaunchFailMessage(errCode,0); |
|
335 } |
|
336 return errCode; |
|
337 } |
|
338 /*! |
|
339 Scrolls view to first item at top |
|
340 */ |
|
341 void HsBaseViewState::scrollToBeginning() |
|
342 { |
|
343 mMenuView->listView()->scrollTo( |
|
344 mModel->index(0), HbAbstractItemView::PositionAtTop); |
|
345 } |
|
346 |
|
347 /*! |
|
348 Normal mode exited dummy implementation. |
|
349 */ |
|
350 void HsBaseViewState::normalModeExited() |
|
351 { |
|
352 } |
|
353 |
|
354 /*! |
|
355 Defines transitions |
|
356 */ |
|
357 void HsBaseViewState::defineTransitions() |
|
358 { |
|
359 QState *initialState = new QState(this); |
|
360 setInitialState(initialState); |
|
361 |
|
362 QState *addModeState = new QState(this); |
|
363 connect(addModeState, SIGNAL(entered()),SLOT(addModeEntered())); |
|
364 |
|
365 QState *normalModeState = new QState(this); |
|
366 connect(normalModeState, SIGNAL(entered()),SLOT(normalModeEntered())); |
|
367 connect(normalModeState, SIGNAL(exited()),SLOT(normalModeExited())); |
|
368 |
|
369 initialState->addTransition(new HsMenuModeTransition( |
|
370 *mMenuMode, NormalHsMenuMode, normalModeState)); |
|
371 initialState->addTransition(new HsMenuModeTransition( |
|
372 *mMenuMode, AddHsMenuMode, addModeState)); |
|
373 } |