File indexing completed on 2024-05-12 03:48:21
0001 /* 0002 File : TreeModel.h 0003 Project : LabPlot 0004 Description : This is an abstract treemodel which can be used by a treeview 0005 -------------------------------------------------------------------- 0006 SPDX-FileCopyrightText: 2019 Martin Marmsoler <martin.marmsoler@gmail.com> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 0011 #ifndef TREEMODEL_H 0012 #define TREEMODEL_H 0013 0014 #include <QAbstractItemModel> 0015 #include <QColor> 0016 0017 /*! 0018 * \brief The TreeItem class 0019 * Item in the treemodel 0020 */ 0021 class TreeItem { 0022 public: 0023 explicit TreeItem(const QVector<QVariant>& data, TreeItem* parent = nullptr); 0024 ~TreeItem(); 0025 0026 TreeItem* child(int number); 0027 int childCount() const; 0028 int columnCount() const; 0029 QVariant data(int column) const; 0030 QVariant backgroundColor() const; 0031 bool insertChildren(int position, int count, int columns); 0032 bool insertColumns(int position, int columns); 0033 TreeItem* parent(); 0034 bool removeChildren(int position, int count); 0035 bool removeColumns(int position, int columns); 0036 int childNumber() const; 0037 bool setData(int column, const QVariant& value); 0038 bool setBackgroundColor(int column, const QVariant& value); 0039 0040 private: 0041 QList<TreeItem*> childItems; 0042 QVector<QVariant> itemData; 0043 QColor m_backgroundColor{QColor(0, 0, 0, 0)}; 0044 TreeItem* parentItem{nullptr}; 0045 }; 0046 /*! 0047 * \brief The TreeModel class 0048 * This is an abstract treemodel which can be used by a treeview 0049 */ 0050 class TreeModel : public QAbstractItemModel { 0051 Q_OBJECT 0052 0053 public: 0054 explicit TreeModel(const QStringList& headers, QObject* parent = nullptr); 0055 ~TreeModel(); 0056 QVariant treeData(const int row, const int column, const QModelIndex& parent = QModelIndex(), const int role = Qt::EditRole); 0057 QVariant data(const QModelIndex&, int role) const override; 0058 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; 0059 0060 QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; 0061 QModelIndex parent(const QModelIndex&) const override; 0062 0063 int rowCount(const QModelIndex& parent = QModelIndex()) const override; 0064 int columnCount(const QModelIndex& parent = QModelIndex()) const override; 0065 0066 Qt::ItemFlags flags(const QModelIndex&) const override; 0067 bool setTreeData(const QVariant& data, const int row, const int column, const QModelIndex& parent = QModelIndex(), int role = Qt::EditRole); 0068 bool setData(const QModelIndex&, const QVariant& value, int role = Qt::EditRole) override; 0069 int compareStrings(const QString& value, const int row, const int column, const QModelIndex& parent = QModelIndex()); 0070 bool setHeaderData(int section, Qt::Orientation orientation, const QVariant& value, int role = Qt::EditRole) override; 0071 0072 bool insertColumns(int position, int columns, const QModelIndex& parent = QModelIndex()) override; 0073 bool removeColumns(int position, int columns, const QModelIndex& parent = QModelIndex()) override; 0074 bool insertRows(int position, int rows, const QModelIndex& parent = QModelIndex()) override; 0075 bool removeRows(int position, int rows, const QModelIndex& parent = QModelIndex()) override; 0076 0077 private: 0078 TreeItem* getItem(const QModelIndex&) const; 0079 TreeItem* rootItem{nullptr}; 0080 }; 0081 0082 #endif // TREEMODEL_H