[prev in list] [next in list] [prev in thread] [next in thread]
List: kmail-devel
Subject: Re: [PATCH] attachment column
From: Carsten Burghardt <burghardt () kde ! org>
Date: 2004-02-25 18:34:24
Message-ID: 200402251934.25125.burghardt () kde ! org
[Download RAW message or body]
On Sunday 22 February 2004 17:01, Ingo Klöcker wrote:
> On Sunday 22 February 2004 14:44, Carsten Burghardt wrote:
> > Hi,
> >
> > the attached patch adds a new column that shows if the email has an
> > attachment. You can add that column with a right-click on the
> > header-column or via the configuration. It also cleans up the column
> > code a bit. I had to comment out two sections in kmheaders.cpp that
> > overwrite the columnheader and therefore delete the attachment icon
> > that is shown. I didn't encounter any drawbacks, perhaps these two
> > parts are not needed?
>
> Without having looked at the patch I wonder why we need an extra column
> for this while we don't need one for all the other status icons. (Some
> people will disagree that we don't need an extra column.)
>
> I'd like to see the normal message icons being overlayed with a paper
> clip in case the message has an attachment. This way the information
> would not occupy any additional space (which is important for people
> with small displays).
Attached is an adapted patch that shows the attachment icon along with the
other icons.
Carsten
["attachment_column.diff" (text/x-diff)]
? libkdenetwork/libgpg-error-copy/code-from-errno.h
? libkdenetwork/libgpg-error-copy/code-to-errno.h
? libkdenetwork/libgpg-error-copy/err-codes.h
? libkdenetwork/libgpg-error-copy/err-sources.h
? libkdenetwork/libgpgme-copy/assuan/assuan-errors.c
? kmail/folderstorage.loT
? kmail/globalsettings.cpp
? kmail/globalsettings.h
? kmail/pics/kmmsgattachment.png
Index: libkdenetwork/kfoldertree.h
===================================================================
RCS file: /home/kde/kdepim/libkdenetwork/kfoldertree.h,v
retrieving revision 1.16
diff -u -3 -p -r1.16 kfoldertree.h
--- libkdenetwork/kfoldertree.h 20 Feb 2004 21:57:17 -0000 1.16
+++ libkdenetwork/kfoldertree.h 25 Feb 2004 18:24:36 -0000
@@ -50,6 +50,7 @@ struct KPaintInfo {
int dateCol;
int sizeCol;
bool showCryptoIcons;
+ bool showAttachmentIcon;
};
//==========================================================================
Index: kmail/configuredialog.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/configuredialog.cpp,v
retrieving revision 1.416
diff -u -3 -p -r1.416 configuredialog.cpp
--- kmail/configuredialog.cpp 23 Feb 2004 09:08:27 -0000 1.416
+++ kmail/configuredialog.cpp 25 Feb 2004 18:24:40 -0000
@@ -1912,11 +1912,15 @@ AppearancePageHeadersTab::AppearancePage
mCryptoIconsCheck = new QCheckBox( i18n( "Show crypto &icons" ), group );
+ mAttachmentCheck = new QCheckBox( i18n("&Display attachment icon"), group );
+
mNestedMessagesCheck =
new QCheckBox( i18n("&Thread list of message headers"), group );
connect( mMessageSizeCheck, SIGNAL( stateChanged( int ) ),
this, SLOT( slotEmitChanged( void ) ) );
+ connect( mAttachmentCheck, SIGNAL( stateChanged( int ) ),
+ this, SLOT( slotEmitChanged( void ) ) );
connect( mCryptoIconsCheck, SIGNAL( stateChanged( int ) ),
this, SLOT( slotEmitChanged( void ) ) );
connect( mNestedMessagesCheck, SIGNAL( stateChanged( int ) ),
@@ -2017,6 +2021,7 @@ void AppearancePage::HeadersTab::load()
mNestedMessagesCheck->setChecked( geometry.readBoolEntry( "nestedMessages", false \
) ); mMessageSizeCheck->setChecked( general.readBoolEntry( "showMessageSize", false \
) ); mCryptoIconsCheck->setChecked( general.readBoolEntry( "showCryptoIcons", false \
) ); + mAttachmentCheck->setChecked( general.readBoolEntry( "showAttachmentIcon", \
true ) );
// "Message Header Threading Options":
int num = geometry.readNumEntry( "nestingPolicy", 3 );
@@ -2056,6 +2061,8 @@ void AppearancePage::HeadersTab::install
if( general.hasKey( "showCryptoIcons" ) )
mCryptoIconsCheck->setChecked( general.readBoolEntry( "showCryptoIcons" ) );
+ if ( general.hasKey( "showAttachmentIcon" ) )
+ mAttachmentCheck->setChecked( general.readBoolEntry( "showAttachmentIcon" ) );
if ( geometry.hasKey( "nestingPolicy" ) ) {
int num = geometry.readNumEntry( "nestingPolicy" );
@@ -2094,6 +2101,7 @@ void AppearancePage::HeadersTab::save()
mNestingPolicy->id( mNestingPolicy->selected() ) );
general.writeEntry( "showMessageSize", mMessageSizeCheck->isChecked() );
general.writeEntry( "showCryptoIcons", mCryptoIconsCheck->isChecked() );
+ general.writeEntry( "showAttachmentIcon", mAttachmentCheck->isChecked() );
int dateDisplayID = mDateDisplay->id( mDateDisplay->selected() );
// check bounds:
Index: kmail/configuredialog_p.h
===================================================================
RCS file: /home/kde/kdepim/kmail/configuredialog_p.h,v
retrieving revision 1.75
diff -u -3 -p -r1.75 configuredialog_p.h
--- kmail/configuredialog_p.h 22 Feb 2004 16:23:17 -0000 1.75
+++ kmail/configuredialog_p.h 25 Feb 2004 18:24:40 -0000
@@ -459,6 +459,7 @@ protected: // methods
protected: // data
QCheckBox *mMessageSizeCheck;
+ QCheckBox *mAttachmentCheck;
QCheckBox *mNestedMessagesCheck;
QCheckBox *mCryptoIconsCheck;
QButtonGroup *mNestingPolicy;
Index: kmail/imapjob.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/imapjob.cpp,v
retrieving revision 1.49
diff -u -3 -p -r1.49 imapjob.cpp
--- kmail/imapjob.cpp 22 Feb 2004 23:17:38 -0000 1.49
+++ kmail/imapjob.cpp 25 Feb 2004 18:24:40 -0000
@@ -324,20 +324,24 @@ void ImapJob::slotGetMessageResult( KIO:
if ( size > 0 && mPartSpecifier.isEmpty() )
(*it).done = size;
ulong uid = msg->UID();
+ // must set this first so that msg->fromByteArray sets the attachment status
+ if ( mPartSpecifier.isEmpty() )
+ msg->setComplete( true );
+ else
+ msg->setReadyToShow( false );
+
msg->fromByteArray( (*it).data );
// reconstruct as it may be overwritten above
msg->setUID(uid);
if ( size > 0 && msg->msgSizeServer() == 0 )
msg->setMsgSizeServer(size);
- if ( mPartSpecifier.isEmpty() )
- msg->setComplete( true );
- else
- msg->setReadyToShow( false );
} else {
// Update the body of the retrieved part (the message notifies all \
observers) msg->updateBodyPart( mPartSpecifier, (*it).data );
msg->setReadyToShow( true );
+ if (msg->attachmentState() != KMMsgHasAttachment)
+ msg->updateAttachmentState();
}
} else {
kdDebug(5006) << "ImapJob::slotGetMessageResult - got no data for " << \
mPartSpecifier << endl;
Index: kmail/kmfolderimap.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfolderimap.cpp,v
retrieving revision 1.175
diff -u -3 -p -r1.175 kmfolderimap.cpp
--- kmail/kmfolderimap.cpp 24 Feb 2004 10:14:37 -0000 1.175
+++ kmail/kmfolderimap.cpp 25 Feb 2004 18:24:41 -0000
@@ -912,7 +912,8 @@ void KMFolderImap::slotListFolderEntries
else if ((*eIt).m_uds == KIO::UDS_ACCESS)
flags = (*eIt).m_long;
}
- if (mimeType == "message/rfc822-imap" && !(flags & 8))
+ if ((mimeType == "message/rfc822-imap" || mimeType == "message/rfc822") &&
+ !(flags & 8))
(*it).items.append(name + "," + QString::number(flags));
}
}
@@ -1061,7 +1062,9 @@ KMFolderImap::doCreateJob( KMMessage *ms
mAccount && mAccount->loadOnDemand() &&
( msg->msgSizeServer() > 5000 || msg->msgSizeServer() == 0 ) &&
( msg->signatureState() == KMMsgNotSigned ||
- msg->signatureState() == KMMsgSignatureStateUnknown ) )
+ msg->signatureState() == KMMsgSignatureStateUnknown ) &&
+ ( msg->encryptionState() == KMMsgNotEncrypted ||
+ msg->encryptionState() == KMMsgEncryptionStateUnknown ) )
{
// load-on-demand: retrieve the BODYSTRUCTURE and to speed things up also the \
headers // this is not activated for small or signed messages
Index: kmail/kmheaders.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmheaders.cpp,v
retrieving revision 1.615
diff -u -3 -p -r1.615 kmheaders.cpp
--- kmail/kmheaders.cpp 22 Feb 2004 22:53:46 -0000 1.615
+++ kmail/kmheaders.cpp 25 Feb 2004 18:24:42 -0000
@@ -71,6 +71,7 @@ QPixmap* KMHeaders::pixPartiallyEncrypte
QPixmap* KMHeaders::pixUndefinedEncrypted = 0;
QPixmap* KMHeaders::pixEncryptionProblematic = 0;
QPixmap* KMHeaders::pixSignatureProblematic = 0;
+QPixmap* KMHeaders::pixAttachment = 0;
#define KMAIL_SORT_VERSION 1012
#define KMAIL_SORT_FILE(x) x->indexLocation() + ".sorted"
@@ -334,10 +335,10 @@ public:
const QPixmap * pixmap( int col) const
{
- if(!col) {
- KMHeaders *headers = static_cast<KMHeaders*>(listView());
- KMMsgBase *mMsgBase = headers->folder()->getMsgBase( mMsgId );
+ KMHeaders *headers = static_cast<KMHeaders*>(listView());
+ KMMsgBase *mMsgBase = headers->folder()->getMsgBase( mMsgId );
+ if(!col) {
PixmapList pixmaps;
// Have the spam/ham and watched/ignored icons first, I guess.
@@ -376,11 +377,15 @@ public:
else if( mMsgBase->signatureState() == KMMsgSignatureProblematic )
pixmaps << *KMHeaders::pixSignatureProblematic;
}
+ // Only merge the attachment icon in if that is configured.
+ if( headers->paintInfo()->showAttachmentIcon &&
+ mMsgBase->attachmentState() == KMMsgHasAttachment )
+ pixmaps << *KMHeaders::pixAttachment;
static QPixmap mergedpix;
mergedpix = pixmapMerge( pixmaps );
return &mergedpix;
- }
+ }
return 0;
}
@@ -555,35 +560,21 @@ KMHeaders::KMHeaders(KMMainWidget *aOwne
mPopup = new KPopupMenu(this);
mPopup->insertTitle(i18n("View Columns"));
mPopup->setCheckable(true);
- mSizeColumn = mPopup->insertItem(i18n("Size Column"), this, \
SLOT(slotToggleSizeColumn())); + mSizeColumn = mPopup->insertItem(i18n("Size"), \
this, SLOT(slotToggleSizeColumn())); + mPaintInfo.showSize = false;
mPaintInfo.flagCol = -1;
mPaintInfo.subCol = mPaintInfo.flagCol + 1;
mPaintInfo.senderCol = mPaintInfo.subCol + 1;
mPaintInfo.dateCol = mPaintInfo.senderCol + 1;
- mPaintInfo.sizeCol = mPaintInfo.dateCol + 1;
mPaintInfo.orderOfArrival = false;
mPaintInfo.status = false;
mSortCol = KMMsgList::sfDate;
mSortDescending = false;
- readConfig();
- restoreLayout(KMKernel::config(), "Header-Geometry");
setShowSortIndicator(true);
setFocusPolicy( WheelFocus );
- addColumn( i18n("Subject"), 310 );
- addColumn( i18n("Sender"), 170 );
- addColumn( i18n("Date"), 170 );
-
- if (mPaintInfo.showSize) {
- addColumn( i18n("Size"), 80 );
- setColumnAlignment( mPaintInfo.sizeCol, AlignRight );
- showingSize = true;
- } else {
- showingSize = false;
- }
-
if (!pixmapsLoaded)
{
pixmapsLoaded = true;
@@ -608,8 +599,16 @@ KMHeaders::KMHeaders(KMMainWidget *aOwne
pixUndefinedEncrypted = new QPixmap( UserIcon( "kmmsgundefinedencrypted" ) );
pixEncryptionProblematic = new QPixmap( UserIcon( "kmmsgencryptionproblematic" ) \
);
pixSignatureProblematic = new QPixmap( UserIcon( "kmmsgsignatureproblematic" ) \
); + pixAttachment = new QPixmap( UserIcon( "kmmsgattachment" ) );
}
+ addColumn( i18n("Subject"), 310 );
+ addColumn( i18n("Sender"), 170 );
+ addColumn( i18n("Date"), 170 );
+
+ readConfig();
+ restoreLayout(KMKernel::config(), "Header-Geometry");
+
connect( this, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint &, int \
)),
this, SLOT( rightButtonPressed( QListViewItem*, const QPoint &, int )));
connect(this, SIGNAL(doubleClicked(QListViewItem*)),
@@ -648,20 +647,27 @@ bool KMHeaders::eventFilter ( QObject *o
}
//-----------------------------------------------------------------------------
-void KMHeaders::slotToggleSizeColumn ()
+void KMHeaders::slotToggleSizeColumn(int mode)
{
- mPaintInfo.showSize = !mPaintInfo.showSize;
- mPopup->setItemChecked(mSizeColumn, mPaintInfo.showSize);
+ bool old = mPaintInfo.showSize;
+ if (mode == -1)
+ mPaintInfo.showSize = !mPaintInfo.showSize;
+ else
+ mPaintInfo.showSize = mode;
- // we need to write it back so that
- // the configure-dialog knows the correct status
- KConfig* config = KMKernel::config();
- KConfigGroupSaver saver(config, "General");
- config->writeEntry("showMessageSize", mPaintInfo.showSize);
+ mPopup->setItemChecked(mSizeColumn, mPaintInfo.showSize);
+ if (mPaintInfo.showSize && !old)
+ mPaintInfo.sizeCol = addColumn(i18n("Size"), 80);
+ else if (!mPaintInfo.showSize && old) {
+ removeColumn(mPaintInfo.sizeCol);
+ mPaintInfo.sizeCol = -1;
+ }
- setFolder(mFolder);
+ if (mode == -1)
+ writeConfig();
}
+
//-----------------------------------------------------------------------------
// Support for backing pixmap
void KMHeaders::paintEmptyArea( QPainter * p, const QRect & rect )
@@ -743,9 +749,12 @@ void KMHeaders::readConfig (void)
{ // area for config group "General"
KConfigGroupSaver saver(config, "General");
- mPaintInfo.showSize = config->readBoolEntry("showMessageSize");
- mPopup->setItemChecked(mSizeColumn, mPaintInfo.showSize);
+ bool show = config->readBoolEntry("showMessageSize");
+ mPopup->setItemChecked(mSizeColumn, show);
+ slotToggleSizeColumn(show);
+
mPaintInfo.showCryptoIcons = config->readBoolEntry( "showCryptoIcons", false );
+ mPaintInfo.showAttachmentIcon = config->readBoolEntry( "showAttachmentIcon", \
true );
KMime::DateFormatter::FormatType t =
(KMime::DateFormatter::FormatType) config->readNumEntry("dateFormat", \
KMime::DateFormatter::Fancy ) ; @@ -860,7 +869,10 @@ void \
KMHeaders::writeFolderConfig (void) \
//----------------------------------------------------------------------------- void \
KMHeaders::writeConfig (void) {
- saveLayout(KMKernel::config(), "Header-Geometry");
+ KConfig* config = KMKernel::config();
+ saveLayout(config, "Header-Geometry");
+ KConfigGroupSaver saver(config, "General");
+ config->writeEntry("showMessageSize", mPaintInfo.showSize);
}
//-----------------------------------------------------------------------------
@@ -873,7 +885,7 @@ void KMHeaders::setFolder (KMFolder *aFo
QString str;
mSortInfo.fakeSort = 0;
- setColumnText( mSortCol, QIconSet( QPixmap()), columnText( mSortCol ));
+// setColumnText( mSortCol, QIconSet( QPixmap()), columnText( mSortCol ));
if (mFolder && mFolder==aFolder) {
int top = topItemIndex();
id = currentItemIndex();
@@ -987,27 +999,6 @@ void KMHeaders::setFolder (KMFolder *aFo
colText = colText + i18n( " (Status)" );
setColumnText( mPaintInfo.subCol, colText);
-
- if (mFolder) {
- if (mPaintInfo.showSize) {
- colText = i18n( "Size" );
- if (showingSize) {
- setColumnText( mPaintInfo.sizeCol, colText);
- } else {
- // add in the size field
- addColumn(colText);
-
- setColumnAlignment( mPaintInfo.sizeCol, AlignRight );
- }
- showingSize = true;
- } else {
- if (showingSize) {
- // remove the size field
- removeColumn(mPaintInfo.sizeCol);
- }
- showingSize = false;
- }
- }
END_TIMER(set_folder);
SHOW_TIMER(set_folder);
}
@@ -2598,8 +2589,8 @@ void KMHeaders::setOpen( QListViewItem *
void KMHeaders::setSorting( int column, bool ascending )
{
if (column != -1) {
- if (column != mSortCol)
- setColumnText( mSortCol, QIconSet( QPixmap()), columnText( mSortCol ));
+// if (column != mSortCol)
+// setColumnText( mSortCol, QIconSet( QPixmap()), columnText( mSortCol ));
if(mSortInfo.dirty || column != mSortInfo.column || ascending != \
mSortInfo.ascending) { //dirtied
QObject::disconnect(header(), SIGNAL(clicked(int)), this, \
SLOT(dirtySortOrder(int))); mSortInfo.dirty = true;
Index: kmail/kmheaders.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmheaders.h,v
retrieving revision 1.143
diff -u -3 -p -r1.143 kmheaders.h
--- kmail/kmheaders.h 20 Feb 2004 22:11:41 -0000 1.143
+++ kmail/kmheaders.h 25 Feb 2004 18:24:43 -0000
@@ -209,8 +209,9 @@ public slots:
recursively select its children. */
virtual void setSelected(QListViewItem *item, bool selected);
- /** switch size-column */
- void slotToggleSizeColumn();
+ /** switch size-column
+ 1 for activate, 0 for deactivate, -1 for toggle*/
+ void slotToggleSizeColumn(int mode = -1);
/** Provide information about number of messages in a folder */
void setFolderInfoStatus();
@@ -221,7 +222,7 @@ protected:
*pixFullySigned, *pixPartiallySigned, *pixUndefinedSigned,
*pixFullyEncrypted, *pixPartiallyEncrypted, *pixUndefinedEncrypted,
*pixFiller, *pixEncryptionProblematic,
- *pixSignatureProblematic;
+ *pixSignatureProblematic, *pixAttachment;
/** Look for color changes */
virtual bool event(QEvent *e);
@@ -340,8 +341,6 @@ private:
/** */
bool readSortOrder(bool set_selection=false);
- /** are we currently showing the size field? */
- bool showingSize;
/** Updated as side effect of KMHeaders::getMsg */
int getMsgIndex;
/** ditto */
@@ -372,6 +371,7 @@ private:
/** popup to switch columns */
KPopupMenu* mPopup;
int mSizeColumn;
+ int mAttachmentColumn;
};
#endif
Index: kmail/kmmessage.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmessage.cpp,v
retrieving revision 1.457
diff -u -3 -p -r1.457 kmmessage.cpp
--- kmail/kmmessage.cpp 15 Feb 2004 16:04:02 -0000 1.457
+++ kmail/kmmessage.cpp 25 Feb 2004 18:24:44 -0000
@@ -356,6 +356,8 @@ void KMMessage::fromDwString(const DwStr
setSignatureStateChar( headerField("X-KMail-SignatureState").at(0) );
setMDNSentState( static_cast<KMMsgMDNSentState>( \
headerField("X-KMail-MDN-Sent").at(0).latin1() ) ); }
+ if (attachmentState() == KMMsgAttachmentUnknown && readyToShow())
+ updateAttachmentState();
mNeedsAssembly = FALSE;
mDate = date();
@@ -4155,6 +4157,48 @@ void KMMessage::updateBodyPart(const QSt
}
}
+//-----------------------------------------------------------------------------
+void KMMessage::updateAttachmentState( DwBodyPart* part )
+{
+ if ( !part )
+ part = getFirstDwBodyPart();
+ if ( !part )
+ {
+ setStatus( KMMsgStatusHasNoAttach );
+ return;
+ }
+
+ if ( part->hasHeaders() &&
+ part->Headers().HasContentDisposition() &&
+ !part->Headers().ContentDisposition().Filename().empty() )
+ {
+ setStatus( KMMsgStatusHasAttach );
+ return;
+ }
+
+ // multipart
+ if ( part->hasHeaders() &&
+ part->Headers().HasContentType() &&
+ part->Body().FirstBodyPart() &&
+ (DwMime::kTypeMultipart == part->Headers().ContentType().Type() ) )
+ {
+ updateAttachmentState( part->Body().FirstBodyPart() );
+ }
+
+ // encapsulated message
+ if ( part->Body().Message() &&
+ part->Body().Message()->Body().FirstBodyPart() )
+ {
+ updateAttachmentState( part->Body().Message()->Body().FirstBodyPart() );
+ }
+
+ // next part
+ if ( part->Next() )
+ updateAttachmentState( part->Next() );
+ else if ( attachmentState() == KMMsgAttachmentUnknown )
+ setStatus( KMMsgStatusHasNoAttach );
+}
+
void KMMessage::setBodyFromUnicode( const QString & str ) {
QCString encoding = KMMsgBase::autoDetectCharset( charset(), \
KMMessage::preferredCharsets(), str ); if ( encoding.isEmpty() )
Index: kmail/kmmessage.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmessage.h,v
retrieving revision 1.162
diff -u -3 -p -r1.162 kmmessage.h
--- kmail/kmmessage.h 23 Feb 2004 22:18:13 -0000 1.162
+++ kmail/kmmessage.h 25 Feb 2004 18:24:44 -0000
@@ -804,6 +804,8 @@ public:
/** Returns the last DwBodyPart that was updated */
DwBodyPart* lastUpdatedPart() { return mLastUpdated; }
+ void updateAttachmentState(DwBodyPart * part = 0);
+
private:
/** Returns message body with quoting header and indented by the
given indentation string. This is suitable for including the message
Index: kmail/kmmsgbase.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmsgbase.cpp,v
retrieving revision 1.176
diff -u -3 -p -r1.176 kmmsgbase.cpp
--- kmail/kmmsgbase.cpp 22 Feb 2004 15:27:30 -0000 1.176
+++ kmail/kmmsgbase.cpp 25 Feb 2004 18:24:45 -0000
@@ -235,6 +235,14 @@ void KMMsgBase::setStatus(const KMMsgSta
mStatus &= ~KMMsgStatusSpam;
mStatus |= KMMsgStatusHam;
break;
+ case KMMsgStatusHasAttach:
+ mStatus &= ~KMMsgStatusHasNoAttach;
+ mStatus |= KMMsgStatusHasAttach;
+ break;
+ case KMMsgStatusHasNoAttach:
+ mStatus &= ~KMMsgStatusHasAttach;
+ mStatus |= KMMsgStatusHasNoAttach;
+ break;
default:
mStatus = aStatus;
break;
@@ -267,6 +275,8 @@ void KMMsgBase::setStatus(const char* aS
if (strchr(aXStatusStr, 'G')) setStatus(KMMsgStatusFlag);
if (strchr(aXStatusStr, 'P')) setStatus(KMMsgStatusSpam);
if (strchr(aXStatusStr, 'H')) setStatus(KMMsgStatusHam);
+ if (strchr(aXStatusStr, 'T')) setStatus(KMMsgStatusHasAttach);
+ if (strchr(aXStatusStr, 'C')) setStatus(KMMsgStatusHasNoAttach);
}
// Merge the contents of the "Status" field
@@ -464,6 +474,8 @@ QCString KMMsgBase::statusToStr(const KM
if (status & KMMsgStatusIgnored) sstr += 'I';
if (status & KMMsgStatusSpam) sstr += 'P';
if (status & KMMsgStatusHam) sstr += 'H';
+ if (status & KMMsgStatusHasAttach) sstr += 'T';
+ if (status & KMMsgStatusHasNoAttach) sstr += 'C';
return sstr;
}
@@ -1022,6 +1034,18 @@ void KMMsgBase::setTransferInProgress(bo
//-----------------------------------------------------------------------------
+KMMsgAttachmentState KMMsgBase::attachmentState()
+{
+ KMMsgStatus st = status();
+ if (st & KMMsgStatusHasAttach)
+ return KMMsgHasAttachment;
+ else if (st & KMMsgStatusHasNoAttach)
+ return KMMsgHasNoAttachment;
+ else
+ return KMMsgAttachmentUnknown;
+}
+
+//-----------------------------------------------------------------------------
static void swapEndian(QString &str)
{
uint len = str.length();
Index: kmail/kmmsgbase.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmsgbase.h,v
retrieving revision 1.67
diff -u -3 -p -r1.67 kmmsgbase.h
--- kmail/kmmsgbase.h 22 Feb 2004 15:27:30 -0000 1.67
+++ kmail/kmmsgbase.h 25 Feb 2004 18:24:45 -0000
@@ -35,7 +35,9 @@ enum MsgStatus
KMMsgStatusIgnored = 0x00000800,
KMMsgStatusTodo = 0x00001000,
KMMsgStatusSpam = 0x00002000,
- KMMsgStatusHam = 0x00004000
+ KMMsgStatusHam = 0x00004000,
+ KMMsgStatusHasAttach = 0x00008000,
+ KMMsgStatusHasNoAttach = 0x00010000
};
typedef uint KMMsgStatus;
@@ -102,6 +104,13 @@ typedef enum
KMMsgDnDActionASK=2
} KMMsgDnDAction;
+/** Flags for attachment state */
+typedef enum
+{
+ KMMsgHasAttachment,
+ KMMsgHasNoAttachment,
+ KMMsgAttachmentUnknown
+} KMMsgAttachmentState;
class KMMsgBase
@@ -361,6 +370,9 @@ public:
/** Set that the message shall not be deleted because it is still required */
void setTransferInProgress(bool value, bool force = false);
+ /** Return if the message has at least one attachment */
+ virtual KMMsgAttachmentState attachmentState();
+
protected:
KMFolder* mParent;
bool mDirty;
Index: kmail/pics/Makefile.am
===================================================================
RCS file: /home/kde/kdepim/kmail/pics/Makefile.am,v
retrieving revision 1.35
diff -u -3 -p -r1.35 Makefile.am
--- kmail/pics/Makefile.am 16 Nov 2003 17:01:27 -0000 1.35
+++ kmail/pics/Makefile.am 25 Feb 2004 18:24:45 -0000
@@ -8,7 +8,7 @@ pics_DATA = kmmsgdel.png kmmsgnew.png km
kmmsgpartiallyencrypted.png \
kmmsgpartiallysigned.png kmmsgfiller.png kmmsgfullyencrypted.png \
kmmsgfullysigned.png kmmsgundefinedencrypted.png \
- kmmsgundefinedsigned.png kmmsgspam.png \
+ kmmsgundefinedsigned.png kmmsgspam.png kmmsgattachment.png \
kmailwindowlayout1.png \
kmailwindowlayout2.png kmailwindowlayout3.png kmailwindowlayout4.png \
kmailwindowlayout5.png kmailwindowlayout1_smart_mime.png \
["kmmsgattachment.png" (image/png)]
_______________________________________________
KMail developers mailing list
KMail-devel@kde.org
https://mail.kde.org/mailman/listinfo/kmail-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic