18 static const char *NMUI_MESSAGE_LIST_VIEW_XML = ":/docml/nmmessagelistview.docml"; |
18 static const char *NMUI_MESSAGE_LIST_VIEW_XML = ":/docml/nmmessagelistview.docml"; |
19 static const char *NMUI_MESSAGE_LIST_VIEW = "NmMessageListView"; |
19 static const char *NMUI_MESSAGE_LIST_VIEW = "NmMessageListView"; |
20 static const char *NMUI_MESSAGE_LIST_TREE_LIST = "MessageTreeList"; |
20 static const char *NMUI_MESSAGE_LIST_TREE_LIST = "MessageTreeList"; |
21 static const char *NMUI_MESSAGE_LIST_NO_MESSAGES = "MessageListNoMessages"; |
21 static const char *NMUI_MESSAGE_LIST_NO_MESSAGES = "MessageListNoMessages"; |
22 static const char *NMUI_MESSAGE_LIST_FOLDER_LABEL = "labelGroupBox"; |
22 static const char *NMUI_MESSAGE_LIST_FOLDER_LABEL = "labelGroupBox"; |
23 // Old sync icon implementation commented out but preserved so it could be put back if need be |
|
24 // static const char *NMUI_MESSAGE_LIST_SYNC_ICON = "syncIcon"; |
|
25 |
23 |
26 #include "nmuiheaders.h" |
24 #include "nmuiheaders.h" |
|
25 |
|
26 const QString syncIndicatorName = "com.nokia.nmail.indicatorplugin.sync/1.0"; |
27 |
27 |
28 /*! |
28 /*! |
29 \class NmMessageListView |
29 \class NmMessageListView |
30 \brief Message list view |
30 \brief Message list view |
31 */ |
31 */ |
93 void NmMessageListView::loadViewLayout() |
88 void NmMessageListView::loadViewLayout() |
94 { |
89 { |
95 NM_FUNCTION; |
90 NM_FUNCTION; |
96 |
91 |
97 // Use document loader to load the view |
92 // Use document loader to load the view |
98 bool ok = false; |
93 bool ok(false); |
99 setObjectName(QString(NMUI_MESSAGE_LIST_VIEW)); |
94 setObjectName(QString(NMUI_MESSAGE_LIST_VIEW)); |
100 QObjectList objectList; |
|
101 objectList.append(this); |
|
102 // Pass the view to documentloader. Document loader uses this view |
95 // Pass the view to documentloader. Document loader uses this view |
103 // when docml is parsed, instead of creating new view. |
96 // when docml is parsed, instead of creating new view. |
104 if (mDocumentLoader) { |
97 if (mDocumentLoader) { |
105 mDocumentLoader->setObjectTree(objectList); |
|
106 mWidgetList = mDocumentLoader->load(NMUI_MESSAGE_LIST_VIEW_XML, &ok); |
98 mWidgetList = mDocumentLoader->load(NMUI_MESSAGE_LIST_VIEW_XML, &ok); |
107 } |
99 } |
108 |
100 |
109 if (ok == true && mWidgetList.count()) { |
101 if (ok == true && mWidgetList.count()) { |
110 // Get message list widget |
102 // Get message list widget |
142 NM_ERROR(1,"nmailui: (no messages) object loading failed"); |
134 NM_ERROR(1,"nmailui: (no messages) object loading failed"); |
143 } |
135 } |
144 |
136 |
145 mFolderLabel = qobject_cast<HbGroupBox *>(mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_FOLDER_LABEL)); |
137 mFolderLabel = qobject_cast<HbGroupBox *>(mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_FOLDER_LABEL)); |
146 |
138 |
147 // Disable the old sync icon implementation for the time being (commment out loading the icon here) |
|
148 //mSyncIcon = qobject_cast<HbLabel *>(mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_SYNC_ICON)); |
|
149 if (mSyncIcon) { |
|
150 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline)); |
|
151 } |
|
152 |
|
153 // Connect options menu about to show to create options menu function |
139 // Connect options menu about to show to create options menu function |
154 QObject::connect(menu(), SIGNAL(aboutToShow()), |
140 QObject::connect(menu(), SIGNAL(aboutToShow()), |
155 this, SLOT(createOptionsMenu())); |
141 this, SLOT(createOptionsMenu())); |
156 QObject::connect(&mUiEngine, SIGNAL(syncStateEvent(NmSyncState, const NmId &)), |
142 QObject::connect(&mUiEngine, SIGNAL(syncStateEvent(NmSyncState, const NmId &)), |
157 this, SLOT(handleSyncStateEvent(NmSyncState, const NmId &))); |
143 this, SLOT(handleSyncStateEvent(NmSyncState, const NmId &))); |
158 QObject::connect(&mUiEngine, SIGNAL(connectionEvent(NmConnectState, const NmId &)), |
|
159 this, SLOT(handleConnectionEvent(NmConnectState, const NmId &))); |
|
160 |
144 |
161 // Menu needs one dummy item so that aboutToShow signal is emitted. |
145 // Menu needs one dummy item so that aboutToShow signal is emitted. |
162 NmAction *dummy = new NmAction(0); |
146 NmAction *dummy = new NmAction(0); |
163 menu()->addAction(dummy); |
147 menu()->addAction(dummy); |
164 } |
148 } |
279 */ |
263 */ |
280 void NmMessageListView::refreshList() |
264 void NmMessageListView::refreshList() |
281 { |
265 { |
282 NM_FUNCTION; |
266 NM_FUNCTION; |
283 |
267 |
284 NmId mailboxId = mMessageListModel->currentMailboxId(); |
268 if (mMessageListModel) { |
285 if (mSyncIcon && mailboxId == mMessageListModel->currentMailboxId()) { |
269 NmId mailboxId = mMessageListModel->currentMailboxId(); |
286 if (mUiEngine.syncState(mailboxId) == Synchronizing) { |
270 // In each refresh, e.g. in folder change the UI signals |
287 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconSynching)); |
271 // lower layer about the folder that has been opened. |
288 } |
272 if (mStartParam){ |
289 else { |
273 mUiEngine.updateActiveFolder(mailboxId, mStartParam->folderId()); |
290 if (mUiEngine.connectionState(mailboxId) == Connected) { |
274 |
291 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOnline)); |
275 NmFolderType folderType = mUiEngine.folderTypeById(mStartParam->mailboxId(), |
292 } |
276 mStartParam->folderId()); |
293 else { |
277 if (folderType == NmFolderInbox) { // If the new folder is an inbox, first automatic sync should be shown |
294 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline)); |
278 mIsFirstSyncInMessageList = true; |
295 } |
279 } |
296 } |
280 } |
297 } |
281 |
298 |
282 // Set item model to message list widget |
299 // In each refresh, e.g. in folder change the UI signals |
283 if (mMessageListWidget) { |
300 // lower layer about the folder that has been opened. |
284 mMessageListWidget->setModel(static_cast<QStandardItemModel*>(mMessageListModel)); |
301 if (mStartParam){ |
285 QObject::connect(mMessageListModel, SIGNAL(rowsInserted(const QModelIndex&,int,int)), |
302 mUiEngine.updateActiveFolder(mailboxId, mStartParam->folderId()); |
286 this, SLOT(itemsAdded(const QModelIndex&,int,int))); |
303 } |
287 QObject::connect(mMessageListModel, SIGNAL(rowsRemoved(const QModelIndex&,int,int)), |
304 |
288 this, SLOT(itemsRemoved())); |
305 // Set item model to message list widget |
289 QObject::connect(mMessageListModel, SIGNAL(setNewParam(NmUiStartParam*)), |
306 if (mMessageListWidget) { |
290 this, SLOT(reloadViewContents(NmUiStartParam*))); |
307 mMessageListWidget->setModel(static_cast<QStandardItemModel*>(mMessageListModel)); |
291 |
308 QObject::connect(mMessageListModel, SIGNAL(rowsInserted(const QModelIndex&,int,int)), |
292 mPreviousModelCount=mMessageListModel->rowCount(); |
309 this, SLOT(itemsAdded(const QModelIndex&,int,int))); |
293 if (mPreviousModelCount==0){ |
310 QObject::connect(mMessageListModel, SIGNAL(rowsRemoved(const QModelIndex&,int,int)), |
294 showNoMessagesText(); |
311 this, SLOT(itemsRemoved())); |
295 } |
312 QObject::connect(mMessageListModel, SIGNAL(setNewParam(NmUiStartParam*)), |
296 else{ |
313 this, SLOT(reloadViewContents(NmUiStartParam*))); |
297 hideNoMessagesText(); |
314 |
298 } |
315 mPreviousModelCount=mMessageListModel->rowCount(); |
299 } |
316 if (mPreviousModelCount==0){ |
|
317 showNoMessagesText(); |
|
318 } |
|
319 else{ |
|
320 hideNoMessagesText(); |
|
321 } |
|
322 } |
300 } |
323 } |
301 } |
324 |
302 |
325 /*! |
303 /*! |
326 Sync state event handling |
304 Sync state event handling |
327 */ |
305 */ |
328 void NmMessageListView::handleSyncStateEvent(NmSyncState syncState, const NmId & mailboxId) |
306 void NmMessageListView::handleSyncStateEvent(NmSyncState syncState, const NmId & mailboxId) |
329 { |
307 { |
330 NM_FUNCTION; |
308 NM_FUNCTION; |
331 |
309 if (mMessageListModel && mailboxId == mMessageListModel->currentMailboxId()) { |
332 if (mSyncIcon && mailboxId == mMessageListModel->currentMailboxId()) { |
|
333 if (syncState == Synchronizing) { |
310 if (syncState == Synchronizing) { |
334 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconSynching)); |
311 // before first sync inbox id might be zero |
335 // before first sync inbox id might be zero |
|
336 if (mStartParam->folderId() == 0) { |
312 if (mStartParam->folderId() == 0) { |
337 // after sync inbox id should be updated to correct value |
313 // after sync inbox id should be updated to correct value |
338 NmId folderId = mUiEngine.standardFolderId( |
314 NmId folderId = mUiEngine.standardFolderId( |
339 mStartParam->mailboxId(), |
315 mStartParam->mailboxId(), |
340 NmFolderInbox); |
316 NmFolderInbox); |
341 mStartParam->setFolderId(folderId); |
317 mStartParam->setFolderId(folderId); |
342 } |
318 } |
343 } |
319 // Show sync icon only for the first automatic sync after opening message list. |
344 else { |
320 // Sync icon for manual sync is shown in NmUiEngine::refreshMailbox, not here. |
345 if (mUiEngine.connectionState(mailboxId) == Connected) { |
321 if (mIsFirstSyncInMessageList) { |
346 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOnline)); |
322 HbIndicator indicator; |
347 } |
323 indicator.activate(syncIndicatorName, QVariant()); |
348 else { |
324 mIsFirstSyncInMessageList = false; |
349 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline)); |
325 } |
350 } |
|
351 } |
|
352 } |
|
353 } |
|
354 |
|
355 /*! |
|
356 Connection event handling |
|
357 */ |
|
358 void NmMessageListView::handleConnectionEvent(NmConnectState connectState, const NmId &mailboxId) |
|
359 { |
|
360 NM_FUNCTION; |
|
361 |
|
362 if (mSyncIcon && mailboxId == mMessageListModel->currentMailboxId() && mUiEngine.syncState(mailboxId) != Synchronizing) { |
|
363 if (connectState == Connected) { |
|
364 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOnline)); |
|
365 } |
|
366 else { |
|
367 mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline)); |
|
368 } |
326 } |
369 } |
327 } |
370 } |
328 } |
371 |
329 |
372 /*! |
330 /*! |