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;
36 class CollectionStatisticsModelPrivate :
public CollectionModelPrivate
39 enum CountType { Total, Unread, Size };
40 Q_DECLARE_PUBLIC( CollectionStatisticsModel )
41 CollectionStatisticsModelPrivate( CollectionStatisticsModel *parent )
42 : CollectionModelPrivate( parent )
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 );
66 foreach ( Collection::Id currentCollection, children ) {
67 result += countRecursive( currentCollection, type );
72 CollectionStatisticsModel::CollectionStatisticsModel( QObject * parent ) :
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
87 Q_D(
const CollectionStatisticsModel );
88 if ( !index.isValid() )
91 Collection col = collectionForId( CollectionModel::data( index, CollectionIdRole ).toLongLong() );
94 CollectionStatistics statistics = col.statistics();
96 qint64 total = statistics.count();
97 qint64 unread = statistics.unreadCount();
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 );
106 if ( role == TotalRole )
108 else if ( role == UnreadRole )
110 else if ( role == SizeRole )
112 else if ( role == RecursiveUnreadRole )
113 return unreadRecursive;
114 else if ( role == RecursiveTotalRole )
115 return totalRecursive;
116 else if ( role == RecursiveSizeRole )
117 return sizeRecursive;
118 else if ( role == StatisticsRole ) {
120 var.setValue( statistics );
122 }
else if ( role == RecursiveStatisticsRole ) {
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"