21 #include "favoritecollectionsmodel.h"
23 #include <QItemSelectionModel>
24 #include <QtCore/QMimeData>
26 #include <kconfiggroup.h>
31 #include "entitytreemodel.h"
32 #include "mimetypechecker.h"
33 #include "pastehelper_p.h"
35 using namespace Akonadi;
40 class FavoriteCollectionsModel::Private
44 : q( parent ), configGroup( group )
50 if ( labelMap.contains( collectionId ) ) {
51 return labelMap[ collectionId ];
58 const QString nameOfCollection = collectionIdx.data().toString();
60 QModelIndex idx = collectionIdx.parent();
61 while ( idx != QModelIndex() ) {
62 accountName = idx.data().toString();
66 if ( accountName.isEmpty() ) {
67 return nameOfCollection;
69 return nameOfCollection + QLatin1String(
" (" ) + accountName + QLatin1Char(
')' );
73 void clearAndUpdateSelection()
75 q->selectionModel()->clear();
83 if ( index.isValid() ) {
84 q->selectionModel()->select( index, QItemSelectionModel::Select );
88 void updateSelection()
91 updateSelectionId( collectionId );
97 collectionIds = configGroup.readEntry(
"FavoriteCollectionIds", QList<qint64>() );
98 const QStringList labels = configGroup.readEntry(
"FavoriteCollectionLabels", QStringList() );
100 const int numberOfLabels( labels.size() );
101 for (
int i = 0; i < numberOfCollection; ++i ) {
102 if ( i<numberOfLabels ) {
113 labels << labelForCollection( collectionId );
116 configGroup.writeEntry(
"FavoriteCollectionIds",
collectionIds );
117 configGroup.writeEntry(
"FavoriteCollectionLabels", labels );
118 configGroup.config()->sync();
124 QHash<qint64, QString> labelMap;
125 KConfigGroup configGroup;
130 d( new Private( group, this ) )
132 setSourceModel( source );
133 setFilterBehavior( ExactSelection );
136 connect( source, SIGNAL(modelReset()),
this, SLOT(clearAndUpdateSelection()) );
137 connect( source, SIGNAL(rowsInserted(QModelIndex,
int,
int)),
this, SLOT(updateSelection()) );
138 d->updateSelection();
148 d->collectionIds.clear();
149 foreach (
const Collection &col, collections ) {
150 d->collectionIds << col.
id();
153 d->clearAndUpdateSelection();
159 d->collectionIds << collection.
id();
160 d->updateSelectionId( collection.
id() );
166 d->collectionIds.removeAll( collection.
id() );
167 d->labelMap.remove( collection.
id() );
171 if ( !idx.isValid() ) {
175 selectionModel()->select( idx,
176 QItemSelectionModel::Deselect );
178 d->updateSelection();
195 return d->collectionIds;
200 Q_ASSERT( d->collectionIds.contains( collection.
id() ) );
201 d->labelMap[ collection.
id() ] = label;
206 if ( !idx.isValid() ) {
210 const QModelIndex index = mapFromSource( idx );
211 emit dataChanged( index, index );
214 QVariant Akonadi::FavoriteCollectionsModel::data(
const QModelIndex &index,
int role )
const
216 if ( index.column() == 0 &&
217 ( role == Qt::DisplayRole ||
218 role == Qt::EditRole ) ) {
219 const QModelIndex sourceIndex = mapToSource( index );
222 return d->labelForCollection( collectionId );
224 return KSelectionProxyModel::data( index, role );
228 bool FavoriteCollectionsModel::setData(
const QModelIndex& index,
const QVariant& value,
int role)
230 if ( index.isValid() && index.column() == 0 &&
231 role == Qt::EditRole ) {
232 const QString newLabel = value.toString();
233 if ( newLabel.isEmpty() ) {
236 const QModelIndex sourceIndex = mapToSource( index );
241 return Akonadi::SelectionProxyModel::setData( index, value, role );
249 return d->labelForCollection( collection.
id() );
252 QVariant FavoriteCollectionsModel::headerData(
int section, Qt::Orientation orientation,
int role )
const
255 orientation == Qt::Horizontal &&
256 role == Qt::DisplayRole ) {
257 return i18n(
"Favorite Folders" );
259 return KSelectionProxyModel::headerData( section, orientation, role );
263 bool FavoriteCollectionsModel::dropMimeData(
const QMimeData* data, Qt::DropAction action,
int row,
int column,
const QModelIndex& parent)
268 if ( data->hasFormat( QLatin1String(
"text/uri-list" ) ) ) {
269 const KUrl::List urls = KUrl::List::fromMimeData( data );
271 const QModelIndex sourceIndex = mapToSource( parent );
277 foreach (
const KUrl &url, urls ) {
285 action != Qt::CopyAction ) {
286 kDebug() <<
"Error: source and destination of move are the same.";
290 if ( !mimeChecker.isWantedItem( item ) ) {
291 kDebug() <<
"unwanted item" << mimeChecker.wantedMimeTypes() << item.
mimeType();
299 connect( job, SIGNAL(result(KJob*)), SLOT(pasteJobDone(KJob*)) );
312 QStringList FavoriteCollectionsModel::mimeTypes()
const
314 QStringList mts = Akonadi::SelectionProxyModel::mimeTypes();
315 if ( !mts.contains( QLatin1String(
"text/uri-list" ) ) ) {
316 mts.append( QLatin1String(
"text/uri-list" ) );
321 Qt::ItemFlags FavoriteCollectionsModel::flags(
const QModelIndex& index)
const
323 Qt::ItemFlags fs = Akonadi::SelectionProxyModel::flags( index );
324 if ( !index.isValid() ) {
325 fs |= Qt::ItemIsDropEnabled;
330 void FavoriteCollectionsModel::pasteJobDone( KJob *job )
332 if ( job->error() ) {
333 kDebug() << job->errorString();
337 #include "moc_favoritecollectionsmodel.cpp"