|
|
|
@ -24,6 +24,8 @@ ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) { |
|
|
|
|
QToolBar *toolbar = new QToolBar(tr("Charts"), this); |
|
|
|
|
toolbar->setIconSize({16, 16}); |
|
|
|
|
|
|
|
|
|
QAction *new_plot_btn = toolbar->addAction(bootstrapPixmap("file-plus"), ""); |
|
|
|
|
new_plot_btn->setToolTip(tr("New Plot")); |
|
|
|
|
toolbar->addWidget(title_label = new QLabel()); |
|
|
|
|
title_label->setContentsMargins(0, 0, 12, 0); |
|
|
|
|
columns_cb = new QComboBox(this); |
|
|
|
@ -83,6 +85,7 @@ ChartsWidget::ChartsWidget(QWidget *parent) : QWidget(parent) { |
|
|
|
|
QObject::connect(can, &AbstractStream::eventsMerged, this, &ChartsWidget::eventsMerged); |
|
|
|
|
QObject::connect(can, &AbstractStream::updated, this, &ChartsWidget::updateState); |
|
|
|
|
QObject::connect(range_slider, &QSlider::valueChanged, this, &ChartsWidget::setMaxChartRange); |
|
|
|
|
QObject::connect(new_plot_btn, &QAction::triggered, this, &ChartsWidget::newChart); |
|
|
|
|
QObject::connect(remove_all_btn, &QAction::triggered, this, &ChartsWidget::removeAll); |
|
|
|
|
QObject::connect(reset_zoom_btn, &QAction::triggered, this, &ChartsWidget::zoomReset); |
|
|
|
|
QObject::connect(columns_cb, SIGNAL(activated(int)), SLOT(setColumnCount(int))); |
|
|
|
@ -185,26 +188,28 @@ ChartView *ChartsWidget::findChart(const QString &id, const Signal *sig) { |
|
|
|
|
return nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ChartView *ChartsWidget::createChart() { |
|
|
|
|
auto chart = new ChartView(this); |
|
|
|
|
chart->setFixedHeight(settings.chart_height); |
|
|
|
|
chart->setMinimumWidth(CHART_MIN_WIDTH); |
|
|
|
|
chart->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); |
|
|
|
|
chart->chart()->setTheme(use_dark_theme ? QChart::QChart::ChartThemeDark : QChart::ChartThemeLight); |
|
|
|
|
QObject::connect(chart, &ChartView::remove, [=]() { removeChart(chart); }); |
|
|
|
|
QObject::connect(chart, &ChartView::zoomIn, this, &ChartsWidget::zoomIn); |
|
|
|
|
QObject::connect(chart, &ChartView::zoomReset, this, &ChartsWidget::zoomReset); |
|
|
|
|
QObject::connect(chart, &ChartView::seriesRemoved, this, &ChartsWidget::seriesChanged); |
|
|
|
|
QObject::connect(chart, &ChartView::seriesAdded, this, &ChartsWidget::seriesChanged); |
|
|
|
|
QObject::connect(chart, &ChartView::axisYUpdated, [this]() { align_charts_timer->start(100); }); |
|
|
|
|
charts.push_back(chart); |
|
|
|
|
updateLayout(); |
|
|
|
|
return chart; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ChartsWidget::showChart(const QString &id, const Signal *sig, bool show, bool merge) { |
|
|
|
|
setUpdatesEnabled(false); |
|
|
|
|
ChartView *chart = findChart(id, sig); |
|
|
|
|
if (show && !chart) { |
|
|
|
|
chart = merge && charts.size() > 0 ? charts.back() : nullptr; |
|
|
|
|
if (!chart) { |
|
|
|
|
chart = new ChartView(this); |
|
|
|
|
chart->setFixedHeight(settings.chart_height); |
|
|
|
|
chart->setMinimumWidth(CHART_MIN_WIDTH); |
|
|
|
|
chart->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); |
|
|
|
|
chart->chart()->setTheme(use_dark_theme ? QChart::QChart::ChartThemeDark : QChart::ChartThemeLight); |
|
|
|
|
QObject::connect(chart, &ChartView::remove, [=]() { removeChart(chart); }); |
|
|
|
|
QObject::connect(chart, &ChartView::zoomIn, this, &ChartsWidget::zoomIn); |
|
|
|
|
QObject::connect(chart, &ChartView::zoomReset, this, &ChartsWidget::zoomReset); |
|
|
|
|
QObject::connect(chart, &ChartView::seriesRemoved, this, &ChartsWidget::seriesChanged); |
|
|
|
|
QObject::connect(chart, &ChartView::seriesAdded, this, &ChartsWidget::seriesChanged); |
|
|
|
|
QObject::connect(chart, &ChartView::axisYUpdated, [this]() { align_charts_timer->start(100); }); |
|
|
|
|
charts.push_back(chart); |
|
|
|
|
updateLayout(); |
|
|
|
|
} |
|
|
|
|
chart = merge && charts.size() > 0 ? charts.back() : createChart(); |
|
|
|
|
chart->addSeries(id, sig); |
|
|
|
|
updateState(); |
|
|
|
|
} else if (!show && chart) { |
|
|
|
@ -237,6 +242,17 @@ void ChartsWidget::resizeEvent(QResizeEvent *event) { |
|
|
|
|
updateLayout(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ChartsWidget::newChart() { |
|
|
|
|
SeriesSelector dlg(this); |
|
|
|
|
if (dlg.exec() == QDialog::Accepted) { |
|
|
|
|
QList<QStringList> series_list = dlg.series(); |
|
|
|
|
if (!series_list.isEmpty()) { |
|
|
|
|
auto c = createChart(); |
|
|
|
|
c->addSeries(series_list); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ChartsWidget::removeChart(ChartView *chart) { |
|
|
|
|
charts.removeOne(chart); |
|
|
|
|
chart->deleteLater(); |
|
|
|
|