Correct the sizes shown in the mtv for imap messages. Parts sum up the size of their children and compare this to their own.

svn path=/trunk/kdepim/; revision=284336
wilder-work
Carsten Burghardt 22 years ago
parent 7f31d57554
commit 58af24b20e
  1. 30
      kmmimeparttree.cpp
  2. 7
      kmmimeparttree.h

@ -23,13 +23,13 @@ KMMimePartTree::KMMimePartTree( KMReaderWin* readerWin,
QWidget* parent,
const char* name )
: KListView( parent, name ),
mReaderWin( readerWin )
mReaderWin( readerWin ), mSizeColumn(0)
{
setStyleDependantFrameWidth();
addColumn( i18n("Description") );
addColumn( i18n("Type") );
addColumn( i18n("Encoding") );
addColumn( i18n("Size") );
mSizeColumn = addColumn( i18n("Size") );
setColumnAlignment( 3, Qt::AlignRight );
restoreLayoutIfPresent();
@ -192,6 +192,23 @@ void KMMimePartTree::styleChange( QStyle& oldStyle )
KListView::styleChange( oldStyle );
}
//-----------------------------------------------------------------------------
void KMMimePartTree::correctSize( QListViewItem * item )
{
if (!item) return;
KIO::filesize_t totalSize = 0;
QListViewItem * myChild = item->firstChild();
while ( myChild )
{
totalSize += static_cast<KMMimePartTreeItem*>(myChild)->origSize();
myChild = myChild->nextSibling();
}
if ( totalSize > static_cast<KMMimePartTreeItem*>(item)->origSize() )
item->setText( mSizeColumn, KIO::convertSize(totalSize) );
if ( item->parent() )
correctSize( item->parent() );
}
//=============================================================================
KMMimePartTreeItem::KMMimePartTreeItem( KMMimePartTree * parent,
@ -204,11 +221,13 @@ KMMimePartTreeItem::KMMimePartTreeItem( KMMimePartTree * parent,
QString::null, // set by setIconAndTextForType()
encoding,
KIO::convertSize( size ) ),
mPartNode( node )
mPartNode( node ), mOrigSize(size)
{
if( node )
node->setMimePartTreeItem( this );
setIconAndTextForType( mimetype );
if ( parent )
parent->correctSize(this);
}
KMMimePartTreeItem::KMMimePartTreeItem( KMMimePartTreeItem * parent,
@ -222,7 +241,7 @@ KMMimePartTreeItem::KMMimePartTreeItem( KMMimePartTreeItem * parent,
QString::null, // set by setIconAndTextForType()
encoding,
KIO::convertSize( size ) ),
mPartNode( node )
mPartNode( node ), mOrigSize(size)
{
if( revertOrder && nextSibling() ){
QListViewItem* sib = nextSibling();
@ -233,6 +252,8 @@ KMMimePartTreeItem::KMMimePartTreeItem( KMMimePartTreeItem * parent,
if( node )
node->setMimePartTreeItem( this );
setIconAndTextForType( mimetype );
if ( listView() )
static_cast<KMMimePartTree*>(listView())->correctSize(this);
}
void KMMimePartTreeItem::setIconAndTextForType( const QString & mime )
@ -252,5 +273,4 @@ void KMMimePartTreeItem::setIconAndTextForType( const QString & mime )
}
#include "kmmimeparttree.moc"

@ -22,6 +22,8 @@ public:
const char* name = 0 );
virtual ~KMMimePartTree();
void correctSize( QListViewItem * item );
protected slots:
void itemClicked( QListViewItem* );
void itemRightClicked( QListViewItem*, const QPoint& );
@ -45,6 +47,7 @@ protected:
protected:
KMReaderWin* mReaderWin;
KMMimePartTreeItem* mCurrentContextMenuItem;
int mSizeColumn;
};
class KMMimePartTreeItem :public QListViewItem
@ -65,10 +68,14 @@ public:
bool revertOrder = false );
partNode* node() const { return mPartNode; }
KIO::filesize_t origSize() const { return mOrigSize; }
void setOrigSize( KIO::filesize_t size ) { mOrigSize = size; }
private:
void setIconAndTextForType( const QString & mimetype );
partNode* mPartNode;
KIO::filesize_t mOrigSize;
};
#endif // KMMIMEPARTTREE_H

Loading…
Cancel
Save