diff --git a/tools/cabana/chartswidget.cc b/tools/cabana/chartswidget.cc index e69729c03a..3652720e12 100644 --- a/tools/cabana/chartswidget.cc +++ b/tools/cabana/chartswidget.cc @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -183,7 +184,6 @@ ChartView::ChartView(const QString &id, const Signal *sig, QWidget *parent) font.setBold(true); chart->setTitleFont(font); chart->setMargins({0, 0, 0, 0}); - chart->layout()->setContentsMargins(0, 0, 0, 0); track_line = new QGraphicsLineItem(chart); track_line->setPen(QPen(Qt::gray, 1, Qt::DashLine)); @@ -202,14 +202,32 @@ ChartView::ChartView(const QString &id, const Signal *sig, QWidget *parent) rubber->setPalette(pal); } + QTimer *timer = new QTimer(this); + timer->setInterval(100); + timer->setSingleShot(true); + timer->callOnTimeout(this, &ChartView::adjustChartMargins); + QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState); QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged); QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries); QObject::connect(dynamic_cast(chart->axisX()), &QValueAxis::rangeChanged, can, &CANMessages::setRange); + QObject::connect(chart, &QChart::plotAreaChanged, [=](const QRectF &plotArea) { + // use a singleshot timer to avoid recursion call. + timer->start(); + }); updateSeries(); } +void ChartView::adjustChartMargins() { + // TODO: Remove hardcoded aligned_pos + const int aligned_pos = 60; + if (chart()->plotArea().left() != aligned_pos) { + const float left_margin = chart()->margins().left() + aligned_pos - chart()->plotArea().left(); + chart()->setMargins(QMargins(left_margin, 0, 0, 0)); + } +} + void ChartWidget::setHeight(int height) { chart_view->setFixedHeight(height); } diff --git a/tools/cabana/chartswidget.h b/tools/cabana/chartswidget.h index 3e43409dc4..fe2e14db9f 100644 --- a/tools/cabana/chartswidget.h +++ b/tools/cabana/chartswidget.h @@ -27,6 +27,7 @@ private: void mouseMoveEvent(QMouseEvent *ev) override; void enterEvent(QEvent *event) override; void leaveEvent(QEvent *event) override; + void adjustChartMargins(); void rangeChanged(qreal min, qreal max); void updateAxisY();