// 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 HeaderItem::irefresh() { KMHeaders *headers = static_cast<KMHeaders*>(listView()); NestingPolicy threadingPolicy = headers->getNestingPolicy(); if ((threadingPolicy == AlwaysOpen) || (threadingPolicy == DefaultOpen)) { //Avoid opening items as QListView is currently slow to do so. setOpen(true); return; } if (threadingPolicy == DefaultClosed) return; //default to closed // otherwise threadingPolicy == OpenUnread if (parent() && parent()->isOpen()) { setOpen(true); return; } KMMsgBase *mMsgBase = headers->folder()->getMsgBase( mMsgId ); mSerNum = mMsgBase->getMsgSerNum(); if (mMsgBase->isNew() || mMsgBase->isUnread() || mMsgBase->isImportant() || mMsgBase->isTodo() || mMsgBase->isWatched() ) { setOpen(true); HeaderItem * topOfThread = this; while(topOfThread->parent()) topOfThread = (HeaderItem*)topOfThread->parent(); topOfThread->setOpenRecursive(true); } }
const QPixmap *HeaderItem::pixmap(int col) const { KMHeaders *headers = static_cast<KMHeaders*>(listView()); KMMsgBase *msgBase = headers->folder()->getMsgBase( mMsgId ); if ( col == headers->paintInfo()->subCol ) { PixmapList pixmaps; if ( !headers->mPaintInfo.showSpamHam ) { // Have the spam/ham and watched/ignored icons first, I guess. if ( msgBase->isSpam() ) pixmaps << *KMHeaders::pixSpam; if ( msgBase->isHam() ) pixmaps << *KMHeaders::pixHam; } if ( !headers->mPaintInfo.showWatchedIgnored ) { if ( msgBase->isIgnored() ) pixmaps << *KMHeaders::pixIgnored; if ( msgBase->isWatched() ) pixmaps << *KMHeaders::pixWatched; } if ( !headers->mPaintInfo.showStatus ) { const QPixmap *pix = statusIcon(msgBase); if ( pix ) pixmaps << *pix; } // Only merge the attachment icon in if that is configured. if ( headers->paintInfo()->showAttachmentIcon && !headers->paintInfo()->showAttachment && msgBase->attachmentState() == KMMsgHasAttachment ) pixmaps << *KMHeaders::pixAttachment; // Only merge the crypto icons in if that is configured. if ( headers->paintInfo()->showCryptoIcons ) { const QPixmap *pix; if ( !headers->paintInfo()->showCrypto ) if ( (pix = cryptoIcon(msgBase)) ) pixmaps << *pix; if ( !headers->paintInfo()->showSigned ) if ( (pix = signatureIcon(msgBase)) ) pixmaps << *pix; } if ( !headers->mPaintInfo.showImportant ) if ( msgBase->isImportant() ) pixmaps << *KMHeaders::pixFlag; if ( !headers->mPaintInfo.showTodo ) if ( msgBase->isTodo() ) pixmaps << *KMHeaders::pixTodo; static QPixmap mergedpix; mergedpix = pixmapMerge( pixmaps ); return &mergedpix; } else if ( col == headers->paintInfo()->statusCol ) { return statusIcon(msgBase); } else if ( col == headers->paintInfo()->attachmentCol ) { if ( msgBase->attachmentState() == KMMsgHasAttachment ) return KMHeaders::pixAttachment; } else if ( col == headers->paintInfo()->importantCol ) { if ( msgBase->isImportant() ) return KMHeaders::pixFlag; } else if ( col == headers->paintInfo()->todoCol ) { if ( msgBase->isTodo() ) return KMHeaders::pixTodo; } else if ( col == headers->paintInfo()->spamHamCol ) { if ( msgBase->isSpam() ) return KMHeaders::pixSpam; if ( msgBase->isHam() ) return KMHeaders::pixHam; } else if ( col == headers->paintInfo()->watchedIgnoredCol ) { if ( msgBase->isWatched() ) return KMHeaders::pixWatched; if ( msgBase->isIgnored() ) return KMHeaders::pixIgnored; } else if ( col == headers->paintInfo()->signedCol ) { return signatureIcon(msgBase); } else if ( col == headers->paintInfo()->cryptoCol ) { return cryptoIcon(msgBase); } return 0; }