File indexing completed on 2024-05-12 17:08:29

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #pragma once
0008 
0009 #include <QIdentityProxyModel>
0010 
0011 class ColumnDisplayModel : public QIdentityProxyModel
0012 {
0013     Q_OBJECT
0014     Q_PROPERTY(QVariantMap columnDisplay READ columnDisplay WRITE setColumnDisplay NOTIFY columnDisplayChanged)
0015     Q_PROPERTY(QStringList visibleColumnIds READ visibleColumnIds NOTIFY columnDisplayChanged)
0016     Q_PROPERTY(QString idRole READ idRole WRITE setIdRole NOTIFY idRoleChanged)
0017 
0018 public:
0019     enum Roles {
0020         DisplayStyleRole = Qt::UserRole + 99,
0021     };
0022     Q_ENUM(Roles)
0023 
0024     explicit ColumnDisplayModel(QObject *parent = nullptr);
0025 
0026     void setSourceModel(QAbstractItemModel *newSourceModel) override;
0027 
0028     QHash<int, QByteArray> roleNames() const override;
0029     QVariant data(const QModelIndex &index, int role) const override;
0030 
0031     Q_INVOKABLE void setDisplay(int column, const QString &display);
0032 
0033     QVariantMap columnDisplay() const;
0034     void setColumnDisplay(const QVariantMap &newColumnDisplay);
0035     Q_SIGNAL void columnDisplayChanged();
0036 
0037     QStringList visibleColumnIds() const;
0038 
0039     QString idRole() const;
0040     void setIdRole(const QString &newIdRole);
0041     Q_SIGNAL void idRoleChanged();
0042 
0043 private:
0044     int idRoleNumber() const;
0045 
0046     QHash<QString, QString> m_columnDisplay;
0047 
0048     QString m_idRole = QStringLiteral("id");
0049     mutable int m_idRoleNumber = -1;
0050 };