51 lines
1.9 KiB
C++
51 lines
1.9 KiB
C++
// SPDX-License-Identifier: MIT
|
|
#ifndef DBC_TREE_MODEL_H
|
|
#define DBC_TREE_MODEL_H
|
|
|
|
#include "tree_node.h"
|
|
#include <QAbstractItemModel>
|
|
|
|
/** 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<TreeNode> 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<TreeNode> m_root;
|
|
};
|
|
#endif
|