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"