// SPDX-License-Identifier: MIT #ifndef DBC_TREE_MODEL_H #define DBC_TREE_MODEL_H #include "tree_node.h" #include /** Read-only model. Owns an immutable tree; all indexes expire on SetTree(). * Use QPersistentModelIndex to observe reset invalidation. Call on the model thread. */ class DbcTreeModel : public QAbstractItemModel { public: enum Column { Name, CanId, PayloadLength, StartBit, BitLength, ByteOrder, Signed, Unit, Comment, ColumnCount }; // Metadata roles apply on every column; inapplicable roles return invalid QVariant. enum Role { NodeTypeRole = Qt::UserRole + 1, CanIdRole, PayloadLengthRole, StartBitRole, BitLengthRole, LittleEndianRole, SignedRole, UnitRole, CommentRole, ValueDescriptionsRole, ExtendedRole }; explicit DbcTreeModel(QObject *parent = nullptr); void SetTree(std::unique_ptr root); QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &child) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; Qt::ItemFlags flags(const QModelIndex &index) const override; private: const TreeNode *Node(const QModelIndex &index) const; std::unique_ptr m_root; }; #endif