21 #include "favoritecollectionsmodel.h"
23 #include <QItemSelectionModel>
24 #include <QtCore/QMimeData>
26 #include <kconfiggroup.h>
28 #include <klocalizedstring.h>
32 #include "entitytreemodel.h"
33 #include "mimetypechecker.h"
34 #include "pastehelper_p.h"
36 using namespace Akonadi;
41 class FavoriteCollectionsModel::Private
45 : q( parent ), configGroup( group )
51 if ( labelMap.contains( collectionId ) ) {
52 return labelMap[ collectionId ];
59 const QString nameOfCollection = collectionIdx.data().toString();
61 QModelIndex idx = collectionIdx.parent();
62 while ( idx != QModelIndex() ) {
63 accountName = idx.data().toString();
67 if ( accountName.isEmpty() ) {
68 return nameOfCollection;
70 return nameOfCollection + QLatin1String(
" (" ) + accountName + QLatin1Char(
')' );
74 void clearAndUpdateSelection()
76 q->selectionModel()->clear();
84 if ( index.isValid() ) {
85 q->selectionModel()->select( index, QItemSelectionModel::Select );
89 void updateSelection()
92 updateSelectionId( collectionId );
98 collectionIds = configGroup.readEntry(
"FavoriteCollectionIds", QList<qint64>() );
99 const QStringList labels = configGroup.readEntry(
"FavoriteCollectionLabels", QStringList() );
101 const int numberOfLabels( labels.size() );
102 for (
int i = 0; i < numberOfCollection; ++i ) {
103 if ( i<numberOfLabels ) {
114 labels << labelForCollection( collectionId );
117 configGroup.writeEntry(
"FavoriteCollectionIds",
collectionIds );
118 configGroup.writeEntry(
"FavoriteCollectionLabels", labels );
119 configGroup.config()->sync();
125 QHash<qint64, QString> labelMap;
126 KConfigGroup configGroup;
131 d( new Private( group, this ) )
133 setSourceModel( source );
134 setFilterBehavior( ExactSelection );
137 connect( source, SIGNAL(modelReset()),
this, SLOT(clearAndUpdateSelection()) );
138 connect( source, SIGNAL(rowsInserted(QModelIndex,
int,
int)),
this, SLOT(updateSelection()) );
139 d->updateSelection();
149 d->collectionIds.clear();
150 foreach (
const Collection &col, collections ) {
151 d->collectionIds << col.
id();
154 d->clearAndUpdateSelection();
160 d->collectionIds << collection.
id();
161 d->updateSelectionId( collection.
id() );
167 d->collectionIds.removeAll( collection.
id() );
168 d->labelMap.remove( collection.
id() );
172 if ( !idx.isValid() ) {
176 selectionModel()->select( idx,
177 QItemSelectionModel::Deselect );
179 d->updateSelection();
196 return d->collectionIds;
201 Q_ASSERT( d->collectionIds.contains( collection.
id() ) );
202 d->labelMap[ collection.
id() ] = label;
207 if ( !idx.isValid() ) {
211 const QModelIndex index = mapFromSource( idx );
212 emit dataChanged( index, index );
215 QVariant Akonadi::FavoriteCollectionsModel::data(
const QModelIndex &index,
int role )
const
217 if ( index.column() == 0 &&
218 ( role == Qt::DisplayRole ||
219 role == Qt::EditRole ) ) {
220 const QModelIndex sourceIndex = mapToSource( index );
223 return d->labelForCollection( collectionId );
225 return KSelectionProxyModel::data( index, role );
229 bool FavoriteCollectionsModel::setData(
const QModelIndex& index,
const QVariant& value,
int role)
231 if ( index.isValid() && index.column() == 0 &&
232 role == Qt::EditRole ) {
233 const QString newLabel = value.toString();
234 if ( newLabel.isEmpty() ) {
237 const QModelIndex sourceIndex = mapToSource( index );
242 return Akonadi::SelectionProxyModel::setData( index, value, role );
250 return d->labelForCollection( collection.
id() );
253 QVariant FavoriteCollectionsModel::headerData(
int section, Qt::Orientation orientation,
int role )
const
256 orientation == Qt::Horizontal &&
257 role == Qt::DisplayRole ) {
258 return i18n(
"Favorite Folders" );
260 return KSelectionProxyModel::headerData( section, orientation, role );
264 bool FavoriteCollectionsModel::dropMimeData(
const QMimeData* data, Qt::DropAction action,
int row,
int column,
const QModelIndex& parent)
269 if ( data->hasFormat( QLatin1String(
"text/uri-list" ) ) ) {
270 const KUrl::List urls = KUrl::List::fromMimeData( data );
272 const QModelIndex sourceIndex = mapToSource( parent );
278 foreach (
const KUrl &url, urls ) {
286 action != Qt::CopyAction ) {
287 kDebug() <<
"Error: source and destination of move are the same.";
291 if ( !mimeChecker.isWantedItem( item ) ) {
292 kDebug() <<
"unwanted item" << mimeChecker.wantedMimeTypes() << item.
mimeType();
300 connect( job, SIGNAL(result(KJob*)), SLOT(pasteJobDone(KJob*)) );
313 QStringList FavoriteCollectionsModel::mimeTypes()
const
315 QStringList mts = Akonadi::SelectionProxyModel::mimeTypes();
316 if ( !mts.contains( QLatin1String(
"text/uri-list" ) ) ) {
317 mts.append( QLatin1String(
"text/uri-list" ) );
322 Qt::ItemFlags FavoriteCollectionsModel::flags(
const QModelIndex& index)
const
324 Qt::ItemFlags fs = Akonadi::SelectionProxyModel::flags( index );
325 if ( !index.isValid() ) {
326 fs |= Qt::ItemIsDropEnabled;
331 void FavoriteCollectionsModel::pasteJobDone( KJob *job )
333 if ( job->error() ) {
334 kDebug() << job->errorString();
338 #include "moc_favoritecollectionsmodel.cpp"