File indexing completed on 2025-01-05 04:55:46

0001 /*  models/keyrearangecolumnsproxymodel.cpp
0002 
0003     This file is part of Kleopatra, the KDE keymanager
0004     SPDX-FileCopyrightText: 2016 Bundesamt für Sicherheit in der Informationstechnik
0005     SPDX-FileContributor: Intevation GmbH
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include <config-libkleo.h>
0011 
0012 #include "keyrearrangecolumnsproxymodel.h"
0013 
0014 #include <libkleo/keygroup.h>
0015 
0016 #include <gpgme++/key.h>
0017 
0018 using namespace Kleo;
0019 using namespace GpgME;
0020 
0021 KeyRearrangeColumnsProxyModel::KeyRearrangeColumnsProxyModel(QObject *parent)
0022     : KRearrangeColumnsProxyModel(parent)
0023     , KeyListModelInterface()
0024 {
0025 }
0026 
0027 KeyListModelInterface *KeyRearrangeColumnsProxyModel::klm() const
0028 {
0029     auto *ret = dynamic_cast<KeyListModelInterface *>(sourceModel());
0030     Q_ASSERT(ret);
0031     return ret;
0032 }
0033 
0034 Key KeyRearrangeColumnsProxyModel::key(const QModelIndex &idx) const
0035 {
0036     return klm()->key(mapToSource(idx));
0037 }
0038 
0039 std::vector<GpgME::Key> KeyRearrangeColumnsProxyModel::keys(const QList<QModelIndex> &idxs) const
0040 {
0041     QList<QModelIndex> srcIdxs;
0042     srcIdxs.reserve(idxs.count());
0043     for (const QModelIndex &idx : idxs) {
0044         srcIdxs << mapToSource(idx);
0045     }
0046     return klm()->keys(srcIdxs);
0047 }
0048 
0049 KeyGroup KeyRearrangeColumnsProxyModel::group(const QModelIndex &idx) const
0050 {
0051     return klm()->group(mapToSource(idx));
0052 }
0053 
0054 QModelIndex KeyRearrangeColumnsProxyModel::index(const GpgME::Key &key) const
0055 {
0056     return mapFromSource(klm()->index(key));
0057 }
0058 
0059 QList<QModelIndex> KeyRearrangeColumnsProxyModel::indexes(const std::vector<GpgME::Key> &keys) const
0060 {
0061     QList<QModelIndex> myIdxs;
0062     const QList<QModelIndex> srcIdxs = klm()->indexes(keys);
0063     myIdxs.reserve(srcIdxs.count());
0064     for (const QModelIndex &idx : srcIdxs) {
0065         myIdxs << mapFromSource(idx);
0066     }
0067     return myIdxs;
0068 }
0069 
0070 QModelIndex KeyRearrangeColumnsProxyModel::index(const KeyGroup &group) const
0071 {
0072     return mapFromSource(klm()->index(group));
0073 }
0074 
0075 void KeyRearrangeColumnsProxyModel::sort(int column, Qt::SortOrder order)
0076 {
0077     const auto fakeIdx = createIndex(0, column);
0078     if (!fakeIdx.isValid()) {
0079         // Empty model?
0080         KRearrangeColumnsProxyModel::sort(column, order);
0081         return;
0082     }
0083     const auto remappedIdx = mapToSource(fakeIdx);
0084     KRearrangeColumnsProxyModel::sort(remappedIdx.column(), order);
0085 }