// 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); } }
bool StorageModel::initializeMessageItem( Core::MessageItem * mi, int row, bool bUseReceiver ) const { KMMsgBase * msg = mFolder->getMsgBase( row ); if ( !msg ) return false; QString sender = msg->fromStrip(); QString receiver = msg->toStrip(); // Static for speed reasons static const QString noSubject = i18nc( "displayed as subject when the subject of a mail is empty", "No Subject" ); static const QString unknown( i18nc( "displayed when a mail has unknown sender, receiver or date", "Unknown" ) ); if ( sender.isEmpty() ) sender = unknown; if ( receiver.isEmpty() ) receiver = unknown; mi->initialSetup( msg->date(), mFolder->folderType() == KMFolderTypeImap ? msg->msgSizeServer() : msg->msgSize(), sender, receiver, bUseReceiver ? receiver : sender ); mi->setUniqueId( msg->getMsgSerNum() ); KPIM::MessageStatus stat = msg->messageStatus(); QString subject = msg->subject(); if ( subject.isEmpty() ) subject = '(' + noSubject + ')'; mi->setSubjectAndStatus( subject, stat ); setMessageItemData( mi, msg ); return true; }