Cabana: Fix unable to display charts for same signals from different buses. (#26191)

keep charts in list instead of hash
old-commit-hash: 8697e928fc
taco
Dean Lee 3 years ago committed by GitHub
parent 5603f8694c
commit 2a6099a2c1
  1. 48
      tools/cabana/chartswidget.cc
  2. 8
      tools/cabana/chartswidget.h

@ -55,11 +55,13 @@ ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) {
main_layout->addWidget(charts_scroll); main_layout->addWidget(charts_scroll);
QObject::connect(dbc(), &DBCManager::DBCFileChanged, this, &ChartsWidget::removeAll); QObject::connect(dbc(), &DBCManager::DBCFileChanged, [this]() { removeAll(nullptr); });
QObject::connect(dbc(), &DBCManager::signalRemoved, this, &ChartsWidget::removeChart); QObject::connect(dbc(), &DBCManager::signalRemoved, this, &ChartsWidget::removeAll);
QObject::connect(dbc(), &DBCManager::signalUpdated, [this](const Signal *sig) { QObject::connect(dbc(), &DBCManager::signalUpdated, [this](const Signal *sig) {
if (auto it = charts.find(sig); it != charts.end()) { for (auto chart : charts) {
it.value()->chart_view->updateSeries(); if (chart->signal == sig) {
chart->chart_view->updateSeries();
}
} }
}); });
QObject::connect(dbc(), &DBCManager::msgUpdated, [this](const QString &id) { QObject::connect(dbc(), &DBCManager::msgUpdated, [this](const QString &id) {
@ -71,7 +73,7 @@ ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) {
QObject::connect(can, &CANMessages::rangeChanged, [this]() { updateTitleBar(); }); QObject::connect(can, &CANMessages::rangeChanged, [this]() { updateTitleBar(); });
QObject::connect(reset_zoom_btn, &QPushButton::clicked, can, &CANMessages::resetRange); QObject::connect(reset_zoom_btn, &QPushButton::clicked, can, &CANMessages::resetRange);
QObject::connect(remove_all_btn, &QPushButton::clicked, this, &ChartsWidget::removeAll); QObject::connect(remove_all_btn, &QPushButton::clicked, [this]() { removeAll(); });
QObject::connect(dock_btn, &QPushButton::clicked, [this]() { QObject::connect(dock_btn, &QPushButton::clicked, [this]() {
emit dock(!docking); emit dock(!docking);
docking = !docking; docking = !docking;
@ -102,28 +104,38 @@ void ChartsWidget::updateTitleBar() {
} }
void ChartsWidget::addChart(const QString &id, const Signal *sig) { void ChartsWidget::addChart(const QString &id, const Signal *sig) {
if (!charts.contains(sig)) { auto it = std::find_if(charts.begin(), charts.end(), [=](auto c) { return c->id == id && c->signal == sig; });
if (it == charts.end()) {
auto chart = new ChartWidget(id, sig, this); auto chart = new ChartWidget(id, sig, this);
QObject::connect(chart, &ChartWidget::remove, [=]() { removeChart(sig); }); QObject::connect(chart, &ChartWidget::remove, this, &ChartsWidget::removeChart);
charts_layout->insertWidget(0, chart); charts_layout->insertWidget(0, chart);
charts.insert(sig, chart); charts.push_back(chart);
} }
updateTitleBar(); updateTitleBar();
} }
void ChartsWidget::removeChart(const Signal *sig) { void ChartsWidget::removeChart(const QString &msg_id, const Signal *sig) {
auto it = charts.find(sig); QMutableListIterator<ChartWidget *> it(charts);
if (it != charts.end()) { while (it.hasNext()) {
it.value()->deleteLater(); auto c = it.next();
charts.remove(sig); if (c->id == msg_id && c->signal == sig) {
c->deleteLater();
it.remove();
break;
}
} }
updateTitleBar(); updateTitleBar();
} }
void ChartsWidget::removeAll() { void ChartsWidget::removeAll(const Signal *sig) {
for (auto chart : charts) QMutableListIterator<ChartWidget *> it(charts);
chart->deleteLater(); while (it.hasNext()) {
charts.clear(); auto c = it.next();
if (sig == nullptr || c->signal == sig) {
c->deleteLater();
it.remove();
}
}
updateTitleBar(); updateTitleBar();
} }
@ -153,7 +165,7 @@ ChartWidget::ChartWidget(const QString &id, const Signal *sig, QWidget *parent)
QPushButton *remove_btn = new QPushButton("", this); QPushButton *remove_btn = new QPushButton("", this);
remove_btn->setFixedSize(30, 30); remove_btn->setFixedSize(30, 30);
remove_btn->setToolTip(tr("Remove chart")); remove_btn->setToolTip(tr("Remove chart"));
QObject::connect(remove_btn, &QPushButton::clicked, this, &ChartWidget::remove); QObject::connect(remove_btn, &QPushButton::clicked, [=]() { emit remove(id, sig); });
header_layout->addWidget(remove_btn); header_layout->addWidget(remove_btn);
main_layout->addWidget(header); main_layout->addWidget(header);

@ -50,7 +50,7 @@ public:
void setHeight(int height); void setHeight(int height);
signals: signals:
void remove(); void remove(const QString &msg_id, const Signal *sig);
public: public:
QString id; QString id;
@ -65,7 +65,7 @@ class ChartsWidget : public QWidget {
public: public:
ChartsWidget(QWidget *parent = nullptr); ChartsWidget(QWidget *parent = nullptr);
void addChart(const QString &id, const Signal *sig); void addChart(const QString &id, const Signal *sig);
void removeChart(const Signal *sig); void removeChart(const QString &id, const Signal *sig);
signals: signals:
void dock(bool floating); void dock(bool floating);
@ -73,7 +73,7 @@ signals:
private: private:
void updateState(); void updateState();
void updateTitleBar(); void updateTitleBar();
void removeAll(); void removeAll(const Signal *sig = nullptr);
bool eventFilter(QObject *obj, QEvent *event); bool eventFilter(QObject *obj, QEvent *event);
QWidget *title_bar; QWidget *title_bar;
@ -84,5 +84,5 @@ private:
QPushButton *reset_zoom_btn; QPushButton *reset_zoom_btn;
QPushButton *remove_all_btn; QPushButton *remove_all_btn;
QVBoxLayout *charts_layout; QVBoxLayout *charts_layout;
QHash<const Signal *, ChartWidget *> charts; QList<ChartWidget *> charts;
}; };

Loading…
Cancel
Save