File indexing completed on 2024-05-12 15:35:15

0001 /*
0002     SPDX-FileCopyrightText: 2012 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef COLUMNPROXYMODEL_H
0008 #define COLUMNPROXYMODEL_H
0009 
0010 #include <QAbstractListModel>
0011 
0012 class ColumnProxyModel : public QAbstractListModel
0013 {
0014     Q_OBJECT
0015     Q_PROPERTY(QModelIndex rootIndex READ rootIndex WRITE setRootIndex NOTIFY rootIndexChanged)
0016     //     Q_PROPERTY(QAbstractItemModel* sourceModel READ sourceModel WRITE setSourceModel) //rootIndex sets the model
0017     Q_PROPERTY(int column READ column WRITE setColumn)
0018 public:
0019     explicit ColumnProxyModel(QObject *parent = nullptr);
0020 
0021     void setRootIndex(const QModelIndex &idx);
0022     QModelIndex rootIndex() const;
0023 
0024     void setSourceModel(QAbstractItemModel *sourceModel);
0025     QAbstractItemModel *sourceModel() const
0026     {
0027         return m_sourceModel;
0028     }
0029 
0030     int column() const;
0031     void setColumn(int col);
0032 
0033     Q_SCRIPTABLE static QModelIndex indexFromModel(QAbstractItemModel *model, int row, int column = 0, const QModelIndex &parent = QModelIndex());
0034     Q_SCRIPTABLE QModelIndex indexAt(int row, const QModelIndex &parent = QModelIndex()) const;
0035 
0036     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0037     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0038     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
0039     QHash<int, QByteArray> roleNames() const override;
0040 
0041     bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
0042 
0043 Q_SIGNALS:
0044     void rootIndexChanged();
0045 
0046 private:
0047     QModelIndex proxyIndex(const QModelIndex &sourceIndex) const;
0048     QModelIndex sourceIndex(const QModelIndex &proxyIndex) const;
0049 
0050     int m_column;
0051     QModelIndex m_index;
0052     QAbstractItemModel *m_sourceModel;
0053 
0054 private Q_SLOTS:
0055     void considerRowsAboutToBeInserted(const QModelIndex &, int, int);
0056     void considerRowsAboutToBeMoved(const QModelIndex &sourceParent, int rA, int rB, const QModelIndex &destParent, int rD);
0057     void considerRowsAboutToBeRemoved(const QModelIndex &, int, int);
0058     void considerRowsRemoved(const QModelIndex &, int, int);
0059     void considerRowsMoved(const QModelIndex &, int, int, const QModelIndex &, int);
0060     void considerRowsInserted(const QModelIndex &, int, int);
0061     void considerDataChanged(const QModelIndex &idxA, const QModelIndex &idxB);
0062     void sourceDestroyed(QObject *source);
0063 };
0064 
0065 #endif