diff --git a/tools/cabana/chartswidget.cc b/tools/cabana/chartswidget.cc
index c2ef7c17c1..a221cbe445 100644
--- a/tools/cabana/chartswidget.cc
+++ b/tools/cabana/chartswidget.cc
@@ -311,12 +311,14 @@ void ChartsWidget::removeChart(ChartView *chart) {
}
void ChartsWidget::removeAll() {
- for (auto c : charts) {
- c->deleteLater();
+ if (!charts.isEmpty()) {
+ for (auto c : charts) {
+ c->deleteLater();
+ }
+ charts.clear();
+ updateToolBar();
+ emit seriesChanged();
}
- charts.clear();
- updateToolBar();
- emit seriesChanged();
}
void ChartsWidget::alignCharts() {
@@ -390,10 +392,8 @@ ChartView::ChartView(QWidget *parent) : tip_label(this), QChartView(nullptr, par
setRubberBand(can->liveStreaming() ? QChartView::NoRubberBand : QChartView::HorizontalRubberBand);
setMouseTracking(true);
- QObject::connect(axis_x, &QValueAxis::rangeChanged, [this]() { resetChartCache(); });
QObject::connect(axis_y, &QValueAxis::rangeChanged, [this]() { resetChartCache(); });
QObject::connect(axis_y, &QAbstractAxis::titleTextChanged, [this]() { resetChartCache(); });
- QObject::connect(chart, &QChart::plotAreaChanged, [this]() { resetChartCache(); });
QObject::connect(dbc(), &DBCManager::signalRemoved, this, &ChartView::signalRemoved);
QObject::connect(dbc(), &DBCManager::signalUpdated, this, &ChartView::signalUpdated);
@@ -529,6 +529,7 @@ void ChartView::updatePlotArea(int left_pos, bool force) {
int adjust_top = chart()->legend()->geometry().height() + style()->pixelMetric(QStyle::PM_LayoutTopMargin);
chart()->setPlotArea(rect().adjusted(align_to + left, adjust_top + top, -x_label_size.width() / 2 - right, -x_label_size.height() - bottom));
chart()->layout()->invalidate();
+ resetChartCache();
}
}
@@ -549,6 +550,11 @@ void ChartView::updatePlot(double cur, double min, double max) {
axis_x->setRange(min, max);
updateAxisY();
updateSeriesPoints();
+ // update tooltip
+ if (tooltip_x >= 0) {
+ showTip(chart()->mapToValue({tooltip_x, 0}).x());
+ }
+ resetChartCache();
}
viewport()->update();
}
@@ -799,7 +805,8 @@ void ChartView::mouseMoveEvent(QMouseEvent *ev) {
}
void ChartView::showTip(double sec) {
- qreal x = chart()->mapToPosition({sec, 0}).x();
+ tooltip_x = chart()->mapToPosition({sec, 0}).x();
+ qreal x = tooltip_x;
QStringList text_list(QString::number(chart()->mapToValue({x, 0}).x(), 'f', 3));
for (auto &s : sigs) {
if (s.series->isVisible()) {
@@ -808,11 +815,12 @@ void ChartView::showTip(double sec) {
auto it = std::lower_bound(s.vals.rbegin(), s.vals.rend(), sec, [](auto &p, double x) { return p.x() > x; });
if (it != s.vals.rend() && it->x() >= axis_x->min()) {
value = QString::number(it->y());
- s.track_pt = chart()->mapToPosition(*it);
- x = std::max(x, s.track_pt.x());
+ s.track_pt = *it;
+ x = std::max(x, chart()->mapToPosition(*it).x());
}
- text_list << QString("■ %2: %3 (%4 - %5)")
- .arg(s.series->color().name(), s.sig->name, value, QString::number(s.min), QString::number(s.max));
+ QString name = sigs.size() > 1 ? s.sig->name + ": " : "";
+ text_list << QString("■ %2%3 (%4 - %5)")
+ .arg(s.series->color().name(), name, value, QString::number(s.min), QString::number(s.max));
}
}
QPointF tooltip_pt(x, chart()->plotArea().top());
@@ -823,6 +831,7 @@ void ChartView::showTip(double sec) {
void ChartView::hideTip() {
clearTrackPoints();
+ tooltip_x = -1;
tip_label.hide();
viewport()->update();
}
@@ -897,8 +906,9 @@ void ChartView::drawForeground(QPainter *painter, const QRectF &rect) {
for (auto &s : sigs) {
if (!s.track_pt.isNull() && s.series->isVisible()) {
painter->setBrush(s.series->color().darker(125));
- painter->drawEllipse(s.track_pt, 5.5, 5.5);
- track_line_x = std::max(track_line_x, s.track_pt.x());
+ QPointF pos = chart()->mapToPosition(s.track_pt);
+ painter->drawEllipse(pos, 5.5, 5.5);
+ track_line_x = std::max(track_line_x, pos.x());
}
}
if (track_line_x > 0) {
diff --git a/tools/cabana/chartswidget.h b/tools/cabana/chartswidget.h
index a88b3185af..c3af11eb5d 100644
--- a/tools/cabana/chartswidget.h
+++ b/tools/cabana/chartswidget.h
@@ -113,6 +113,7 @@ private:
bool is_scrubbing = false;
bool resume_after_scrub = false;
QPixmap chart_pixmap;
+ double tooltip_x = -1;
friend class ChartsWidget;
};