#pragma once #include #include #include "opendbc/can/common.h" #include "opendbc/can/common_dbc.h" #include "tools/cabana/canmessages.h" #include "tools/cabana/dbcmanager.h" #include "tools/cabana/historylog.h" #include "tools/cabana/signaledit.h" class BinarySelectionModel : public QItemSelectionModel { public: BinarySelectionModel(QAbstractItemModel *model = nullptr) : QItemSelectionModel(model) {} void select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command) override; }; class BinaryView : public QTableWidget { Q_OBJECT public: BinaryView(QWidget *parent = nullptr); void mouseReleaseEvent(QMouseEvent *event) override; void setMessage(const QString &message_id); void updateState(); signals: void cellsSelected(int start_bit, int size); private: QString msg_id; }; class EditMessageDialog : public QDialog { Q_OBJECT public: EditMessageDialog(const QString &msg_id, const QString &title, int size, QWidget *parent); QLineEdit *name_edit; QSpinBox *size_spin; }; class ScrollArea : public QScrollArea { Q_OBJECT public: ScrollArea(QWidget *parent) : QScrollArea(parent) {} bool eventFilter(QObject *obj, QEvent *ev) override; void setWidget(QWidget *w); }; class DetailWidget : public QWidget { Q_OBJECT public: DetailWidget(QWidget *parent); void setMessage(const QString &message_id); void dbcMsgChanged(); signals: void showChart(const QString &msg_id, const Signal *sig); void removeChart(const Signal *sig); private: void addSignal(int start_bit, int size); void saveSignal(); void removeSignal(); void editMsg(); void showForm(); void updateState(); QString msg_id; QLabel *name_label, *time_label; QPushButton *edit_btn; QWidget *signals_container; HistoryLog *history_log; BinaryView *binary_view; ScrollArea *scroll; };