Drafts folder.

svn path=/trunk/kdenetwork/kmail/; revision=71037
wilder-work
Don Sanders 26 years ago
parent 275c52a7b3
commit 1230ea1b0e
  1. 4
      kmcomposerui.rc
  2. 44
      kmcomposewin.cpp
  3. 8
      kmcomposewin.h
  4. 2
      kmfoldertree.cpp
  5. 7
      kmkernel.cpp
  6. 8
      kmkernel.h
  7. 17
      kmmainwin.cpp
  8. 1
      kmmainwin.h

@ -1,9 +1,10 @@
<!DOCTYPE kpartgui ><kpartgui version="4" name="kmcomposer" >
<!DOCTYPE kpartgui ><kpartgui version="5" name="kmcomposer" >
<MenuBar>
<Menu noMerge="1" name="file" >
<text>&amp;Message</text>
<Action name="send_default" />
<Action name="send_alternative" />
<Action name="save_in_drafts" />
<Separator/>
<Action name="insert_file" />
<Action name="file_print" />
@ -28,6 +29,7 @@
<Action name="confirm_read" />
<Separator/>
<Action name="charsets" />
<Action name="wordwrap" />
</Menu>
<Menu noMerge="1" name="view" >
<text>&amp;View</text>

@ -24,9 +24,10 @@
#include "kmaddrbookdlg.h"
#include "kmaddrbook.h"
#include "kmidentity.h"
#include "kmfolder.h"
#include <kabapi.h>
#include <kfontutils.h>
#include <kaction.h>
#include <kcharsets.h>
#include <kcursor.h>
@ -133,7 +134,8 @@ KMComposeWin::KMComposeWin(KMMessage *aMsg, QString id )
mAtmTempList.setAutoDelete(TRUE);
mAutoDeleteMsg = FALSE;
mEditor = NULL;
disableBreaking = false;
mSpellCheckInProgress=FALSE;
setCaption( i18n("Composer") );
@ -664,6 +666,9 @@ void KMComposeWin::setupActions(void)
actionCollection(), "send_alternative");
}
(void) new KAction (i18n("Save in &drafts folder"), "", 0,
this, SLOT(slotSaveDraft()),
actionCollection(), "save_in_drafts");
(void) new KAction (i18n("&Insert File..."), "fileopen", 0,
this, SLOT(slotInsertFile()),
actionCollection(), "insert_file");
@ -1008,6 +1013,7 @@ void KMComposeWin::setMsg(KMMessage* newMsg, bool mayAutoSign)
QTimer::singleShot( 0, this, SLOT(slotAppendSignature()) );
}
mEditor->setModified(FALSE);
//put font charset as default charset: jstolarz@kde.org
// QString defCharset = mMsg->charset();
@ -1186,10 +1192,16 @@ const QString KMComposeWin::pgpProcessedMsg(void)
QString _to, receiver;
int index, lastindex;
QStrList persons;
QString text;
if (disableBreaking)
text = mEditor->text();
else
text = mEditor->brokenText();
if (!doSign && !doEncrypt) return mEditor->brokenText();
if (!doSign && !doEncrypt) return text;
pgp->setMessage(mEditor->brokenText());
pgp->setMessage(text);
if (!doEncrypt)
{
@ -1873,9 +1885,10 @@ void KMComposeWin::slotDropAction(QDropEvent *e)
//----------------------------------------------------------------------------
void KMComposeWin::doSend(int aSendNow)
void KMComposeWin::doSend(int aSendNow, bool saveInDrafts)
{
QString hf = mMsg->headerField("X-KMail-Transport");
QString hf = mMsg->headerField("X-KMail-Transport");
QString msgId = mMsg->msgId();
bool sentOk;
kernel->kbp()->busy();
@ -1891,14 +1904,24 @@ void KMComposeWin::doSend(int aSendNow)
(!hf.isEmpty() && (hf != kernel->msgSender()->transportString())))
mMsg->setHeaderField("X-KMail-Transport", mTransport.currentText());
sentOk = (applyChanges() && kernel->msgSender()->send(mMsg, aSendNow));
disableBreaking = saveInDrafts || !aSendNow;
if (saveInDrafts)
sentOk = (applyChanges() && !(kernel->draftsFolder()->addMsg(mMsg)));
else
sentOk = (applyChanges() && kernel->msgSender()->send(mMsg, aSendNow));
disableBreaking = false;
kernel->kbp()->idle();
if (saveInDrafts || !aSendNow)
emit messageQueuedOrDrafted();
if (sentOk)
{
mAutoDeleteMsg = FALSE;
close();
}
}
@ -1910,6 +1933,13 @@ void KMComposeWin::slotSendLater()
}
//----------------------------------------------------------------------------
void KMComposeWin::slotSaveDraft()
{
doSend(FALSE, TRUE);
}
//----------------------------------------------------------------------------
void KMComposeWin::slotSendNow()
{

@ -181,6 +181,7 @@ public slots:
void slotAttachFile();
void slotSendNow();
void slotSendLater();
void slotSaveDraft();
void slotDropAction(QDropEvent *e);
void slotNewComposer();
void slotNewMailReader();
@ -276,6 +277,10 @@ public slots:
void slotAttachFileData(KIO::Job *, const QByteArray &);
void slotAttachFileResult(KIO::Job *);
signals:
/** A message has been queued or saved in the drafts folder */
void messageQueuedOrDrafted();
protected:
/** Install grid management and header fields. If fields exist that
should not be there they are removed. Those that are needed are
@ -339,7 +344,7 @@ private:
void setEditCharset();
/** Send the message */
void doSend(int sendNow=-1);
void doSend(int sendNow=-1, bool saveInDrafts = false);
/** get default charset from locale settings */
const QString defaultCharset(void);
@ -374,6 +379,7 @@ protected:
bool useExtEditor;
QList<_StringPair> mCustHeaders;
bool mConfirmSend;
bool disableBreaking;
#endif
int mNumHeaders;
int mLineBreak;

@ -129,6 +129,8 @@ virtual QString key( int /*column*/, bool /*ascending*/ ) const {
return "\t2";
else if (folder->label() == i18n("trash"))
return "\t3";
else if (folder->label() == i18n("drafts"))
return "\t4";
return text(0).lower();
}
};

@ -308,6 +308,12 @@ void KMKernel::initFolders(KConfig* cfg)
the_trashFolder->setSystemFolder(TRUE);
the_trashFolder->open();
the_draftsFolder = the_folderMgr->findOrCreate(cfg->readEntry("draftsFolder", "drafts"));
the_draftsFolder->setType("Df");
the_draftsFolder->setWhoField("To");
the_draftsFolder->setSystemFolder(TRUE);
the_draftsFolder->open();
}
@ -405,6 +411,7 @@ void KMKernel::cleanup(void)
if (the_inboxFolder) the_inboxFolder->close(TRUE);
if (the_outboxFolder) the_outboxFolder->close(TRUE);
if (the_sentFolder) the_sentFolder->close(TRUE);
if (the_draftsFolder) the_draftsFolder->close(TRUE);
if (the_msgSender) delete the_msgSender;
if (the_addrBook) delete the_addrBook;

@ -33,7 +33,7 @@ public:
~KMKernel ();
// dcop calable stuff
void checkMail ();
//returns id of composer if more are opened
int openComposer (const QString &to, const QString &cc, const QString &bcc,
@ -48,7 +48,7 @@ public:
// normal control stuff
static KMKernel *self() { return mySelf; }
void init ();
void testDir(const char *_name);
void recoverDeadLetters(void);
@ -63,11 +63,12 @@ public:
void action (bool mailto, bool check, const QString &to, const QString &cc,
const QString &bcc, const QString &subj, const QString &body,
const KURL &messageFile);
inline KMFolder *inboxFolder() { return the_inboxFolder; }
inline KMFolder *outboxFolder() { return the_outboxFolder; }
inline KMFolder *sentFolder() { return the_sentFolder; }
inline KMFolder *trashFolder() { return the_trashFolder; }
inline KMFolder *draftsFolder() { return the_draftsFolder; }
inline KBusyPtr *kbp() { return the_kbp; }
inline KMFolderMgr *folderMgr() { return the_folderMgr; }
@ -89,6 +90,7 @@ private:
KMFolder *the_outboxFolder;
KMFolder *the_sentFolder;
KMFolder *the_trashFolder;
KMFolder *the_draftsFolder;
KBusyPtr *the_kbp;
KMFolderMgr *the_folderMgr;

@ -815,26 +815,35 @@ void KMMainWin::slotBounceMsg()
}
//-----------------------------------------------------------------------------
void KMMainWin::slotMessageQueuedOrDrafted()
{
if((mFolder != kernel->outboxFolder()) && (mFolder != kernel->draftsFolder()))
return;
mMsgView->update(true);
}
//-----------------------------------------------------------------------------
void KMMainWin::slotEditMsg()
{
KMMessage *msg;
int aIdx;
if(mFolder != kernel->outboxFolder())
if((mFolder != kernel->outboxFolder()) && (mFolder != kernel->draftsFolder()))
{
KMessageBox::sorry(0,
i18n("Sorry, only messages in the outbox folder can be edited."));
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)))
return;
KMComposeWin *win = new KMComposeWin;
QObject::connect( win, SIGNAL( messageQueuedOrDrafted()),
this, SLOT( slotMessageQueuedOrDrafted()) );
win->setMsg(msg,FALSE);
win->show();
}
@ -1297,7 +1306,7 @@ void KMMainWin::slotMsgPopup(const KURL &aUrl, const QPoint& aPoint)
menu->insertItem(i18n("&Move..."), this,
SLOT(slotMoveMsg()), Key_M);
menu->insertItem(i18n("&Copy..."), this,
SLOT(slotCopyMsg()), Key_C);
SLOT(slotCopyMsg()), Key_C);
menu->insertSeparator();
deleteAction->plug(menu);
menu->popup(aPoint, 0);

@ -125,6 +125,7 @@ protected slots:
void slotForwardMsg();
void slotRedirectMsg();
void slotBounceMsg();
void slotMessageQueuedOrDrafted();
void slotEditMsg();
void slotDeleteMsg();
void slotUndo();

Loading…
Cancel
Save