20 #include "collectionmodel.h"
21 #include "collectionmodel_p.h"
23 #include "collectionutils_p.h"
24 #include "collectionmodifyjob.h"
25 #include "entitydisplayattribute.h"
27 #include "pastehelper_p.h"
34 #include <QtCore/QMimeData>
37 using namespace Akonadi;
40 QAbstractItemModel( parent ),
50 : QAbstractItemModel( parent ),
60 d->childCollections.clear();
61 d->collections.clear();
69 int CollectionModel::columnCount(
const QModelIndex & parent )
const
71 if ( parent.isValid() && parent.column() != 0 ) {
77 QVariant CollectionModel::data(
const QModelIndex & index,
int role )
const
80 if ( !index.isValid() ) {
84 const Collection col = d->collections.value( index.internalId() );
89 if ( index.column() == 0 && ( role == Qt::DisplayRole || role == Qt::EditRole ) ) {
94 case Qt::DecorationRole:
95 if ( index.column() == 0 ) {
100 return KIcon( CollectionUtils::defaultIconName( col ) );
108 return QVariant::fromValue( col );
113 QModelIndex CollectionModel::index(
int row,
int column,
const QModelIndex & parent )
const
116 if ( column >= columnCount() || column < 0 ) {
117 return QModelIndex();
120 QVector<Collection::Id> list;
121 if ( !parent.isValid() ) {
124 if ( parent.column() > 0 ) {
125 return QModelIndex();
127 list = d->childCollections.value( parent.internalId() );
130 if ( row < 0 || row >= list.size() ) {
131 return QModelIndex();
133 if ( !d->collections.contains( list.at( row ) ) ) {
134 return QModelIndex();
136 return createIndex( row, column, reinterpret_cast<void*>( d->collections.value( list.at(row) ).
id() ) );
139 QModelIndex CollectionModel::parent(
const QModelIndex & index )
const
142 if ( !index.isValid() ) {
143 return QModelIndex();
146 const Collection col = d->collections.value( index.internalId() );
148 return QModelIndex();
153 return QModelIndex();
155 QVector<Collection::Id> list;
158 int parentRow = list.indexOf( parentCol.
id() );
159 if ( parentRow < 0 ) {
160 return QModelIndex();
163 return createIndex( parentRow, 0, reinterpret_cast<void*>( parentCol.
id() ) );
166 int CollectionModel::rowCount(
const QModelIndex & parent )
const
169 QVector<Collection::Id> list;
170 if ( parent.isValid() ) {
171 list = d->childCollections.value( parent.internalId() );
179 QVariant CollectionModel::headerData(
int section, Qt::Orientation orientation,
int role )
const
183 if ( section == 0 && orientation == Qt::Horizontal && role == Qt::DisplayRole ) {
184 return d->headerContent;
186 return QAbstractItemModel::headerData( section, orientation, role );
189 bool CollectionModel::setHeaderData(
int section, Qt::Orientation orientation,
const QVariant &value,
int role )
193 if ( section == 0 && orientation == Qt::Horizontal && role == Qt::EditRole ) {
194 d->headerContent = value.toString();
201 bool CollectionModel::setData(
const QModelIndex & index,
const QVariant & value,
int role )
204 if ( index.column() == 0 && role == Qt::EditRole ) {
206 Collection col = d->collections.value( index.internalId() );
207 if ( !col.
isValid() || value.toString().isEmpty() ) {
210 col.
setName( value.toString() );
212 connect( job, SIGNAL(result(KJob*)), SLOT(editDone(KJob*)) );
215 return QAbstractItemModel::setData( index, value, role );
218 Qt::ItemFlags CollectionModel::flags(
const QModelIndex & index )
const
224 if ( !index.isValid() ) {
228 Qt::ItemFlags flags = QAbstractItemModel::flags( index );
230 flags = flags | Qt::ItemIsDragEnabled;
233 if ( index.isValid() ) {
234 col = d->collections.value( index.internalId() );
237 return flags | Qt::ItemIsDropEnabled;
245 if ( index.column() == 0 ) {
246 flags = flags | Qt::ItemIsEditable;
248 flags = flags | Qt::ItemIsDropEnabled;
255 Qt::DropActions CollectionModel::supportedDropActions()
const
257 return Qt::CopyAction | Qt::MoveAction;
260 QStringList CollectionModel::mimeTypes()
const
262 return QStringList() << QLatin1String(
"text/uri-list" );
265 QMimeData *CollectionModel::mimeData(
const QModelIndexList &indexes)
const
267 QMimeData *data =
new QMimeData();
269 foreach (
const QModelIndex &index, indexes ) {
270 if ( index.column() != 0 ) {
274 urls <<
Collection( index.internalId() ).url();
276 urls.populateMimeData( data );
281 bool CollectionModel::dropMimeData(
const QMimeData * data, Qt::DropAction action,
int row,
int column,
const QModelIndex & parent)
284 if ( !( action & supportedDropActions() ) ) {
290 if ( row >= 0 && column >= 0 ) {
291 idx = index( row, column, parent );
296 if ( !idx.isValid() ) {
300 const Collection parentCol = d->collections.value( idx.internalId() );
306 connect( job, SIGNAL(result(KJob*)), SLOT(dropResult(KJob*)) );
313 return d->collections.value(
id );
319 d->fetchStatistics = enable;
326 d->unsubscribed = include;
331 #include "moc_collectionmodel.cpp"