File indexing completed on 2024-05-19 05:37:22

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 #include <qqmlregistration.h>
0011 
0012 class ColumnDisplayModel : public QIdentityProxyModel
0013 {
0014     Q_OBJECT
0015     Q_PROPERTY(QVariantMap columnDisplay READ columnDisplay WRITE setColumnDisplay NOTIFY columnDisplayChanged)
0016     Q_PROPERTY(QStringList visibleColumnIds READ visibleColumnIds NOTIFY columnDisplayChanged)
0017     Q_PROPERTY(QString idRole READ idRole WRITE setIdRole NOTIFY idRoleChanged)
0018     QML_ELEMENT
0019 
0020 public:
0021     enum Roles {
0022         DisplayStyleRole = Qt::UserRole + 99,
0023     };
0024     Q_ENUM(Roles)
0025 
0026     explicit ColumnDisplayModel(QObject *parent = nullptr);
0027 
0028     void setSourceModel(QAbstractItemModel *newSourceModel) override;
0029 
0030     QHash<int, QByteArray> roleNames() const override;
0031     QVariant data(const QModelIndex &index, int role) const override;
0032 
0033     Q_INVOKABLE void setDisplay(int column, const QString &display);
0034 
0035     QVariantMap columnDisplay() const;
0036     void setColumnDisplay(const QVariantMap &newColumnDisplay);
0037     Q_SIGNAL void columnDisplayChanged();
0038 
0039     QStringList visibleColumnIds() const;
0040 
0041     QString idRole() const;
0042     void setIdRole(const QString &newIdRole);
0043     Q_SIGNAL void idRoleChanged();
0044 
0045 private:
0046     int idRoleNumber() const;
0047 
0048     QHash<QString, QString> m_columnDisplay;
0049 
0050     QString m_idRole = QStringLiteral("id");
0051     mutable int m_idRoleNumber = -1;
0052 };