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