From 952c5b733813d98e9dd72203447dafafae360b71 Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Thu, 23 Feb 2023 03:44:53 +0800 Subject: [PATCH] cabana: small improvements to SignalView (#27419) old-commit-hash: 58cd96536b852949f65309fea37684a6fa16668e --- tools/cabana/signaledit.cc | 34 ++++++++++++++++++++++++---------- tools/cabana/signaledit.h | 2 +- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/tools/cabana/signaledit.cc b/tools/cabana/signaledit.cc index e862439b68..c614ecb247 100644 --- a/tools/cabana/signaledit.cc +++ b/tools/cabana/signaledit.cc @@ -61,16 +61,26 @@ void SignalModel::updateState(const QHash *msgs) { auto &dat = can->lastMessage(msg_id).dat; int row = 0; for (auto item : root->children) { - double value = get_raw_value((uint8_t *)dat.begin(), dat.size(), *item->sig); - item->sig_val = QString::number(value); - emit dataChanged(index(row, 1), index(row, 1), {Qt::DisplayRole}); + QString value = QString::number(get_raw_value((uint8_t *)dat.begin(), dat.size(), *item->sig)); + if (value != item->sig_val) { + item->sig_val = value; + emit dataChanged(index(row, 1), index(row, 1), {Qt::DisplayRole}); + } ++row; } } } +SignalModel::Item *SignalModel::getItem(const QModelIndex &index) const { + SignalModel::Item *item = nullptr; + if (index.isValid()) { + item = (SignalModel::Item *)index.internalPointer(); + } + return item ? item : root.get(); +} + int SignalModel::rowCount(const QModelIndex &parent) const { - if (parent.column() > 0) return 0; + if (parent.isValid() && parent.column() > 0) return 0; auto parent_item = getItem(parent); int row_count = parent_item->children.size(); @@ -99,14 +109,19 @@ int SignalModel::signalRow(const Signal *sig) const { } QModelIndex SignalModel::index(int row, int column, const QModelIndex &parent) const { - if (!hasIndex(row, column, parent)) return {}; - return createIndex(row, column, getItem(parent)->children[row]); + if (parent.isValid() && parent.column() != 0) return {}; + + auto parent_item = getItem(parent); + if (parent_item && row < parent_item->children.size()) { + return createIndex(row, column, parent_item->children[row]); + } + return {}; } QModelIndex SignalModel::parent(const QModelIndex &index) const { if (!index.isValid()) return {}; Item *parent_item = getItem(index)->parent; - return parent_item == root.get() ? QModelIndex() : createIndex(parent_item->row(), 0, parent_item); + return !parent_item || parent_item == root.get() ? QModelIndex() : createIndex(parent_item->row(), 0, parent_item); } QVariant SignalModel::data(const QModelIndex &index, int role) const { @@ -287,8 +302,8 @@ SignalItemDelegate::SignalItemDelegate(QObject *parent) : QStyledItemDelegate(pa QSize SignalItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QSize size = QStyledItemDelegate::sizeHint(option, index); - if (!index.parent().isValid() && index.column() == 0) { - size.rwidth() = std::min(((QWidget*)parent())->size().width() / 2, size.width() + color_label_width + 8); + if (index.column() == 0 && !index.parent().isValid()) { + size.rwidth() = std::min(option.widget->size().width() / 2, size.width() + color_label_width + 8); } return size; } @@ -355,7 +370,6 @@ SignalView::SignalView(ChartsWidget *charts, QWidget *parent) : charts(charts), setFrameStyle(QFrame::StyledPanel | QFrame::Plain); // title bar QWidget *title_bar = new QWidget(this); - title_bar->setAutoFillBackground(true); QHBoxLayout *hl = new QHBoxLayout(title_bar); hl->addWidget(signal_count_lb = new QLabel()); filter_edit = new QLineEdit(this); diff --git a/tools/cabana/signaledit.h b/tools/cabana/signaledit.h index 3cb193b62f..73a107f5c9 100644 --- a/tools/cabana/signaledit.h +++ b/tools/cabana/signaledit.h @@ -42,7 +42,7 @@ public: bool saveSignal(const Signal *origin_s, Signal &s); void resizeSignal(const Signal *sig, int start_bit, int size); void removeSignal(const Signal *sig); - inline Item *getItem(const QModelIndex &index) const { return index.isValid() ? (Item *)index.internalPointer() : root.get(); } + Item *getItem(const QModelIndex &index) const; int signalRow(const Signal *sig) const; void showExtraInfo(const QModelIndex &index);