112 NMLOG("nmailui: List object loading failed"); |
111 NMLOG("nmailui: List object loading failed"); |
113 } |
112 } |
114 mNoMessagesLabel = qobject_cast<HbLabel *> |
113 mNoMessagesLabel = qobject_cast<HbLabel *> |
115 (mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_NO_MESSAGES)); |
114 (mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_NO_MESSAGES)); |
116 if (mNoMessagesLabel) { |
115 if (mNoMessagesLabel) { |
117 mNoMessagesLabel->setAlignment(Qt::AlignCenter); |
|
118 mNoMessagesLabel->setFontSpec(HbFontSpec(HbFontSpec::Primary)); |
|
119 mNoMessagesLabel->hide(); |
116 mNoMessagesLabel->hide(); |
120 mNoMessagesLabel->setPlainText(hbTrId("txt_mail_dblist_no_messages")); |
|
121 } |
117 } |
122 else{ |
118 else{ |
123 NMLOG("nmailui: (no messages) object loading failed"); |
119 NMLOG("nmailui: (no messages) object loading failed"); |
124 } |
120 } |
125 |
121 |
|
122 // Create folder label and set inbox text for it |
126 mFolderLabel = qobject_cast<HbLabel *>(mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_FOLDER_LABEL)); |
123 mFolderLabel = qobject_cast<HbLabel *>(mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_FOLDER_LABEL)); |
127 if (mFolderLabel) { |
124 |
128 mFolderLabel->setPlainText(hbTrId("txt_mail_subhead_inbox")); |
|
129 } |
|
130 |
|
131 mSyncIcon = qobject_cast<HbLabel *>(mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_SYNC_ICON)); |
125 mSyncIcon = qobject_cast<HbLabel *>(mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_SYNC_ICON)); |
132 if (mSyncIcon) { |
126 if (mSyncIcon) { |
133 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline)); |
127 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline)); |
134 } |
128 } |
135 |
129 |
136 // Connect options menu about to show to create options menu function |
130 // Connect options menu about to show to create options menu function |
137 QObject::connect(menu(), SIGNAL(aboutToShow()), |
131 QObject::connect(menu(), SIGNAL(aboutToShow()), |
138 this, SLOT(createOptionsMenu())); |
132 this, SLOT(createOptionsMenu())); |
139 |
|
140 QObject::connect(&mUiEngine, SIGNAL(syncStateEvent(NmSyncState, const NmId &)), |
133 QObject::connect(&mUiEngine, SIGNAL(syncStateEvent(NmSyncState, const NmId &)), |
141 this, SLOT(handleSyncStateEvent(NmSyncState, const NmId &))); |
134 this, SLOT(handleSyncStateEvent(NmSyncState, const NmId &))); |
142 |
|
143 QObject::connect(&mUiEngine, SIGNAL(connectionEvent(NmConnectState, const NmId &)), |
135 QObject::connect(&mUiEngine, SIGNAL(connectionEvent(NmConnectState, const NmId &)), |
144 this, SLOT(handleConnectionEvent(NmConnectState, const NmId &))); |
136 this, SLOT(handleConnectionEvent(NmConnectState, const NmId &))); |
145 |
137 |
146 // Menu needs one dummy item so that aboutToShow signal is emitted. |
138 // Menu needs one dummy item so that aboutToShow signal is emitted. |
147 NmAction *dummy = new NmAction(0); |
139 NmAction *dummy = new NmAction(0); |
148 menu()->addAction(dummy); |
140 menu()->addAction(dummy); |
149 } |
141 } |
150 else { |
142 else { |
151 NMLOG("nmailui: Resource loading failed"); |
143 NMLOG("nmailui: Resource loading failed"); |
152 } |
144 } |
153 |
145 } |
154 //create toolbar |
146 |
155 createToolBar(); |
147 /*! |
|
148 Lazy loading when view layout has been loaded |
|
149 */ |
|
150 void NmMessageListView::viewReady() |
|
151 { |
|
152 if (!mViewReady){ |
|
153 // Set mailbox name to title pane |
|
154 setMailboxName(); |
|
155 //create toolbar |
|
156 createToolBar(); |
|
157 // Refresh list |
|
158 QMetaObject::invokeMethod(this, "refreshList", Qt::QueuedConnection); |
|
159 mViewReady=true; |
|
160 } |
156 } |
161 } |
157 |
162 |
158 /*! |
163 /*! |
159 initTreeView |
164 initTreeView |
160 */ |
165 */ |
229 else { |
236 else { |
230 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline)); |
237 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline)); |
231 } |
238 } |
232 } |
239 } |
233 } |
240 } |
234 |
241 |
235 if (mMessageListWidget) { |
242 if (mMessageListWidget) { |
236 mMessageListWidget->setModel(static_cast<QStandardItemModel*>(&mMessageListModel)); |
243 mMessageListWidget->setModel(static_cast<QStandardItemModel*>(&mMessageListModel)); |
237 QObject::connect(&mMessageListModel, SIGNAL(rowsInserted(const QModelIndex&,int,int)), |
244 QObject::connect(&mMessageListModel, SIGNAL(rowsInserted(const QModelIndex&,int,int)), |
238 this, SLOT(itemsAdded(const QModelIndex&,int,int))); |
245 this, SLOT(itemsAdded(const QModelIndex&,int,int))); |
239 QObject::connect(&mMessageListModel, SIGNAL(rowsRemoved(const QModelIndex&,int,int)), |
246 QObject::connect(&mMessageListModel, SIGNAL(rowsRemoved(const QModelIndex&,int,int)), |
240 this, SLOT(itemsRemoved())); |
247 this, SLOT(itemsRemoved())); |
241 QObject::connect(&mMessageListModel, SIGNAL(setNewParam(NmUiStartParam*)), |
248 QObject::connect(&mMessageListModel, SIGNAL(setNewParam(NmUiStartParam*)), |
242 this, SLOT(reloadViewContents(NmUiStartParam*))); |
249 this, SLOT(reloadViewContents(NmUiStartParam*))); |
243 |
250 |
244 if (mMessageListModel.rowCount()==0){ |
251 if (mMessageListModel.rowCount()==0){ |
245 // Single shot timer to display text smoothly after layout has been constructed |
252 showNoMessagesText(); |
246 QTimer::singleShot(nmNoMessagesDelay, this, SLOT(showNoMessagesText())); |
|
247 } |
253 } |
248 } |
254 } |
249 } |
255 } |
250 |
256 |
251 void NmMessageListView::handleSyncStateEvent(NmSyncState syncState, const NmId & mailboxId) |
257 void NmMessageListView::handleSyncStateEvent(NmSyncState syncState, const NmId & mailboxId) |
295 // Fetch items from extension based on item |
325 // Fetch items from extension based on item |
296 NmMessageEnvelope *envelope = mLongPressedItem->envelopePtr(); |
326 NmMessageEnvelope *envelope = mLongPressedItem->envelopePtr(); |
297 if (envelope){ |
327 if (envelope){ |
298 NmActionRequest request(this, NmActionContextMenu, NmActionContextViewMessageList, |
328 NmActionRequest request(this, NmActionContextMenu, NmActionContextViewMessageList, |
299 NmActionContextDataMessage, mStartParam->mailboxId(), mStartParam->folderId(), |
329 NmActionContextDataMessage, mStartParam->mailboxId(), mStartParam->folderId(), |
300 envelope->id(),QVariant::fromValue(envelope)); |
330 envelope->messageId(),QVariant::fromValue(envelope)); |
301 extMngr.getActions(request, list); |
331 extMngr.getActions(request, list); |
302 } |
332 } |
303 else{ |
333 else{ |
304 NmActionRequest request(this, NmActionContextMenu, NmActionContextViewMessageList, |
334 NmActionRequest request(this, NmActionContextMenu, NmActionContextViewMessageList, |
305 NmActionContextDataMessage, mStartParam->mailboxId(), mStartParam->folderId(), |
335 NmActionContextDataMessage, mStartParam->mailboxId(), mStartParam->folderId(), |
306 envelope->id()); |
336 envelope->messageId()); |
307 extMngr.getActions(request, list); |
337 extMngr.getActions(request, list); |
308 } |
338 } |
309 for (int i=0;i<list.count();i++) { |
339 for (int i=0;i<list.count();i++) { |
310 mItemContextMenu->addAction(list[i]); |
340 mItemContextMenu->addAction(list[i]); |
311 } |
341 } |
312 mItemContextMenu->exec(coords); |
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 } |
313 } |
379 } |
314 } |
380 } |
315 |
381 |
316 /*! |
382 /*! |
317 Item activation handling. Expand/collapse for title dividers |
383 Item activation handling. Expand/collapse for title dividers |
318 opening for mail items |
384 opening for mail items |
319 */ |
385 */ |
320 |
|
321 void NmMessageListView::itemActivated(const QModelIndex &index) |
386 void NmMessageListView::itemActivated(const QModelIndex &index) |
322 { |
387 { |
|
388 mActivatedIndex = index; |
|
389 QMetaObject::invokeMethod(this, "handleSelection", Qt::QueuedConnection); |
|
390 } |
|
391 |
|
392 /*! |
|
393 Item activation handling. Expand/collapse for title dividers |
|
394 opening for mail items |
|
395 */ |
|
396 void NmMessageListView::handleSelection() |
|
397 { |
323 // Do expand/collapse for title divider items |
398 // Do expand/collapse for title divider items |
324 NmMessageListModelItem* modelItem = mMessageListModel.data( |
399 NmMessageListModelItem* modelItem = mMessageListModel.data( |
325 index, Qt::DisplayRole).value<NmMessageListModelItem*>(); |
400 mActivatedIndex, Qt::DisplayRole).value<NmMessageListModelItem*>(); |
326 if (modelItem && modelItem->itemType()== |
401 if (modelItem && modelItem->itemType()== |
327 NmMessageListModelItem::NmMessageItemTitleDivider) { |
402 NmMessageListModelItem::NmMessageItemTitleDivider) { |
328 if (!mMessageListWidget->isExpanded(index)) { |
403 if (!mMessageListWidget->isExpanded(mActivatedIndex)) { |
329 mMessageListWidget->setExpanded(index, true); |
404 mMessageListWidget->setExpanded(mActivatedIndex, true); |
330 modelItem->setExpanded(true); |
405 modelItem->setExpanded(true); |
331 } |
406 } |
332 else { |
407 else { |
333 mMessageListWidget->setExpanded(index, false); |
408 mMessageListWidget->setExpanded(mActivatedIndex, false); |
334 modelItem->setExpanded(false); |
409 modelItem->setExpanded(false); |
335 } |
410 } |
336 } |
411 } |
337 if (modelItem && modelItem->itemType() == NmMessageListModelItem::NmMessageItemMessage) |
412 if (modelItem && modelItem->itemType() == NmMessageListModelItem::NmMessageItemMessage) |
338 { |
413 { |
339 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageViewer, |
414 NmFolderType folderType = mUiEngine.folderTypeById(mStartParam->mailboxId(), |
340 mStartParam->mailboxId(), mStartParam->folderId(), |
415 mStartParam->folderId()); |
341 modelItem->envelope().id()); |
416 if (folderType==NmFolderDrafts){ |
342 mApplication.enterNmUiView(startParam); |
417 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageEditor, |
343 } |
418 mStartParam->mailboxId(), mStartParam->folderId(), |
344 } |
419 modelItem->envelope().messageId(),NmUiEditorFromDrafts); |
|
420 mApplication.enterNmUiView(startParam); |
|
421 } |
|
422 else if (folderType!=NmFolderOutbox){ |
|
423 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageViewer, |
|
424 mStartParam->mailboxId(), mStartParam->folderId(), |
|
425 modelItem->envelope().messageId()); |
|
426 mApplication.enterNmUiView(startParam); |
|
427 } |
|
428 } |
|
429 } |
|
430 |
345 |
431 |
346 |
432 |
347 /*! |
433 /*! |
348 createOptionsMenu. Functions asks menu commands from extension |
434 createOptionsMenu. Functions asks menu commands from extension |
349 to be added to options menu. |
435 to be added to options menu. |
386 } |
472 } |
387 case NmActionResponseCommandMailboxDeleted: { |
473 case NmActionResponseCommandMailboxDeleted: { |
388 mApplication.popView(); |
474 mApplication.popView(); |
389 break; |
475 break; |
390 } |
476 } |
|
477 case NmActionResponseCommandSwitchFolder: { |
|
478 folderSelected(actionResponse.mailboxId(), actionResponse.folderId()); |
|
479 break; |
|
480 } |
391 default: { |
481 default: { |
392 break; |
482 break; |
393 } |
483 } |
394 } |
|
395 } |
|
396 |
|
397 // Handle context menu commands here |
|
398 else if (actionResponse.menuType()==NmActionContextMenu){ |
|
399 switch (actionResponse.responseCommand()){ |
|
400 case NmActionResponseCommandOpen:{ |
|
401 if (mLongPressedItem){ |
|
402 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageViewer, |
|
403 mStartParam->mailboxId(), mStartParam->folderId(), |
|
404 mLongPressedItem->envelope().id()); |
|
405 mApplication.enterNmUiView(startParam); |
|
406 mLongPressedItem=NULL; |
|
407 } |
|
408 } |
|
409 break; |
|
410 //temporary solution.. |
|
411 case NmActionResponseCommandForward:{ |
|
412 if (mLongPressedItem){ |
|
413 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageEditor, |
|
414 mStartParam->mailboxId(), mStartParam->folderId(), |
|
415 mLongPressedItem->envelope().id()); |
|
416 mApplication.enterNmUiView(startParam); |
|
417 mLongPressedItem=NULL; |
|
418 } |
|
419 } |
|
420 break; |
|
421 default: |
|
422 break; |
|
423 } |
484 } |
424 } |
485 } |
425 // Handle toolbar commands here |
486 // Handle toolbar commands here |
426 else if ( actionResponse.menuType() == NmActionToolbar ) { |
487 else if ( actionResponse.menuType() == NmActionToolbar ) { |
427 if ( actionResponse.responseCommand() == NmActionResponseCommandNewMail ) { |
488 if ( actionResponse.responseCommand() == NmActionResponseCommandNewMail ) { |