Source Code (Use browser search to find items of interest.)
Class Index
kmail'KMHeaderItem (./kdenetwork/kmail/kmheaders.cpp:63)
class KMHeaderItem : public QListViewItem
{
public:
KMFolder *mFolder;
int mMsgId;
QColor *mColor;
QString mSortDate, mSortSubject, mSortSender, mSortArrival;
KMPaintInfo *mPaintInfo;
// Constuction a new list view item with the given colors and pixmap
KMHeaderItem( QListView* parent, KMFolder* folder, int msgId,
KMPaintInfo *aPaintInfo )
: QListViewItem( parent ),
mFolder( folder ),
mMsgId( msgId ),
mPaintInfo( aPaintInfo )
{
irefresh();
}
// Constuction a new list view item with the given parent, colors, & pixmap
KMHeaderItem( QListViewItem* parent, KMFolder* folder, int msgId,
KMPaintInfo *aPaintInfo )
: QListViewItem( parent ),
mFolder( folder ),
mMsgId( msgId ),
mPaintInfo( aPaintInfo )
{
irefresh();
}
// Update the msgId this item corresponds to.
void setMsgId( int aMsgId )
{
mMsgId = aMsgId;
}
// Profiling note: About 30% of the time taken to initialize the
// listview is spent in this function. About 60% is spent in operator
// new and QListViewItem::QListViewItem.
void irefresh()
{
QString result;
KMMsgStatus flag;
QString fromStr, subjStr;
KMMsgBase *mMsgBase = mFolder->getMsgBase( mMsgId );
if(mMsgBase==NULL)
return;
flag = mMsgBase->status();
if (mPaintInfo->flagCol >= 0)
setText( mPaintInfo->flagCol, " " + QString( QChar( (char)flag )));
if (mFolder == kernel->outboxFolder() || mFolder == kernel->sentFolder())
fromStr = KMMessage::stripEmailAddr(mMsgBase->to());
else
fromStr = KMMessage::stripEmailAddr(mMsgBase->from());
if (fromStr.isEmpty()) fromStr = i18n("Unknown");
if (fromStr.isEmpty()) {
debug( QString("Null message %1").arg( mMsgId ) );
}
if (fromStr == i18n("Unknown")) {
debug( QString("Null messagex %1").arg( mMsgId ) );
}
setText( mPaintInfo->senderCol, fromStr.simplifyWhiteSpace() );
subjStr = mMsgBase->subject();
if (subjStr.isEmpty()) subjStr = i18n("No Subject");
setText( mPaintInfo->subCol, subjStr.simplifyWhiteSpace() );
time_t mDate = mMsgBase->date();
setText( mPaintInfo->dateCol, QString( ctime( &mDate )).simplifyWhiteSpace() );
mColor = &mPaintInfo->colFore;
switch (flag)
{
case KMMsgStatusNew:
setPixmap( 0, *KMHeaders::pixNew );
mColor = &mPaintInfo->colNew;
break;
case KMMsgStatusUnread:
setPixmap( 0, *KMHeaders::pixUns );
mColor = &mPaintInfo->colUnread;
break;
case KMMsgStatusDeleted:
setPixmap( 0, *KMHeaders::pixDel );
break;
case KMMsgStatusReplied:
setPixmap( 0, *KMHeaders::pixRep );
break;
case KMMsgStatusForwarded:
setPixmap( 0, *KMHeaders::pixFwd );
break;
case KMMsgStatusQueued:
setPixmap( 0, *KMHeaders::pixQueued );
break;
case KMMsgStatusSent:
setPixmap( 0, *KMHeaders::pixSent );
break;
default:
setPixmap( 0, *KMHeaders::pixOld );
break;
};
const int dateLength = 100;
char cDate[dateLength + 1];
strftime( cDate, dateLength, "%Y:%j:%T", gmtime( &mDate ));
mSortDate = cDate;
mSortArrival = QString( "%1" ).arg( mMsgId, 8, 36 );
mSortSender = text(mPaintInfo->senderCol).lower() + " " + mSortDate;
mSortSubject = KMMsgBase::skipKeyword( text(mPaintInfo->subCol).lower() ) + " " + mSortDate;
}
// Retrun the msgId of the message associated with this item
int msgId()
{
return mMsgId;
}
// Updte this item to summarise a new folder and message
void reset( KMFolder *aFolder, int aMsgId )
{
mFolder = aFolder;
mMsgId = aMsgId;
irefresh();
}
// Change color (new/unread/read status has changed)
void setColor( QColor *c )
{
mColor = c;
repaint();
}
// Begin this code may be relicensed by Troll Tech
void paintCell( QPainter * p, const QColorGroup & cg,
int column, int width, int align )
{
// Change width() if you change this.
if ( !p )
return;
QListView *lv = listView();
int r = lv ? lv->itemMargin() : 1;
const QPixmap * icon = pixmap( column );
int marg = lv ? lv->itemMargin() : 1;
if (!mPaintInfo->pixmapOn)
p->fillRect( 0, 0, width, height(), cg.base() );
else {
QRect rect = lv->itemRect( this );
int cw = 0;
cw = lv->header()->cellPos( column );
p->drawTiledPixmap( 0, 0, width, height(),
mPaintInfo->pixmap,
rect.left() + cw + lv->contentsX(),
rect.top() + lv->contentsY() );
}
if ( isSelected() &&
(column==0 || listView()->allColumnsShowFocus()) ) {
p->fillRect( r - marg, 0, width - r + marg, height(),
cg.brush( QColorGroup::Highlight ) );
p->setPen( cg.highlightedText() );
} else {
p->setPen( *mColor );
}
if ( icon ) {
p->drawPixmap( r, (height()-icon->height())/2, *icon );
r += icon->width() + listView()->itemMargin();
}
QString t = text( column );
if ( !t.isEmpty() ) {
p->drawText( r, 0, width-marg-r, height(),
align | AlignVCenter, t );
}
}
// End this code may be relicensed by Troll Tech
virtual QString key( int column, bool /*ascending*/ ) const {
if (column == mPaintInfo->dateCol) {
if (mPaintInfo->orderOfArrival)
return mSortArrival;
else
return mSortDate;
}
else if (column == mPaintInfo->subCol)
return mSortSubject;
else if (column == mPaintInfo->senderCol)
return mSortSender;
else
return text(column);
}
};
#include "qcstring.h"
//-----------------------------------------------------------------------------
kmail'KMHeaderItem::key() (./kdenetwork/kmail/kmheaders.cpp:249)
virtual QString key( int column, bool /*ascending*/ ) const {
if (column == mPaintInfo->dateCol) {
if (mPaintInfo->orderOfArrival)
return mSortArrival;
else
return mSortDate;
}
else if (column == mPaintInfo->subCol)
return mSortSubject;
else if (column == mPaintInfo->senderCol)
return mSortSender;
else
return text(column);
}
};
#include "qcstring.h"
//-----------------------------------------------------------------------------