Cabana: Added ability to highlight and resize overlapped signals (#26210)

pull/26219/head
Dean Lee 3 years ago committed by GitHub
parent 60b666fe3b
commit 20dced4edc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      tools/cabana/binaryview.cc
  2. 3
      tools/cabana/binaryview.h

@ -70,8 +70,9 @@ 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())
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);
for (auto s : item->sigs) {
auto [sig_from, sig_to] = getSignalRange(s);
if (archor_pos == sig_from || archor_pos == sig_to)
return item->sig;
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) {

@ -1,5 +1,6 @@
#pragma once
#include <QList>
#include <QStyledItemDelegate>
#include <QTableView>
@ -38,7 +39,7 @@ public:
bool is_msb = false;
bool is_lsb = false;
QString val = "0";
const Signal *sig = nullptr;
QList<const Signal *> sigs;
};
private:

Loading…
Cancel
Save