mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-06-28 01:52:06 +08:00
Cabana: display overlapping bits warning (#26219)
display overlapping bits warning old-commit-hash: 87e0a5dd1a0f58ce119d652808df8888e85ced2a
This commit is contained in:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user