File indexing completed on 2024-06-16 04:50:37
0001 /* 0002 SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, 0003 a KDAB Group company, info@kdab.net 0004 SPDX-FileContributor: Stephen Kelly <stephen@kdab.com> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #include "etmviewstatesaver.h" 0010 0011 #include <QModelIndex> 0012 0013 #include "entitytreemodel.h" 0014 0015 using namespace Akonadi; 0016 0017 ETMViewStateSaver::ETMViewStateSaver(QObject *parent) 0018 : KConfigViewStateSaver(parent) 0019 { 0020 } 0021 0022 QModelIndex ETMViewStateSaver::indexFromConfigString(const QAbstractItemModel *model, const QString &key) const 0023 { 0024 if (key.startsWith(QLatin1Char('x'))) { 0025 return QModelIndex(); 0026 } 0027 0028 Item::Id id = key.mid(1).toLongLong(); 0029 if (id < 0) { 0030 return QModelIndex(); 0031 } 0032 0033 if (key.startsWith(QLatin1Char('c'))) { 0034 const QModelIndex idx = EntityTreeModel::modelIndexForCollection(model, Collection(id)); 0035 if (!idx.isValid()) { 0036 return QModelIndex(); 0037 } 0038 return idx; 0039 } else if (key.startsWith(QLatin1Char('i'))) { 0040 const QModelIndexList list = EntityTreeModel::modelIndexesForItem(model, Item(id)); 0041 if (list.isEmpty()) { 0042 return QModelIndex(); 0043 } 0044 return list.first(); 0045 } 0046 return QModelIndex(); 0047 } 0048 0049 QString ETMViewStateSaver::indexToConfigString(const QModelIndex &index) const 0050 { 0051 if (!index.isValid()) { 0052 return QStringLiteral("x-1"); 0053 } 0054 const auto c = index.data(EntityTreeModel::CollectionRole).value<Collection>(); 0055 if (c.isValid()) { 0056 return QStringLiteral("c%1").arg(c.id()); 0057 } 0058 auto id = index.data(EntityTreeModel::ItemIdRole).value<Item::Id>(); 0059 if (id >= 0) { 0060 return QStringLiteral("i%1").arg(id); 0061 } 0062 return QString(); 0063 } 0064 0065 void ETMViewStateSaver::selectCollections(const Akonadi::Collection::List &list) 0066 { 0067 QStringList colStrings; 0068 colStrings.reserve(list.count()); 0069 for (const Collection &col : list) { 0070 colStrings << QStringLiteral("c%1").arg(col.id()); 0071 } 0072 restoreSelection(colStrings); 0073 } 0074 0075 void ETMViewStateSaver::selectCollections(const QList<Collection::Id> &list) 0076 { 0077 QStringList colStrings; 0078 colStrings.reserve(list.count()); 0079 for (const Collection::Id &colId : list) { 0080 colStrings << QStringLiteral("c%1").arg(colId); 0081 } 0082 restoreSelection(colStrings); 0083 } 0084 0085 void ETMViewStateSaver::selectItems(const Akonadi::Item::List &list) 0086 { 0087 QStringList itemStrings; 0088 itemStrings.reserve(list.count()); 0089 for (const Item &item : list) { 0090 itemStrings << QStringLiteral("i%1").arg(item.id()); 0091 } 0092 restoreSelection(itemStrings); 0093 } 0094 0095 void ETMViewStateSaver::selectItems(const QList<Item::Id> &list) 0096 { 0097 QStringList itemStrings; 0098 itemStrings.reserve(list.count()); 0099 for (const Item::Id &itemId : list) { 0100 itemStrings << QStringLiteral("i%1").arg(itemId); 0101 } 0102 restoreSelection(itemStrings); 0103 } 0104 0105 void ETMViewStateSaver::setCurrentItem(const Akonadi::Item &item) 0106 { 0107 restoreCurrentItem(QStringLiteral("i%1").arg(item.id())); 0108 } 0109 0110 void ETMViewStateSaver::setCurrentCollection(const Akonadi::Collection &col) 0111 { 0112 restoreCurrentItem(QStringLiteral("c%1").arg(col.id())); 0113 } 0114 0115 #include "moc_etmviewstatesaver.cpp"