20 #include "collectionstatisticsmodel.h"
22 #include "collection.h"
23 #include "collectionmodel_p.h"
24 #include "collectionstatistics.h"
30 #include <QtGui/QFont>
32 using namespace Akonadi;
39 enum CountType { Total, Unread, Size };
45 qint64 countRecursive(
Collection::Id collection, CountType type )
const;
50 qint64 CollectionStatisticsModelPrivate::countRecursive(
Collection::Id collection,
51 CountType type )
const
55 case Unread: result = collections.value( collection ).statistics().unreadCount();
57 case Total: result = collections.value( collection ).statistics().count();
59 case Size: result = collections.value( collection ).statistics().size();
61 default: Q_ASSERT(
false );
65 const QVector<Collection::Id> children = childCollections.value( collection );
67 result += countRecursive( currentCollection, type );
78 int CollectionStatisticsModel::columnCount(
const QModelIndex & parent )
const
80 if ( parent.isValid() && parent.column() != 0 )
85 QVariant CollectionStatisticsModel::data(
const QModelIndex & index,
int role )
const
88 if ( !index.isValid() )
96 qint64 total = statistics.
count();
98 qint64 size = statistics.
size();
99 qint64 totalRecursive = d->countRecursive( col.
id(),
100 CollectionStatisticsModelPrivate::Total );
101 qint64 unreadRecursive = d->countRecursive( col.
id(),
102 CollectionStatisticsModelPrivate::Unread );
103 qint64 sizeRecursive = d->countRecursive( col.
id(),
104 CollectionStatisticsModelPrivate::Size );
113 return unreadRecursive;
115 return totalRecursive;
117 return sizeRecursive;
120 var.setValue( statistics );
124 var.setValue( statistics );
128 if ( role == Qt::DisplayRole &&
129 ( index.column() == 1 || index.column() == 2 || index.column() == 3 ) ) {
132 switch ( index.column() ) {
133 case 1 : value = unread;
break;
134 case 2 : value = total;
break;
135 case 3 : value = size;
break;
139 else if ( value == 0 )
140 return QLatin1String(
"-" );
141 else if ( index.column() == 3 )
142 return KGlobal::locale()->formatByteSize( value );
144 return QString::number( value );
147 if ( role == Qt::TextAlignmentRole && ( index.column() == 1 || index.column() == 2 || index.column() == 3 ) )
148 return Qt::AlignRight;
150 return CollectionModel::data( index, role );
153 QVariant CollectionStatisticsModel::headerData(
int section, Qt::Orientation orientation,
int role )
const
155 if ( orientation == Qt::Horizontal && role == Qt::DisplayRole )
157 case 1:
return i18nc(
"@title:column, number of unread messages",
"Unread" );
158 case 2:
return i18nc(
"@title:column, total number of messages",
"Total" );
159 case 3:
return i18nc(
"@title:column, total size (in bytes) of the collection",
"Size" );
162 return CollectionModel::headerData( section, orientation, role );
165 #include "collectionstatisticsmodel.moc"