Cabana: fix "show plot" button state sync issue (#26769)

old-commit-hash: fd91ab6469
taco
Dean Lee 2 years ago committed by GitHub
parent f315819d47
commit b4a98b8740
  1. 24
      tools/cabana/chartswidget.cc
  2. 9
      tools/cabana/chartswidget.h
  3. 10
      tools/cabana/detailwidget.cc
  4. 2
      tools/cabana/detailwidget.h

@ -152,12 +152,12 @@ void ChartsWidget::showChart(const QString &id, const Signal *sig, bool show, bo
QObject::connect(chart, &ChartView::remove, [=]() { removeChart(chart); }); QObject::connect(chart, &ChartView::remove, [=]() { removeChart(chart); });
QObject::connect(chart, &ChartView::zoomIn, this, &ChartsWidget::zoomIn); QObject::connect(chart, &ChartView::zoomIn, this, &ChartsWidget::zoomIn);
QObject::connect(chart, &ChartView::zoomReset, this, &ChartsWidget::zoomReset); QObject::connect(chart, &ChartView::zoomReset, this, &ChartsWidget::zoomReset);
QObject::connect(chart, &ChartView::seriesRemoved, this, &ChartsWidget::chartClosed); QObject::connect(chart, &ChartView::seriesRemoved, this, &ChartsWidget::seriesChanged);
QObject::connect(chart, &ChartView::seriesAdded, this, &ChartsWidget::seriesChanged);
charts_layout->insertWidget(0, chart); charts_layout->insertWidget(0, chart);
charts.push_back(chart); charts.push_back(chart);
} }
chart->addSeries(id, sig); chart->addSeries(id, sig);
emit chartOpened(id, sig);
} else if (ChartView *chart = findChart(id, sig)) { } else if (ChartView *chart = findChart(id, sig)) {
chart->removeSeries(id, sig); chart->removeSeries(id, sig);
} }
@ -169,11 +169,16 @@ void ChartsWidget::removeChart(ChartView *chart) {
charts.removeOne(chart); charts.removeOne(chart);
chart->deleteLater(); chart->deleteLater();
updateToolBar(); updateToolBar();
emit seriesChanged();
} }
void ChartsWidget::removeAll() { void ChartsWidget::removeAll() {
for (auto c : charts.toVector()) for (auto c : charts) {
removeChart(c); c->deleteLater();
}
charts.clear();
updateToolBar();
emit seriesChanged();
} }
bool ChartsWidget::eventFilter(QObject *obj, QEvent *event) { bool ChartsWidget::eventFilter(QObject *obj, QEvent *event) {
@ -227,11 +232,6 @@ ChartView::ChartView(QWidget *parent) : QChartView(nullptr, parent) {
QObject::connect(manage_btn, &QToolButton::clicked, this, &ChartView::manageSeries); QObject::connect(manage_btn, &QToolButton::clicked, this, &ChartView::manageSeries);
} }
ChartView::~ChartView() {
for (auto &s : sigs)
emit seriesRemoved(s.msg_id, s.sig);
}
void ChartView::addSeries(const QString &msg_id, const Signal *sig) { void ChartView::addSeries(const QString &msg_id, const Signal *sig) {
QLineSeries *series = new QLineSeries(this); QLineSeries *series = new QLineSeries(this);
series->setUseOpenGL(true); series->setUseOpenGL(true);
@ -243,6 +243,7 @@ void ChartView::addSeries(const QString &msg_id, const Signal *sig) {
updateTitle(); updateTitle();
updateSeries(sig); updateSeries(sig);
updateAxisY(); updateAxisY();
emit seriesAdded(msg_id, sig);
} }
void ChartView::removeSeries(const QString &msg_id, const Signal *sig) { void ChartView::removeSeries(const QString &msg_id, const Signal *sig) {
@ -259,9 +260,10 @@ bool ChartView::hasSeries(const QString &msg_id, const Signal *sig) const {
QList<ChartView::SigItem>::iterator ChartView::removeSeries(const QList<ChartView::SigItem>::iterator &it) { QList<ChartView::SigItem>::iterator ChartView::removeSeries(const QList<ChartView::SigItem>::iterator &it) {
chart()->removeSeries(it->series); chart()->removeSeries(it->series);
it->series->deleteLater(); it->series->deleteLater();
emit seriesRemoved(it->msg_id, it->sig); QString msg_id = it->msg_id;
const Signal *sig = it->sig;
auto ret = sigs.erase(it); auto ret = sigs.erase(it);
emit seriesRemoved(msg_id, sig);
if (!sigs.isEmpty()) { if (!sigs.isEmpty()) {
updateAxisY(); updateAxisY();
} else { } else {

@ -20,7 +20,6 @@ class ChartView : public QChartView {
public: public:
ChartView(QWidget *parent = nullptr); ChartView(QWidget *parent = nullptr);
~ChartView();
void addSeries(const QString &msg_id, const Signal *sig); void addSeries(const QString &msg_id, const Signal *sig);
void removeSeries(const QString &msg_id, const Signal *sig); void removeSeries(const QString &msg_id, const Signal *sig);
bool hasSeries(const QString &msg_id, const Signal *sig) const; bool hasSeries(const QString &msg_id, const Signal *sig) const;
@ -41,6 +40,7 @@ public:
signals: signals:
void seriesRemoved(const QString &id, const Signal *sig); void seriesRemoved(const QString &id, const Signal *sig);
void seriesAdded(const QString &id, const Signal *sig);
void zoomIn(double min, double max); void zoomIn(double min, double max);
void zoomReset(); void zoomReset();
void remove(); void remove();
@ -81,16 +81,15 @@ class ChartsWidget : public QWidget {
public: public:
ChartsWidget(QWidget *parent = nullptr); ChartsWidget(QWidget *parent = nullptr);
void showChart(const QString &id, const Signal *sig, bool show, bool merge); void showChart(const QString &id, const Signal *sig, bool show, bool merge);
void removeChart(ChartView *chart); inline bool hasSignal(const QString &id, const Signal *sig) { return findChart(id, sig) != nullptr; }
inline bool isChartOpened(const QString &id, const Signal *sig) { return findChart(id, sig) != nullptr; }
signals: signals:
void dock(bool floating); void dock(bool floating);
void rangeChanged(double min, double max, bool is_zommed); void rangeChanged(double min, double max, bool is_zommed);
void chartOpened(const QString &id, const Signal *sig); void seriesChanged();
void chartClosed(const QString &id, const Signal *sig);
private: private:
void removeChart(ChartView *chart);
void eventsMerged(); void eventsMerged();
void updateState(); void updateState();
void updateDisplayRange(); void updateDisplayRange();

@ -107,8 +107,7 @@ DetailWidget::DetailWidget(ChartsWidget *charts, QWidget *parent) : charts(chart
} }
}); });
QObject::connect(tabbar, &QTabBar::tabCloseRequested, tabbar, &QTabBar::removeTab); QObject::connect(tabbar, &QTabBar::tabCloseRequested, tabbar, &QTabBar::removeTab);
QObject::connect(charts, &ChartsWidget::chartOpened, [this](const QString &id, const Signal *sig) { updateChartState(id, sig, true); }); QObject::connect(charts, &ChartsWidget::seriesChanged, this, &DetailWidget::updateChartState);
QObject::connect(charts, &ChartsWidget::chartClosed, [this](const QString &id, const Signal *sig) { updateChartState(id, sig, false); });
QObject::connect(undo_stack, &QUndoStack::indexChanged, [this]() { QObject::connect(undo_stack, &QUndoStack::indexChanged, [this]() {
if (undo_stack->count() > 0) if (undo_stack->count() > 0)
dbcMsgChanged(); dbcMsgChanged();
@ -169,7 +168,7 @@ void DetailWidget::dbcMsgChanged(int show_form_idx) {
signal_list.push_back(form); signal_list.push_back(form);
} }
form->setSignal(msg_id, sig); form->setSignal(msg_id, sig);
form->setChartOpened(charts->isChartOpened(msg_id, sig)); form->setChartOpened(charts->hasSignal(msg_id, sig));
++i; ++i;
} }
if (msg->size != can->lastMessage(msg_id).dat.size()) if (msg->size != can->lastMessage(msg_id).dat.size())
@ -212,9 +211,9 @@ void DetailWidget::showForm(const Signal *sig) {
setUpdatesEnabled(true); setUpdatesEnabled(true);
} }
void DetailWidget::updateChartState(const QString &id, const Signal *sig, bool opened) { void DetailWidget::updateChartState() {
for (auto f : signal_list) for (auto f : signal_list)
if (f->msg_id == id && f->sig == sig) f->setChartOpened(opened); f->setChartOpened(charts->hasSignal(f->msg_id, f->sig));
} }
void DetailWidget::editMsg() { void DetailWidget::editMsg() {
@ -334,4 +333,3 @@ WelcomeWidget::WelcomeWidget(QWidget *parent) : QWidget(parent) {
setStyleSheet("QLabel{color:darkGray;}"); setStyleSheet("QLabel{color:darkGray;}");
} }

@ -35,7 +35,7 @@ public:
private: private:
void showForm(const Signal *sig); void showForm(const Signal *sig);
void updateChartState(const QString &id, const Signal *sig, bool opened); void updateChartState();
void showTabBarContextMenu(const QPoint &pt); void showTabBarContextMenu(const QPoint &pt);
void addSignal(int start_bit, int size, bool little_endian); void addSignal(int start_bit, int size, bool little_endian);
void resizeSignal(const Signal *sig, int from, int to); void resizeSignal(const Signal *sig, int from, int to);

Loading…
Cancel
Save