diff --git a/kmheaders.cpp b/kmheaders.cpp index ebd5b51a0..088ab11f9 100644 --- a/kmheaders.cpp +++ b/kmheaders.cpp @@ -592,6 +592,9 @@ void KMHeaders::setFolder (KMFolder *aFolder) mFolder = aFolder; + mOwner->editAction->setEnabled(mFolder ? ( (mFolder == kernel->draftsFolder()) || (mFolder == kernel->outboxFolder()) ): false ); + + if (mFolder) { connect(mFolder, SIGNAL(msgHeaderChanged(int)), @@ -653,13 +656,7 @@ void KMHeaders::setFolder (KMFolder *aFolder) } if (mFolder) - { - str = i18n("%1 Messages, %2 unread.") - .arg(mFolder->count()) - .arg(mFolder->countUnread()); - if (mFolder->isReadOnly()) str += i18n("Folder is read-only."); - mOwner->statusMsg(str); - } + setFolderInfoStatus(); QString colText = i18n( "Sender" ); if (mFolder && (qstricmp(mFolder->whoField(), "To")==0)) @@ -851,6 +848,17 @@ int KMHeaders::slotFilterMsg(KMMessage *msg) } +//----------------------------------------------------------------------------- +void KMHeaders::setFolderInfoStatus () +{ + QString str; + str = i18n("%1 Messages, %2 unread.") + .arg(mFolder->count()) + .arg(mFolder->countUnread()); + if (mFolder->isReadOnly()) str += i18n("Folder is read-only."); + mOwner->statusMsg(str); +} + //----------------------------------------------------------------------------- void KMHeaders::applyFiltersOnMsg(int /*msgId*/) { @@ -1483,6 +1491,7 @@ void KMHeaders::setCurrentMsg(int cur) setSelected( mItems[cur], TRUE ); } makeHeaderVisible(); + setFolderInfoStatus(); } @@ -1589,6 +1598,7 @@ void KMHeaders::nextMessage() setSelected( lvi->itemBelow(), TRUE ); setCurrentItem(lvi->itemBelow()); makeHeaderVisible(); + setFolderInfoStatus(); } } @@ -1609,6 +1619,7 @@ void KMHeaders::prevMessage() setSelected( lvi->itemAbove(), TRUE ); setCurrentItem(lvi->itemAbove()); makeHeaderVisible(); + setFolderInfoStatus(); } } @@ -1766,6 +1777,7 @@ void KMHeaders::highlightMessage(QListViewItem* lvi) mPrevCurrent = item; } emit selected(mFolder->getMsg(idx)); + setFolderInfoStatus(); } @@ -2188,15 +2200,20 @@ void KMHeaders::slotRMB() mOwner->folderToPopupMenu( dir, FALSE, this, &mMenuToFolder, msgCopyMenu ); QPopupMenu *setStatusMenu = new QPopupMenu(); - mOwner->replyAction->plug(menu); - mOwner->replyAllAction->plug(menu); - mOwner->forwardAction->plug(menu); - mOwner->bounceAction->plug(menu); + if ((mFolder == kernel->outboxFolder()) || (mFolder == kernel->draftsFolder())) + mOwner->editAction->plug(menu); + else { + mOwner->replyAction->plug(menu); + mOwner->replyAllAction->plug(menu); + mOwner->forwardAction->plug(menu); + mOwner->redirectAction->plug(menu); + mOwner->bounceAction->plug(menu); + } menu->insertSeparator(); - mOwner->saveAsAction->plug(menu); - mOwner->editAction->plug(menu); menu->insertItem(i18n("&Move to"), msgMoveMenu); menu->insertItem(i18n("&Copy to"), msgCopyMenu); + if ((mFolder != kernel->outboxFolder()) && (mFolder != kernel->draftsFolder())) + { menu->insertItem(i18n("&Set Status"), setStatusMenu); mOwner->newAction->plug(setStatusMenu); mOwner->unreadAction->plug(setStatusMenu); @@ -2204,6 +2221,11 @@ void KMHeaders::slotRMB() mOwner->repliedAction->plug(setStatusMenu); mOwner->queueAction->plug(setStatusMenu); mOwner->sentAction->plug(setStatusMenu); + } + menu->insertSeparator(); + mOwner->printAction->plug(menu); + mOwner->saveAsAction->plug(menu); + menu->insertSeparator(); mOwner->deleteAction->plug(menu); menu->exec (QCursor::pos(), 0); delete menu; diff --git a/kmheaders.h b/kmheaders.h index 31fb59188..dedd37b5d 100644 --- a/kmheaders.h +++ b/kmheaders.h @@ -73,6 +73,9 @@ public: if id>count() the last message is shown. */ virtual void setCurrentMsg(int msgId); + // Provide information about number of messages in a folder + void setFolderInfoStatus(); + /** The following methods process the message in the folder with the given msgId, or if no msgId is given all selected messages are processed. */ diff --git a/kmmainwin.cpp b/kmmainwin.cpp index d6edcf31b..3ea54c41a 100644 --- a/kmmainwin.cpp +++ b/kmmainwin.cpp @@ -875,13 +875,6 @@ void KMMainWin::slotEditMsg() KMMessage *msg; int aIdx; - if((mFolder != kernel->outboxFolder()) && (mFolder != kernel->draftsFolder())) - { - KMessageBox::sorry(0, - i18n("Sorry, only messages in the outbox folder and drafts folder can be edited.")); - return; - } - if((aIdx = mHeaders->currentItemIndex()) <= -1) return; if(!(msg = mHeaders->getMsg(aIdx))) @@ -1354,7 +1347,11 @@ void KMMainWin::slotUrlOpen() //----------------------------------------------------------------------------- void KMMainWin::slotMsgPopup(const KURL &aUrl, const QPoint& aPoint) { + KPopupMenu* menu = new KPopupMenu; + KPopupMenu *setStatusMenu = new KPopupMenu(); + (void) KMMainWin::updateMessageMenu(); + mUrlCurrent = aUrl; @@ -1388,23 +1385,40 @@ void KMMainWin::slotMsgPopup(const KURL &aUrl, const QPoint& aPoint) } else { - // popup somewhere else on the document + // popup somewhere else (i.e., not a URL) on the message + + + if ((mFolder == kernel->outboxFolder()) || (mFolder == kernel->draftsFolder())) + editAction->plug(menu); + else { replyAction->plug(menu); replyAllAction->plug(menu); forwardAction->plug(menu); redirectAction->plug(menu); + bounceAction->plug(menu); + } menu->insertSeparator(); - menu->insertItem(i18n("&Move..."), this, - SLOT(slotMoveMsg()), Key_M); - menu->insertItem(i18n("&Copy..."), this, - SLOT(slotCopyMsg()), Key_C); + menu->insertItem(i18n("&Move to"), moveMenu); + menu->insertItem(i18n("&Copy to"), copyMenu); + if ((mFolder != kernel->outboxFolder()) && (mFolder != kernel->draftsFolder())) + { + menu->insertItem(i18n("&Set Status"), setStatusMenu); + newAction->plug(setStatusMenu); + unreadAction->plug(setStatusMenu); + readAction->plug(setStatusMenu); + repliedAction->plug(setStatusMenu); + queueAction->plug(setStatusMenu); + sentAction->plug(setStatusMenu); + } + menu->insertSeparator(); + printAction->plug(menu); + saveAsAction->plug(menu); menu->insertSeparator(); deleteAction->plug(menu); menu->popup(aPoint, 0); } } - //----------------------------------------------------------------------------- void KMMainWin::getAccountMenu() { @@ -1430,7 +1444,7 @@ void KMMainWin::setupMenuBar() KStdAccel::key(KStdAccel::Save), this, SLOT(slotSaveMsg()), actionCollection(), "save_as" ); - KStdAction::print (this, SLOT(slotPrintMsg()), actionCollection()); + printAction = KStdAction::print (this, SLOT(slotPrintMsg()), actionCollection()); (void) new KAction( i18n("Compact all &folders"), 0, kernel->folderMgr(), SLOT(compactAll()), @@ -1452,7 +1466,7 @@ void KMMainWin::setupMenuBar() connect(actMenu,SIGNAL(aboutToShow()),this,SLOT(getAccountMenu())); (void) new KAction( i18n("&Send Queued"), 0, this, - SLOT(slotSendQueued()), actionCollection(), "send_queued"); + SLOT(slotSendQueued()), actionCollection(), "send_queued"); (void) new KAction( i18n("Address &Book..."), "contents", 0, this, SLOT(slotAddrBook()), actionCollection(), "addressbook" ); @@ -1559,7 +1573,7 @@ void KMMainWin::setupMenuBar() i++; } - editAction = new KAction( i18n("Edi&t..."), Key_T, this, + editAction = new KAction( i18n("Edi&t"), Key_T, this, SLOT(slotEditMsg()), actionCollection(), "edit" ); //----- Set status submenu diff --git a/kmmainwin.h b/kmmainwin.h index 28ae38722..c648bc265 100644 --- a/kmmainwin.h +++ b/kmmainwin.h @@ -76,10 +76,10 @@ public: static void cleanup(); KAction *replyAction, *noQuoteReplyAction, *replyAllAction, *replyListAction, - *forwardAction, *redirectAction, + *forwardAction, *redirectAction, *deleteAction, *saveAsAction, *bounceAction, *editAction, - *newAction,*unreadAction,*readAction,*repliedAction,*queueAction,*sentAction, - *printAction; + *newAction, *unreadAction, *readAction, *repliedAction, *queueAction, + *sentAction, *printAction; public slots: virtual void show();