diff --git a/tools/cabana/binaryview.cc b/tools/cabana/binaryview.cc index ed5f243f08..5d191d2ca3 100644 --- a/tools/cabana/binaryview.cc +++ b/tools/cabana/binaryview.cc @@ -70,9 +70,10 @@ void BinaryView::mousePressEvent(QMouseEvent *event) { void BinaryView::mouseMoveEvent(QMouseEvent *event) { if (auto index = indexAt(event->pos()); index.isValid()) { auto item = (BinaryViewModel::Item *)index.internalPointer(); - highlight(item->sig); - item->sig ? QToolTip::showText(event->globalPos(), item->sig->name.c_str(), this, rect()) - : QToolTip::hideText(); + const Signal *sig = item->sigs.isEmpty() ? nullptr : item->sigs.back(); + highlight(sig); + sig ? QToolTip::showText(event->globalPos(), sig->name.c_str(), this, rect()) + : QToolTip::hideText(); } QTableView::mouseMoveEvent(event); } @@ -119,11 +120,13 @@ void BinaryView::updateState() { const Signal *BinaryView::getResizingSignal() const { if (anchor_index.isValid()) { auto item = (const BinaryViewModel::Item *)anchor_index.internalPointer(); - if (item && item->sig) { + if (item && item->sigs.size() > 0) { int archor_pos = anchor_index.row() * 8 + anchor_index.column(); - auto [sig_from, sig_to] = getSignalRange(item->sig); - if (archor_pos == sig_from || archor_pos == sig_to) - return item->sig; + for (auto s : item->sigs) { + auto [sig_from, sig_to] = getSignalRange(s); + if (archor_pos == sig_from || archor_pos == sig_to) + return s; + } } } return nullptr; @@ -157,7 +160,7 @@ void BinaryViewModel::setMessage(const QString &message_id) { sig.is_little_endian ? items[idx].is_msb = true : items[idx].is_lsb = true; } items[idx].bg_color = getColor(i); - items[idx].sig = &dbc_msg->sigs[i]; + items[idx].sigs.push_back(&dbc_msg->sigs[i]); } } } @@ -235,7 +238,8 @@ void BinaryItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op BinaryView *bin_view = (BinaryView *)parent(); painter->save(); - bool hover = item->sig && bin_view->hoveredSignal() == item->sig; + bool hover = std::find_if(item->sigs.begin(), item->sigs.end(), [=](auto s) { return s == bin_view->hoveredSignal(); }) != + item->sigs.end(); // background QColor bg_color = hover ? hoverColor(item->bg_color) : item->bg_color; if (option.state & QStyle::State_Selected) { diff --git a/tools/cabana/binaryview.h b/tools/cabana/binaryview.h index 8c1a582014..e57033b797 100644 --- a/tools/cabana/binaryview.h +++ b/tools/cabana/binaryview.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -38,7 +39,7 @@ public: bool is_msb = false; bool is_lsb = false; QString val = "0"; - const Signal *sig = nullptr; + QList sigs; }; private: