// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include "JFJochSimpleChartView.h" #include #include #include JFJochSimpleChartView::JFJochSimpleChartView(QWidget *parent) : QChartView(new QChart(), parent) { chart()->legend()->hide(); setFixedHeight(200); setRenderHint(QPainter::Antialiasing); //setRubberBand(QChartView::RubberBand::HorizontalRubberBand); } void JFJochSimpleChartView::UpdateData(const std::vector &in_x, const std::vector &in_y) { x = in_x; y = in_y; chart()->removeAllSeries(); if (!x.empty() && x.size() == y.size()) { series = new QLineSeries(this); for (int i = 0; i < x.size(); i++) series->append(x[i], in_y[i]); chart()->addSeries(series); chart()->createDefaultAxes(); } } void JFJochSimpleChartView::ClearData() { chart()->removeAllSeries(); } void JFJochSimpleChartView::contextMenuEvent(QContextMenuEvent *event) { QMenu menu(this); QAction *copyXY = menu.addAction("Copy (x y) points"); copyXY->setEnabled(!x.empty() && x.size() == y.size()); QAction *chosen = menu.exec(event->globalPos()); if (chosen == copyXY) { QString out; out.reserve(static_cast(x.size() * 16)); // rough prealloc for (size_t i = 0; i < x.size() && i < y.size(); ++i) { out.append(QString::number(x[i], 'g', 10)); out.append(' '); out.append(QString::number(y[i], 'g', 10)); if (i + 1 < x.size()) out.append('\n'); } QClipboard *cb = QApplication::clipboard(); cb->setText(out); } }