20 #include "collectionstatisticsmodel.h"
22 #include "collection.h"
23 #include "collectionmodel_p.h"
24 #include "collectionstatistics.h"
29 #include <klocalizedstring.h>
33 using namespace Akonadi;
40 enum CountType { Total, Unread, Size };
46 qint64 countRecursive(
Collection::Id collection, CountType type )
const;
51 qint64 CollectionStatisticsModelPrivate::countRecursive(
Collection::Id collection,
52 CountType type )
const
56 case Unread: result = collections.value( collection ).statistics().unreadCount();
58 case Total: result = collections.value( collection ).statistics().count();
60 case Size: result = collections.value( collection ).statistics().size();
62 default: Q_ASSERT(
false );
66 const QVector<Collection::Id> children = childCollections.value( collection );
68 result += countRecursive( currentCollection, type );
81 if ( parent.isValid() && parent.column() != 0 ) {
90 if ( !index.isValid() ) {
100 qint64 total = statistics.
count();
102 qint64 size = statistics.
size();
103 qint64 totalRecursive = d->countRecursive( col.
id(),
104 CollectionStatisticsModelPrivate::Total );
105 qint64 unreadRecursive = d->countRecursive( col.
id(),
106 CollectionStatisticsModelPrivate::Unread );
107 qint64 sizeRecursive = d->countRecursive( col.
id(),
108 CollectionStatisticsModelPrivate::Size );
117 return unreadRecursive;
119 return totalRecursive;
121 return sizeRecursive;
124 var.setValue( statistics );
128 var.setValue( statistics );
132 if ( role == Qt::DisplayRole &&
133 ( index.column() == 1 || index.column() == 2 || index.column() == 3 ) ) {
136 switch ( index.column() ) {
137 case 1 : value = unread;
break;
138 case 2 : value = total;
break;
139 case 3 : value = size;
break;
143 }
else if ( value == 0 ) {
144 return QLatin1String(
"-" );
145 }
else if ( index.column() == 3 ) {
146 return KGlobal::locale()->formatByteSize( value );
148 return QString::number( value );
152 if ( role == Qt::TextAlignmentRole && ( index.column() == 1 || index.column() == 2 || index.column() == 3 ) ) {
153 return Qt::AlignRight;
156 return CollectionModel::data( index, role );
161 if ( orientation == Qt::Horizontal && role == Qt::DisplayRole ) {
163 case 1:
return i18nc(
"@title:column, number of unread messages",
"Unread" );
164 case 2:
return i18nc(
"@title:column, total number of messages",
"Total" );
165 case 3:
return i18nc(
"@title:column, total size (in bytes) of the collection",
"Size" );
169 return CollectionModel::headerData( section, orientation, role );