Files
Jungfraujoch/viewer/widgets/JFJochSimpleChartView.cpp
2025-09-21 19:27:51 +02:00

54 lines
1.7 KiB
C++

// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
// SPDX-License-Identifier: GPL-3.0-only
#include "JFJochSimpleChartView.h"
#include <QMenu>
#include <QClipboard>
#include <QApplication>
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<float> &in_x, const std::vector<float> &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<int>(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);
}
}