File indexing completed on 2024-05-19 16:39:56

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 <QVariantList>
0011 
0012 class ColumnSortModel : public QIdentityProxyModel
0013 {
0014     Q_OBJECT
0015     //     Q_PROPERTY(QStringList excludedColumns READ excludedColumns WRITE setExcludedColumns NOTIFY excludedColumnsChanged)
0016     //     Q_PROPERTY(QStringList visibleColumns READ visibleColumns WRITE setVisibleColumns NOTIFY visibleColumnsChanged)
0017     //     Q_PROPERTY(QList<int> columnWeights READ columnWeights WRITE setColumnWeights NOTIFY columnWeightsChanged)
0018     //     Q_PROPERTY(QString columnIdRole READ columnIdRole WRITE setColumnIdRole NOTIFY columnIdRoleChanged)
0019     Q_PROPERTY(QStringList sortedColumns READ sortedColumns WRITE setSortedColumns NOTIFY sortedColumnsChanged)
0020     Q_PROPERTY(QString idRole READ idRole WRITE setIdRole NOTIFY idRoleChanged)
0021 
0022 public:
0023     enum Roles {
0024         VisibleRole = Qt::UserRole + 99,
0025     };
0026 
0027     explicit ColumnSortModel(QObject *parent = nullptr);
0028 
0029     QVariant data(const QModelIndex &index, int role) const override;
0030 
0031     void setSourceModel(QAbstractItemModel *newSourceModel) override;
0032 
0033     QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override;
0034     QModelIndex mapToSource(const QModelIndex &proxyIndex) const override;
0035 
0036     Q_INVOKABLE void move(int fromRow, int toRow);
0037 
0038     QStringList sortedColumns() const;
0039     void setSortedColumns(const QStringList &newSortedColumns);
0040     Q_SIGNAL void sortedColumnsChanged();
0041 
0042     QString idRole() const;
0043     void setIdRole(const QString &newIdRole);
0044     Q_SIGNAL void idRoleChanged();
0045 
0046 private:
0047     int idRoleNumber() const;
0048 
0049     QVector<int> m_rowMapping;
0050     QString m_idRole = QStringLiteral("id");
0051     mutable int m_idRoleNumber = -1;
0052 };