emailuis/nmailui/src/nmmessagelistview.cpp
changeset 23 2dc6caa42ec3
parent 20 ecc8def7944a
child 27 9ba4404ef423
child 38 b4618f2cf6ac
equal deleted inserted replaced
20:ecc8def7944a 23:2dc6caa42ec3
     1 /*
     1 /*
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
     2 * Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    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 = "folderLabel";
    22 static const char *NMUI_MESSAGE_LIST_FOLDER_LABEL = "folderLabel";
    23 static const char *NMUI_MESSAGE_LIST_SYNC_ICON = "syncIcon";
    23 static const char *NMUI_MESSAGE_LIST_SYNC_ICON = "syncIcon";
    24 
       
    25 static const int nmNoMessagesDelay = 200;
       
    26 
    24 
    27 #include "nmuiheaders.h"
    25 #include "nmuiheaders.h"
    28 
    26 
    29 /*!
    27 /*!
    30 	\class NmMessageListView
    28 	\class NmMessageListView
    49 mMailboxListModel(mailboxListModel),
    47 mMailboxListModel(mailboxListModel),
    50 mMessageListModel(messageListModel),
    48 mMessageListModel(messageListModel),
    51 mDocumentLoader(documentLoader),
    49 mDocumentLoader(documentLoader),
    52 mItemContextMenu(NULL),
    50 mItemContextMenu(NULL),
    53 mLongPressedItem(NULL),
    51 mLongPressedItem(NULL),
    54 mNoMessagesLabel(NULL)
    52 mNoMessagesLabel(NULL),
       
    53 mFolderLabel(NULL),
       
    54 mSyncIcon(NULL),
       
    55 mViewReady(false),
       
    56 mCurrentFolderType(NmFolderInbox)
    55 {
    57 {
    56     // Load view layout
    58     // Load view layout
    57     loadViewLayout();
    59     loadViewLayout();
    58     // Set mailbox name to title pane
       
    59     setMailboxName();
       
    60     // Init tree view
    60     // Init tree view
    61     initTreeView();
    61     initTreeView();
    62     // Refresh list
    62     // Set folder name
    63     refreshList();
    63     setFolderName();
    64 }
    64 }
    65 
    65 
    66 /*!
    66 /*!
    67     Destructor
    67     Destructor
    68 */
    68 */
    72     mWidgetList.clear();
    72     mWidgetList.clear();
    73     if (mItemContextMenu){
    73     if (mItemContextMenu){
    74         mItemContextMenu->clearActions();
    74         mItemContextMenu->clearActions();
    75     }
    75     }
    76     delete mItemContextMenu;
    76     delete mItemContextMenu;
    77     mUiEngine.releaseMessageListModel(mStartParam->mailboxId());
       
    78 }
    77 }
    79 
    78 
    80 /*!
    79 /*!
    81     View layout loading from XML
    80     View layout loading from XML
    82 */
    81 */
   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 */
   191         // Store new start parameter data
   196         // Store new start parameter data
   192         mStartParam=startParam;
   197         mStartParam=startParam;
   193         // Update the model with new parameters
   198         // Update the model with new parameters
   194         mUiEngine.messageListModel(startParam->mailboxId(), startParam->folderId());
   199         mUiEngine.messageListModel(startParam->mailboxId(), startParam->folderId());
   195         refreshList();
   200         refreshList();
   196         // Refresh the mailboxname 
   201         // Refresh the mailboxname
   197         setMailboxName();
   202         setMailboxName();
       
   203         // Show message list if it is hidden
       
   204         mMessageListWidget->show();
   198     }
   205     }
   199     else {
   206     else {
   200         NMLOG("nmailui: Invalid message list start parameter");
   207         NMLOG("nmailui: Invalid message list start parameter");
   201         // Unused start parameter needs to be deleted
   208         // Unused start parameter needs to be deleted
   202         delete startParam;
   209         delete startParam;
   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)
   263             }
   269             }
   264         }
   270         }
   265     }
   271     }
   266 }
   272 }
   267 
   273 
       
   274 /*!
       
   275     Connection event handling
       
   276 */
   268 void NmMessageListView::handleConnectionEvent(NmConnectState connectState, const NmId &mailboxId)
   277 void NmMessageListView::handleConnectionEvent(NmConnectState connectState, const NmId &mailboxId)
   269 {
   278 {
   270     if (mSyncIcon && mailboxId == mMessageListModel.currentMailboxId() && mUiEngine.syncState(mailboxId) != Synchronizing) {
   279     if (mSyncIcon && mailboxId == mMessageListModel.currentMailboxId() && mUiEngine.syncState(mailboxId) != Synchronizing) {
   271         if (connectState == Connected) {
   280         if (connectState == Connected) {
   272             mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOnline));
   281             mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOnline));
   274         else {
   283         else {
   275             mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline));
   284             mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline));
   276         }
   285         }
   277     }
   286     }
   278 }
   287 }
       
   288 
       
   289 /*!
       
   290     folder selection handling within current mailbox
       
   291 */
       
   292 void NmMessageListView::folderSelected(NmId mailbox, NmId folder)
       
   293 {
       
   294     // Reloas view contents with new startparams
       
   295     if (mStartParam){
       
   296         NmUiStartParam* startParam = new NmUiStartParam(NmUiViewMessageList,mailbox,folder);
       
   297         // Hide message lis for redraw
       
   298         mMessageListWidget->hide();
       
   299         // Reload view, ownership of the startparams is passed and old startparams
       
   300         // are deleted within reloadViewContents function
       
   301         reloadViewContents(startParam);
       
   302         //Set folder text to status bar
       
   303         setFolderName();
       
   304         // Store active folder type
       
   305         mCurrentFolderType = NmFolderInbox;
       
   306     }
       
   307 }
       
   308 
   279 
   309 
   280 /*!
   310 /*!
   281     Long keypress handling
   311     Long keypress handling
   282 */
   312 */
   283 void NmMessageListView::showItemContextMenu(HbAbstractViewItem *listViewItem, const QPointF &coords)
   313 void NmMessageListView::showItemContextMenu(HbAbstractViewItem *listViewItem, const QPointF &coords)
   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 ) {
   444                     // startParam ownerhips transfers
   505                     // startParam ownerhips transfers
   445                     mApplication.enterNmUiView(startParam);
   506                     mApplication.enterNmUiView(startParam);
   446                 }
   507                 }
   447             }
   508             }
   448         }
   509         }
   449     }
   510         if (actionResponse.responseCommand() == NmActionResponseCommandSearch) {
   450 
   511             // Check that the given start response has mailbox and folder IDs.
   451 
   512             if (actionResponse.mailboxId() != 0) {
       
   513                 if (mUiEngine.isSendingMessage()) {
       
   514                     // Sending is ongoing so just show a note.
       
   515                     QString noteText = hbTrId("txt_mail_dialog_still_sending");
       
   516 
       
   517                     // Get the message subject from the message being sent.
       
   518                     const NmMessage *message = mUiEngine.messageBeingSent();
       
   519 
       
   520                     if (message) {
       
   521                         noteText = noteText.arg(
       
   522                             NmUtilities::truncate(message->envelope().subject(), 20));
       
   523                     }
       
   524 
       
   525                     HbMessageBox::warning(noteText);
       
   526                 }
       
   527                 else {
       
   528                     NmUiStartParam *startParam =
       
   529                         new NmUiStartParam(NmUiViewMessageSearchList,
       
   530                                            actionResponse.mailboxId(),
       
   531                                            mStartParam->folderId());
       
   532 
       
   533                     // startParam ownership transfers.
       
   534                     mApplication.enterNmUiView(startParam);
       
   535                 }
       
   536             }
       
   537         }
       
   538     }
   452 }
   539 }
   453 
   540 
   454 
   541 
   455 /*!
   542 /*!
   456     Set mailbox name to title
   543     Set mailbox name to title
   489         tb->addAction(list[i]);
   576         tb->addAction(list[i]);
   490     }
   577     }
   491 }
   578 }
   492 
   579 
   493 /*!
   580 /*!
       
   581     setFolderName. Function sets folder name to status bar
       
   582 */
       
   583 void NmMessageListView::setFolderName()
       
   584 {
       
   585     if (mStartParam && mFolderLabel) {
       
   586         switch (mUiEngine.folderTypeById(mStartParam->mailboxId(),
       
   587                 mStartParam->folderId())) {
       
   588         case NmFolderOutbox:
       
   589             {
       
   590             mFolderLabel->setPlainText(hbTrId("txt_mail_subhead_outbox"));
       
   591             }
       
   592             break;
       
   593         case NmFolderDrafts:
       
   594             {
       
   595             mFolderLabel->setPlainText(hbTrId("txt_mail_subhead_drafts"));
       
   596             }
       
   597             break;
       
   598         case NmFolderSent:
       
   599             {
       
   600             mFolderLabel->setPlainText(hbTrId("txt_mail_subhead_sent_items"));
       
   601             }
       
   602             break;
       
   603         case NmFolderDeleted:
       
   604             {
       
   605             mFolderLabel->setPlainText(hbTrId("txt_mail_subhead_deleted_items"));
       
   606             }
       
   607             break;
       
   608         case NmFolderInbox:
       
   609         default:
       
   610             {
       
   611             mFolderLabel->setPlainText(hbTrId("txt_mail_subhead_inbox"));
       
   612             }
       
   613             break;
       
   614         }
       
   615     }
       
   616 }
       
   617 
       
   618 /*!
   494     Observe items added
   619     Observe items added
   495 */
   620 */
   496 void NmMessageListView::itemsAdded(const QModelIndex &parent, int start, int end)
   621 void NmMessageListView::itemsAdded(const QModelIndex &parent, int start, int end)
   497 {
   622 {
   498     NMLOG("nmailui: NmMessageListView::itemsAdded");
   623     NMLOG("nmailui: NmMessageListView::itemsAdded");
   505     if (0 == start && mMessageListWidget) {
   630     if (0 == start && mMessageListWidget) {
   506         QList<HbAbstractViewItem*> items = mMessageListWidget->visibleItems();
   631         QList<HbAbstractViewItem*> items = mMessageListWidget->visibleItems();
   507         if (items.count()) {
   632         if (items.count()) {
   508             QModelIndex index = items.at(0)->modelIndex();
   633             QModelIndex index = items.at(0)->modelIndex();
   509             if (1 == index.row()) {
   634             if (1 == index.row()) {
   510                 QModelIndex previous = mMessageListWidget->previousIndex(index);
   635                 QModelIndex previous = mMessageListWidget->modelIterator()->previousIndex(index);
   511                 if (previous.isValid()) {
   636                 if (previous.isValid()) {
   512                     mMessageListWidget->scrollTo(previous);
   637                     mMessageListWidget->scrollTo(previous);
   513                 }
   638                 }
   514             }
   639             }
   515         }
   640         }