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"

//-----------------------------------------------------------------------------