diff --git a/tools/cabana/historylog.cc b/tools/cabana/historylog.cc index cbb3b6e882..c0efbca280 100644 --- a/tools/cabana/historylog.cc +++ b/tools/cabana/historylog.cc @@ -5,21 +5,16 @@ #include QVariant HistoryLogModel::data(const QModelIndex &index, int role) const { - auto msg = dbc()->msg(msg_id); + bool has_signal = dbc_msg && !dbc_msg->sigs.empty(); if (role == Qt::DisplayRole) { - const auto &can_msgs = can->messages(msg_id); - if (index.row() < can_msgs.size()) { - const auto &can_data = can_msgs[index.row()]; - if (msg && index.column() < msg->sigs.size()) { - return get_raw_value((uint8_t *)can_data.dat.begin(), can_data.dat.size(), msg->sigs[index.column()]); - } else { - return toHex(can_data.dat); - } - } - } else if (role == Qt::FontRole) { - if (index.column() == 0 && !(msg && msg->sigs.size() > 0)) { - return QFontDatabase::systemFont(QFontDatabase::FixedFont); + const auto &m = can->messages(msg_id)[index.row()]; + if (index.column() == 0) { + return QString::number(m.ts, 'f', 2); } + return has_signal ? QString::number(get_raw_value((uint8_t *)m.dat.begin(), m.dat.size(), dbc_msg->sigs[index.column() - 1])) + : toHex(m.dat); + } else if (role == Qt::FontRole && index.column() == 1 && !has_signal) { + return QFontDatabase::systemFont(QFontDatabase::FixedFont); } return {}; } @@ -27,8 +22,8 @@ QVariant HistoryLogModel::data(const QModelIndex &index, int role) const { void HistoryLogModel::setMessage(const QString &message_id) { beginResetModel(); msg_id = message_id; - const auto msg = dbc()->msg(message_id); - column_count = msg && !msg->sigs.empty() ? msg->sigs.size() : 1; + dbc_msg = dbc()->msg(message_id); + column_count = (dbc_msg && !dbc_msg->sigs.empty() ? dbc_msg->sigs.size() : 1) + 1; row_count = 0; endResetModel(); @@ -37,18 +32,14 @@ void HistoryLogModel::setMessage(const QString &message_id) { QVariant HistoryLogModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal) { - auto msg = dbc()->msg(msg_id); - if (msg && section < msg->sigs.size()) { - if (role == Qt::BackgroundRole) { - return QBrush(QColor(getColor(section))); - } else if (role == Qt::DisplayRole || role == Qt::ToolTipRole) { - return QString::fromStdString(msg->sigs[section].name); + bool has_signal = dbc_msg && !dbc_msg->sigs.empty(); + if (role == Qt::DisplayRole || role == Qt::ToolTipRole) { + if (section == 0) { + return "Time"; } - } - } else if (role == Qt::DisplayRole) { - const auto &can_msgs = can->messages(msg_id); - if (section < can_msgs.size()) { - return QString::number(can_msgs[section].ts, 'f', 2); + return has_signal ? dbc_msg->sigs[section - 1].name.c_str() : "Data"; + } else if (role == Qt::BackgroundRole && section > 0 && has_signal) { + return QBrush(QColor(getColor(section - 1))); } } return {}; @@ -69,7 +60,6 @@ void HistoryLogModel::updateState() { } if (row_count > 0) { emit dataChanged(index(0, 0), index(row_count - 1, column_count - 1), {Qt::DisplayRole}); - emit headerDataChanged(Qt::Vertical, 0, row_count - 1); } } @@ -79,17 +69,10 @@ HistoryLog::HistoryLog(QWidget *parent) : QWidget(parent) { model = new HistoryLogModel(this); table = new QTableView(this); table->setModel(model); - table->horizontalHeader()->setStretchLastSection(true); - table->setEditTriggers(QAbstractItemView::NoEditTriggers); + table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed); + table->setColumnWidth(0, 60); + table->verticalHeader()->setVisible(false); table->setStyleSheet("QTableView::item { border:0px; padding-left:5px; padding-right:5px; }"); - table->verticalHeader()->setStyleSheet("QHeaderView::section {padding-left: 5px; padding-right: 5px;min-width:40px;}"); main_layout->addWidget(table); } - -void HistoryLog::setMessage(const QString &message_id) { - model->setMessage(message_id); -} - -void HistoryLog::updateState() { - model->updateState(); -} diff --git a/tools/cabana/historylog.h b/tools/cabana/historylog.h index f3a9046bfa..bc6d1f9376 100644 --- a/tools/cabana/historylog.h +++ b/tools/cabana/historylog.h @@ -6,21 +6,22 @@ #include "tools/cabana/dbcmanager.h" class HistoryLogModel : public QAbstractTableModel { -Q_OBJECT + Q_OBJECT public: HistoryLogModel(QObject *parent) : QAbstractTableModel(parent) {} void setMessage(const QString &message_id); void updateState(); QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; - int columnCount(const QModelIndex &parent = QModelIndex()) const override { return column_count; } - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override { return row_count; } + int columnCount(const QModelIndex &parent = QModelIndex()) const override { return column_count; } private: QString msg_id; int row_count = 0; - int column_count = 0; + int column_count = 2; + const Msg *dbc_msg = nullptr; }; class HistoryLog : public QWidget { @@ -28,8 +29,8 @@ class HistoryLog : public QWidget { public: HistoryLog(QWidget *parent); - void setMessage(const QString &message_id); - void updateState(); + void setMessage(const QString &message_id) { model->setMessage(message_id); } + void updateState() { model->updateState(); } private: QTableView *table;