@@ -30,8 +30,8 @@ ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) {
30
30
title_label->setContentsMargins (0 , 0 , 12 , 0 );
31
31
columns_cb = new QComboBox (this );
32
32
columns_cb->addItems ({" 1" , " 2" , " 3" , " 4" });
33
- toolbar->addWidget (new QLabel (tr (" Columns:" )));
34
- toolbar->addWidget (columns_cb);
33
+ columns_lb_action = toolbar->addWidget (new QLabel (tr (" Columns:" )));
34
+ columns_cb_action = toolbar->addWidget (columns_cb);
35
35
36
36
QLabel *stretch_label = new QLabel (this );
37
37
stretch_label->setSizePolicy (QSizePolicy::Expanding, QSizePolicy::Preferred);
@@ -46,19 +46,21 @@ ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) {
46
46
range_slider->setPageStep (60 ); // 1 min
47
47
toolbar->addWidget (range_slider);
48
48
49
- toolbar->addWidget (zoom_range_lb = new QLabel ());
50
- reset_zoom_btn = toolbar->addAction (bootstrapPixmap (" arrow-counterclockwise" ), " " );
49
+ reset_zoom_btn = toolbar->addAction (bootstrapPixmap (" zoom-out" ), " " );
51
50
reset_zoom_btn->setToolTip (tr (" Reset zoom (drag on chart to zoom X-Axis)" ));
52
51
remove_all_btn = toolbar->addAction (bootstrapPixmap (" x" ), " " );
53
52
remove_all_btn->setToolTip (tr (" Remove all charts" ));
54
53
dock_btn = toolbar->addAction (" " );
55
54
main_layout->addWidget (toolbar);
56
55
57
56
// charts
57
+ charts_layout = new QGridLayout ();
58
+ charts_layout->setSpacing (10 );
59
+
58
60
QWidget *charts_container = new QWidget (this );
59
61
QVBoxLayout *charts_main_layout = new QVBoxLayout (charts_container);
60
62
charts_main_layout->setContentsMargins (0 , 0 , 0 , 0 );
61
- charts_main_layout->addLayout (charts_layout = new QGridLayout );
63
+ charts_main_layout->addLayout (charts_layout);
62
64
charts_main_layout->addStretch (0 );
63
65
64
66
QScrollArea *charts_scroll = new QScrollArea (this );
@@ -167,7 +169,6 @@ void ChartsWidget::setMaxChartRange(int value) {
167
169
168
170
void ChartsWidget::updateToolBar () {
169
171
range_lb->setText (QString (" %1:%2 " ).arg (max_chart_range / 60 , 2 , 10 , QLatin1Char (' 0' )).arg (max_chart_range % 60 , 2 , 10 , QLatin1Char (' 0' )));
170
- zoom_range_lb->setText (is_zoomed ? tr (" Zooming: %1 - %2" ).arg (zoomed_range.first , 0 , ' f' , 2 ).arg (zoomed_range.second , 0 , ' f' , 2 ) : " " );
171
172
title_label->setText (tr (" Charts: %1" ).arg (charts.size ()));
172
173
dock_btn->setIcon (bootstrapPixmap (docking ? " arrow-up-right" : " arrow-down-left" ));
173
174
dock_btn->setToolTip (docking ? tr (" Undock charts" ) : tr (" Dock charts" ));
@@ -230,8 +231,13 @@ void ChartsWidget::setColumnCount(int n) {
230
231
void ChartsWidget::updateLayout () {
231
232
int n = column_count;
232
233
for (; n > 1 ; --n) {
233
- if ((n * ( CHART_MIN_WIDTH + charts_layout->spacing ())) < rect ().width ()) break ;
234
+ if ((n * CHART_MIN_WIDTH + (n - 1 ) * charts_layout->spacing ()) < charts_layout-> geometry ().width ()) break ;
234
235
}
236
+
237
+ bool show_column_cb = n > 1 ;
238
+ columns_lb_action->setVisible (show_column_cb);
239
+ columns_cb_action->setVisible (show_column_cb);
240
+
235
241
for (int i = 0 ; i < charts.size (); ++i) {
236
242
charts_layout->addWidget (charts[charts.size () - i - 1 ], i / n, i % n);
237
243
}
@@ -469,6 +475,18 @@ void ChartView::updatePlot(double cur, double min, double max) {
469
475
axis_x->setRange (min, max);
470
476
updateAxisY ();
471
477
}
478
+
479
+ // Show points when zoomed in enough
480
+ for (auto &s : sigs) {
481
+ auto begin = std::lower_bound (s.vals .begin (), s.vals .end (), axis_x->min (), [](auto &p, double x) { return p.x () < x; });
482
+ auto end = std::lower_bound (s.vals .begin (), s.vals .end (), axis_x->max (), [](auto &p, double x) { return p.x () < x; });
483
+
484
+ int num_points = std::max<int >(end - begin, 1 );
485
+ int pixels_per_point = width () / num_points;
486
+
487
+ s.series ->setPointsVisible (pixels_per_point > 20 );
488
+ }
489
+
472
490
scene ()->invalidate ({}, QGraphicsScene::ForegroundLayer);
473
491
}
474
492
@@ -521,8 +539,8 @@ void ChartView::updateAxisY() {
521
539
522
540
if (min_y == std::numeric_limits<double >::max ()) min_y = 0 ;
523
541
if (max_y == std::numeric_limits<double >::lowest ()) max_y = 0 ;
524
- if (max_y == min_y) {
525
- axis_y-> setRange (min_y - 1 , max_y + 1 );
542
+ if (std::abs ( max_y - min_y) < 1e-3 ) {
543
+ applyNiceNumbers (min_y - 1 , max_y + 1 );
526
544
} else {
527
545
double range = max_y - min_y;
528
546
applyNiceNumbers (min_y - range * 0.05 , max_y + range * 0.05 );
@@ -539,6 +557,7 @@ void ChartView::applyNiceNumbers(qreal min, qreal max) {
539
557
tick_count = int (max - min) + 1 ;
540
558
axis_y->setRange (min * step, max * step);
541
559
axis_y->setTickCount (tick_count);
560
+ axis_y->setLabelFormat (" %.1f" );
542
561
}
543
562
544
563
// nice numbers can be expressed as form of 1*10^n, 2* 10^n or 5*10^n
0 commit comments