From fa4f37a0985802f83ec47b7fe0b29d1607ebe83c Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Sun, 29 Jan 2023 22:02:32 +0100 Subject: [PATCH] cabana: small improvements to charts (#27140) * cabana: small improvements to charts toolbar * show column count when wide enough * call setspacing * set in same place * remove call to updateToolBar() --- tools/cabana/chartswidget.cc | 20 +++++++++++++------- tools/cabana/chartswidget.h | 3 ++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/tools/cabana/chartswidget.cc b/tools/cabana/chartswidget.cc index 9f5b4acbd1..e653860c3d 100644 --- a/tools/cabana/chartswidget.cc +++ b/tools/cabana/chartswidget.cc @@ -30,8 +30,8 @@ ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) { title_label->setContentsMargins(0, 0, 12, 0); columns_cb = new QComboBox(this); columns_cb->addItems({"1", "2", "3", "4"}); - toolbar->addWidget(new QLabel(tr("Columns:"))); - toolbar->addWidget(columns_cb); + columns_lb_action = toolbar->addWidget(new QLabel(tr("Columns:"))); + columns_cb_action = toolbar->addWidget(columns_cb); QLabel *stretch_label = new QLabel(this); stretch_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); @@ -46,8 +46,7 @@ ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) { range_slider->setPageStep(60); // 1 min toolbar->addWidget(range_slider); - toolbar->addWidget(zoom_range_lb = new QLabel()); - reset_zoom_btn = toolbar->addAction(bootstrapPixmap("arrow-counterclockwise"), ""); + reset_zoom_btn = toolbar->addAction(bootstrapPixmap("zoom-out"), ""); reset_zoom_btn->setToolTip(tr("Reset zoom (drag on chart to zoom X-Axis)")); remove_all_btn = toolbar->addAction(bootstrapPixmap("x"), ""); remove_all_btn->setToolTip(tr("Remove all charts")); @@ -55,10 +54,13 @@ ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) { main_layout->addWidget(toolbar); // charts + charts_layout = new QGridLayout(); + charts_layout->setSpacing(10); + QWidget *charts_container = new QWidget(this); QVBoxLayout *charts_main_layout = new QVBoxLayout(charts_container); charts_main_layout->setContentsMargins(0, 0, 0, 0); - charts_main_layout->addLayout(charts_layout = new QGridLayout); + charts_main_layout->addLayout(charts_layout); charts_main_layout->addStretch(0); QScrollArea *charts_scroll = new QScrollArea(this); @@ -167,7 +169,6 @@ void ChartsWidget::setMaxChartRange(int value) { void ChartsWidget::updateToolBar() { range_lb->setText(QString(" %1:%2 ").arg(max_chart_range / 60, 2, 10, QLatin1Char('0')).arg(max_chart_range % 60, 2, 10, QLatin1Char('0'))); - zoom_range_lb->setText(is_zoomed ? tr("Zooming: %1 - %2").arg(zoomed_range.first, 0, 'f', 2).arg(zoomed_range.second, 0, 'f', 2) : ""); title_label->setText(tr("Charts: %1").arg(charts.size())); dock_btn->setIcon(bootstrapPixmap(docking ? "arrow-up-right" : "arrow-down-left")); dock_btn->setToolTip(docking ? tr("Undock charts") : tr("Dock charts")); @@ -230,8 +231,13 @@ void ChartsWidget::setColumnCount(int n) { void ChartsWidget::updateLayout() { int n = column_count; for (; n > 1; --n) { - if ((n * (CHART_MIN_WIDTH + charts_layout->spacing())) < rect().width()) break; + if ((n * CHART_MIN_WIDTH + (n - 1) * charts_layout->spacing()) < charts_layout->geometry().width()) break; } + + bool show_column_cb = n > 1; + columns_lb_action->setVisible(show_column_cb); + columns_cb_action->setVisible(show_column_cb); + for (int i = 0; i < charts.size(); ++i) { charts_layout->addWidget(charts[charts.size() - i - 1], i / n, i % n); } diff --git a/tools/cabana/chartswidget.h b/tools/cabana/chartswidget.h index f134136323..229b1e9cbe 100644 --- a/tools/cabana/chartswidget.h +++ b/tools/cabana/chartswidget.h @@ -116,7 +116,6 @@ private: ChartView *findChart(const QString &id, const Signal *sig); QLabel *title_label; - QLabel *zoom_range_lb; QLabel *range_lb; QSlider *range_slider; bool docking = true; @@ -131,6 +130,8 @@ private: std::pair display_range; std::pair zoomed_range; bool use_dark_theme = false; + QAction *columns_lb_action; + QAction *columns_cb_action; QComboBox *columns_cb; int column_count = 1; const int CHART_MIN_WIDTH = 300;