38 NmUiEngine &uiEngine, |
38 NmUiEngine &uiEngine, |
39 NmMailboxListModel &mailboxListModel, |
39 NmMailboxListModel &mailboxListModel, |
40 NmMessageListModel &messageListModel, |
40 NmMessageListModel &messageListModel, |
41 HbDocumentLoader *documentLoader, |
41 HbDocumentLoader *documentLoader, |
42 QGraphicsItem *parent) |
42 QGraphicsItem *parent) |
43 : NmBaseView(startParam, parent), |
43 : NmBaseView(startParam, application, parent), |
44 mApplication(application), |
44 mApplication(application), |
45 mMessageListWidget(NULL), |
45 mMessageListWidget(NULL), |
46 mUiEngine(uiEngine), |
46 mUiEngine(uiEngine), |
47 mMailboxListModel(mailboxListModel), |
47 mMailboxListModel(mailboxListModel), |
48 mMessageListModel(messageListModel), |
48 mMessageListModel(messageListModel), |
237 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline)); |
263 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline)); |
238 } |
264 } |
239 } |
265 } |
240 } |
266 } |
241 |
267 |
|
268 // In each refresh, e.g. in folder change the UI signals |
|
269 // lower layer about the folder that has been opened. |
|
270 if (mStartParam){ |
|
271 mUiEngine.updateActiveFolder(mailboxId, mStartParam->folderId()); |
|
272 } |
|
273 |
|
274 // Set item model to message list widget |
242 if (mMessageListWidget) { |
275 if (mMessageListWidget) { |
243 mMessageListWidget->setModel(static_cast<QStandardItemModel*>(&mMessageListModel)); |
276 mMessageListWidget->setModel(static_cast<QStandardItemModel*>(&mMessageListModel)); |
244 QObject::connect(&mMessageListModel, SIGNAL(rowsInserted(const QModelIndex&,int,int)), |
277 QObject::connect(&mMessageListModel, SIGNAL(rowsInserted(const QModelIndex&,int,int)), |
245 this, SLOT(itemsAdded(const QModelIndex&,int,int))); |
278 this, SLOT(itemsAdded(const QModelIndex&,int,int))); |
246 QObject::connect(&mMessageListModel, SIGNAL(rowsRemoved(const QModelIndex&,int,int)), |
279 QObject::connect(&mMessageListModel, SIGNAL(rowsRemoved(const QModelIndex&,int,int)), |
252 showNoMessagesText(); |
285 showNoMessagesText(); |
253 } |
286 } |
254 } |
287 } |
255 } |
288 } |
256 |
289 |
|
290 /*! |
|
291 Sync state event handling |
|
292 */ |
257 void NmMessageListView::handleSyncStateEvent(NmSyncState syncState, const NmId & mailboxId) |
293 void NmMessageListView::handleSyncStateEvent(NmSyncState syncState, const NmId & mailboxId) |
258 { |
294 { |
259 if (mSyncIcon && mailboxId == mMessageListModel.currentMailboxId()) { |
295 if (mSyncIcon && mailboxId == mMessageListModel.currentMailboxId()) { |
260 if (syncState == Synchronizing) { |
296 if (syncState == Synchronizing) { |
261 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconSynching)); |
297 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconSynching)); |
|
298 // before first sync inbox id might be zero |
|
299 if (mStartParam->folderId() == 0) { |
|
300 // after sync inbox id should be updated to correct value |
|
301 NmId folderId = mUiEngine.standardFolderId( |
|
302 mStartParam->mailboxId(), |
|
303 NmFolderInbox); |
|
304 mStartParam->setFolderId(folderId); |
|
305 } |
262 } |
306 } |
263 else { |
307 else { |
264 if (mUiEngine.connectionState(mailboxId) == Connected) { |
308 if (mUiEngine.connectionState(mailboxId) == Connected) { |
265 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOnline)); |
309 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOnline)); |
266 } |
310 } |
289 /*! |
333 /*! |
290 folder selection handling within current mailbox |
334 folder selection handling within current mailbox |
291 */ |
335 */ |
292 void NmMessageListView::folderSelected(NmId mailbox, NmId folder) |
336 void NmMessageListView::folderSelected(NmId mailbox, NmId folder) |
293 { |
337 { |
294 // Reloas view contents with new startparams |
338 // Reload view contents with new startparams if mailbox or folder |
295 if (mStartParam){ |
339 // id is different than current values. |
296 NmUiStartParam* startParam = new NmUiStartParam(NmUiViewMessageList,mailbox,folder); |
340 if (mStartParam && (mStartParam->mailboxId()!=mailbox||mStartParam->folderId()!=folder)){ |
297 // Hide message lis for redraw |
341 // Create start params |
298 mMessageListWidget->hide(); |
342 NmUiStartParam* startParam = new NmUiStartParam(NmUiViewMessageList,mailbox,folder); |
|
343 // Store active folder type |
|
344 mCurrentFolderType = mUiEngine.folderTypeById(startParam->mailboxId(),startParam->folderId()); |
299 // Reload view, ownership of the startparams is passed and old startparams |
345 // Reload view, ownership of the startparams is passed and old startparams |
300 // are deleted within reloadViewContents function |
346 // are deleted within reloadViewContents function |
301 reloadViewContents(startParam); |
347 reloadViewContents(startParam); |
302 //Set folder text to status bar |
348 //Set folder text to status bar |
303 setFolderName(); |
349 setFolderName(); |
304 // Store active folder type |
|
305 mCurrentFolderType = NmFolderInbox; |
|
306 } |
350 } |
307 } |
351 } |
308 |
352 |
309 |
353 |
310 /*! |
354 /*! |
311 Long keypress handling |
355 Long keypress handling |
312 */ |
356 */ |
313 void NmMessageListView::showItemContextMenu(HbAbstractViewItem *listViewItem, const QPointF &coords) |
357 void NmMessageListView::showItemContextMenu(HbAbstractViewItem *listViewItem, const QPointF &coords) |
314 { |
358 { |
315 // Store long press item for later use with response |
359 if (listViewItem) { |
316 mLongPressedItem = mMessageListModel.data( |
360 // Store long press item for later use with response |
317 listViewItem->modelIndex(), Qt::DisplayRole).value<NmMessageListModelItem*>(); |
361 mLongPressedItem = mMessageListModel.data( |
318 if (mItemContextMenu && mLongPressedItem && mLongPressedItem->itemType() == |
362 listViewItem->modelIndex(), Qt::DisplayRole).value<NmMessageListModelItem*>(); |
319 NmMessageListModelItem::NmMessageItemMessage) { |
363 if (mItemContextMenu && mLongPressedItem && mLongPressedItem->itemType() == |
320 |
364 NmMessageListModelItem::NmMessageItemMessage) { |
321 // Clear previous items from context menu |
365 |
322 mItemContextMenu->clearActions(); |
366 // Clear previous items from context menu |
323 NmUiExtensionManager &extMngr = mApplication.extManager(); |
367 mItemContextMenu->clearActions(); |
324 QList<NmAction*> list; |
368 NmUiExtensionManager &extMngr = mApplication.extManager(); |
325 // Fetch items from extension based on item |
369 QList<NmAction*> list; |
326 NmMessageEnvelope *envelope = mLongPressedItem->envelopePtr(); |
370 // Fetch items from extension based on item |
327 if (envelope){ |
371 NmMessageEnvelope *envelope = mLongPressedItem->envelopePtr(); |
328 NmActionRequest request(this, NmActionContextMenu, NmActionContextViewMessageList, |
372 if (envelope){ |
329 NmActionContextDataMessage, mStartParam->mailboxId(), mStartParam->folderId(), |
373 NmActionRequest request(this, NmActionContextMenu, NmActionContextViewMessageList, |
330 envelope->messageId(),QVariant::fromValue(envelope)); |
374 NmActionContextDataMessage, mStartParam->mailboxId(), mStartParam->folderId(), |
331 extMngr.getActions(request, list); |
375 envelope->messageId(),QVariant::fromValue(envelope)); |
332 } |
376 extMngr.getActions(request, list); |
333 else{ |
377 for (int i=0;i<list.count();i++) { |
334 NmActionRequest request(this, NmActionContextMenu, NmActionContextViewMessageList, |
378 mItemContextMenu->addAction(list[i]); |
335 NmActionContextDataMessage, mStartParam->mailboxId(), mStartParam->folderId(), |
379 } |
336 envelope->messageId()); |
380 mItemContextMenu->setPreferredPos(coords); |
337 extMngr.getActions(request, list); |
381 mItemContextMenu->open(); |
338 } |
382 } |
339 for (int i=0;i<list.count();i++) { |
|
340 mItemContextMenu->addAction(list[i]); |
|
341 } |
|
342 mItemContextMenu->setPreferredPos(coords); |
|
343 mItemContextMenu->open(this, SLOT(contextButton(NmActionResponse&))); |
|
344 } |
|
345 } |
|
346 |
|
347 /*! |
|
348 Slot. Signaled when menu option is selected |
|
349 */ |
|
350 void NmMessageListView::contextButton(NmActionResponse &result) |
|
351 { |
|
352 // Handle context menu commands here |
|
353 if (result.menuType()==NmActionContextMenu){ |
|
354 switch (result.responseCommand()){ |
|
355 case NmActionResponseCommandOpen:{ |
|
356 if (mLongPressedItem){ |
|
357 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageViewer, |
|
358 mStartParam->mailboxId(), mStartParam->folderId(), |
|
359 mLongPressedItem->envelope().messageId()); |
|
360 mApplication.enterNmUiView(startParam); |
|
361 mLongPressedItem=NULL; |
|
362 } |
|
363 } |
|
364 break; |
|
365 //temporary solution.. |
|
366 case NmActionResponseCommandForward:{ |
|
367 if (mLongPressedItem){ |
|
368 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageEditor, |
|
369 mStartParam->mailboxId(), mStartParam->folderId(), |
|
370 mLongPressedItem->envelope().messageId()); |
|
371 mApplication.enterNmUiView(startParam); |
|
372 mLongPressedItem=NULL; |
|
373 } |
|
374 } |
|
375 break; |
|
376 default: |
|
377 break; |
|
378 } |
383 } |
379 } |
384 } |
380 } |
385 } |
381 |
386 |
382 /*! |
387 /*! |
469 case NmActionResponseCommandUpdateMailboxName: { |
475 case NmActionResponseCommandUpdateMailboxName: { |
470 setMailboxName(); |
476 setMailboxName(); |
471 break; |
477 break; |
472 } |
478 } |
473 case NmActionResponseCommandMailboxDeleted: { |
479 case NmActionResponseCommandMailboxDeleted: { |
474 mApplication.popView(); |
480 mApplication.prepareForPopView(); |
475 break; |
481 break; |
476 } |
482 } |
477 case NmActionResponseCommandSwitchFolder: { |
483 case NmActionResponseCommandSwitchFolder: { |
478 folderSelected(actionResponse.mailboxId(), actionResponse.folderId()); |
484 folderSelected(actionResponse.mailboxId(), actionResponse.folderId()); |
479 break; |
485 break; |
480 } |
486 } |
|
487 case NmActionResponseCommandSettings: { |
|
488 mSettingsLaunched = true; |
|
489 break; |
|
490 } |
481 default: { |
491 default: { |
482 break; |
492 break; |
483 } |
493 } |
484 } |
494 } |
485 } |
495 } |
|
496 |
|
497 // Handle context menu commands here |
|
498 else if (actionResponse.menuType()==NmActionContextMenu){ |
|
499 switch (actionResponse.responseCommand()){ |
|
500 case NmActionResponseCommandOpen:{ |
|
501 if (mLongPressedItem){ |
|
502 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageViewer, |
|
503 mStartParam->mailboxId(), mStartParam->folderId(), |
|
504 mLongPressedItem->envelope().messageId()); |
|
505 mApplication.enterNmUiView(startParam); |
|
506 mLongPressedItem=NULL; |
|
507 } |
|
508 } |
|
509 break; |
|
510 default: |
|
511 break; |
|
512 } |
|
513 } |
|
514 |
486 // Handle toolbar commands here |
515 // Handle toolbar commands here |
487 else if ( actionResponse.menuType() == NmActionToolbar ) { |
516 else if ( actionResponse.menuType() == NmActionToolbar ) { |
488 if ( actionResponse.responseCommand() == NmActionResponseCommandNewMail ) { |
517 if ( actionResponse.responseCommand() == NmActionResponseCommandNewMail ) { |
489 // Check that given start response has mailbox and folder id's |
518 // Check that given start response has mailbox and folder id's |
490 if (actionResponse.mailboxId()!=0){ |
519 if (actionResponse.mailboxId()!=0){ |