Cabana: display overlapping bits warning (#26219)

display overlapping bits warning
pull/26232/head^2
Dean Lee 3 years ago committed by GitHub
parent 686506f400
commit 87e0a5dd1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 14
      tools/cabana/binaryview.cc
  2. 2
      tools/cabana/binaryview.h
  3. 21
      tools/cabana/detailwidget.cc

@ -132,6 +132,20 @@ const Signal *BinaryView::getResizingSignal() const {
return nullptr;
}
QSet<const Signal *> BinaryView::getOverlappingSignals() const {
QSet<const Signal *> overlapping;
for (int i = 0; i < model->rowCount(); ++i) {
for (int j = 0; j < model->columnCount() - 1; ++j) {
auto item = (const BinaryViewModel::Item *)model->index(i, j).internalPointer();
if (item && item->sigs.size() > 1) {
for (auto s : item->sigs)
overlapping.insert(s);
}
}
}
return overlapping;
}
// BinaryViewModel
void BinaryViewModel::setMessage(const QString &message_id) {

@ -1,6 +1,7 @@
#pragma once
#include <QList>
#include <QSet>
#include <QStyledItemDelegate>
#include <QTableView>
@ -59,6 +60,7 @@ public:
void updateState();
void highlight(const Signal *sig);
const Signal *hoveredSignal() const { return hovered_sig; }
QSet<const Signal*> getOverlappingSignals() const;
signals:
void signalHovered(const Signal *sig);

@ -49,7 +49,7 @@ DetailWidget::DetailWidget(QWidget *parent) : QWidget(parent) {
QHBoxLayout *warning_hlayout = new QHBoxLayout(warning_widget);
QLabel *warning_icon = new QLabel(this);
warning_icon->setPixmap(style()->standardPixmap(QStyle::SP_MessageBoxWarning));
warning_hlayout->addWidget(warning_icon);
warning_hlayout->addWidget(warning_icon, 0, Qt::AlignTop);
warning_label = new QLabel(this);
warning_hlayout->addWidget(warning_label, 1, Qt::AlignLeft);
warning_widget->hide();
@ -107,6 +107,8 @@ void DetailWidget::dbcMsgChanged(int show_form_idx) {
if (msg_id.isEmpty()) return;
warning_widget->hide();
QStringList warnings;
clearLayout(signals_container->layout());
QString msg_name = tr("untitled");
if (auto msg = dbc()->msg(msg_id)) {
@ -124,16 +126,25 @@ void DetailWidget::dbcMsgChanged(int show_form_idx) {
}
}
msg_name = msg->name.c_str();
if (msg->size != can->lastMessage(msg_id).dat.size()) {
warning_label->setText(tr("Message size (%1) is incorrect!").arg(msg->size));
warning_widget->show();
}
if (msg->size != can->lastMessage(msg_id).dat.size())
warnings.push_back(tr("Message size (%1) is incorrect.").arg(msg->size));
}
edit_btn->setVisible(true);
name_label->setText(msg_name);
binary_view->setMessage(msg_id);
history_log->setMessage(msg_id);
// Check overlapping bits
if (auto overlapping = binary_view->getOverlappingSignals(); !overlapping.isEmpty()) {
for (auto s : overlapping)
warnings.push_back(tr("%1 has overlapping bits.").arg(s->name.c_str()));
}
if (!warnings.isEmpty()) {
warning_label->setText(warnings.join('\n'));
warning_widget->show();
}
}
void DetailWidget::updateState() {

Loading…
Cancel
Save