File indexing completed on 2024-05-12 05:36:51

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 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     QML_ELEMENT
0022 
0023 public:
0024     enum Roles {
0025         VisibleRole = Qt::UserRole + 99,
0026     };
0027 
0028     explicit ColumnSortModel(QObject *parent = nullptr);
0029 
0030     QVariant data(const QModelIndex &index, int role) const override;
0031 
0032     void setSourceModel(QAbstractItemModel *newSourceModel) override;
0033 
0034     QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override;
0035     QModelIndex mapToSource(const QModelIndex &proxyIndex) const override;
0036 
0037     Q_INVOKABLE void move(int fromRow, int toRow);
0038 
0039     QStringList sortedColumns() const;
0040     void setSortedColumns(const QStringList &newSortedColumns);
0041     Q_SIGNAL void sortedColumnsChanged();
0042 
0043     QString idRole() const;
0044     void setIdRole(const QString &newIdRole);
0045     Q_SIGNAL void idRoleChanged();
0046 
0047 private:
0048     int idRoleNumber() const;
0049 
0050     QList<int> m_rowMapping;
0051     QString m_idRole = QStringLiteral("id");
0052     mutable int m_idRoleNumber = -1;
0053 };