From e66fc0131ab966d8a9fa3d525c10efc0b709d821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4berich?= Date: Mon, 12 Apr 2021 20:15:38 +0200 Subject: [PATCH] Simple screenshot functionality --- .../PC_Application/Traces/tracesmithchart.cpp | 16 ++++++++++++++++ Software/PC_Application/Traces/tracexyplot.cpp | 16 ++++++++++++++++ Software/PC_Application/appwindow.cpp | 3 +++ Software/PC_Application/main.ui | 9 +++++++++ Software/PC_Application/mode.cpp | 15 +++++++++++++++ Software/PC_Application/mode.h | 2 ++ 6 files changed, 61 insertions(+) diff --git a/Software/PC_Application/Traces/tracesmithchart.cpp b/Software/PC_Application/Traces/tracesmithchart.cpp index 1082660..c0d12ce 100644 --- a/Software/PC_Application/Traces/tracesmithchart.cpp +++ b/Software/PC_Application/Traces/tracesmithchart.cpp @@ -7,6 +7,7 @@ #include "preferences.h" #include "ui_smithchartdialog.h" #include "unit.h" +#include "QFileDialog" using namespace std; @@ -291,6 +292,21 @@ void TraceSmithChart::updateContextMenu() contextmenu->addAction(action); } contextmenu->addSeparator(); + auto image = new QAction("Save image...", contextmenu); + contextmenu->addAction(image); + connect(image, &QAction::triggered, [=]() { + auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, QFileDialog::DontUseNativeDialog); + if(filename.isEmpty()) { + // aborted selection + return; + } + if(filename.endsWith(".png")) { + filename.chop(4); + } + filename += ".png"; + grab().save(filename); + }); + contextmenu->addSeparator(); auto close = new QAction("Close", contextmenu); contextmenu->addAction(close); connect(close, &QAction::triggered, [=]() { diff --git a/Software/PC_Application/Traces/tracexyplot.cpp b/Software/PC_Application/Traces/tracexyplot.cpp index fc5c95d..9c8dd71 100644 --- a/Software/PC_Application/Traces/tracexyplot.cpp +++ b/Software/PC_Application/Traces/tracexyplot.cpp @@ -11,6 +11,7 @@ #include "unit.h" #include #include "CustomWidgets/informationbox.h" +#include using namespace std; @@ -255,6 +256,21 @@ void TraceXYPlot::updateContextMenu() } } contextmenu->addSeparator(); + auto image = new QAction("Save image...", contextmenu); + contextmenu->addAction(image); + connect(image, &QAction::triggered, [=]() { + auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, QFileDialog::DontUseNativeDialog); + if(filename.isEmpty()) { + // aborted selection + return; + } + if(filename.endsWith(".png")) { + filename.chop(4); + } + filename += ".png"; + grab().save(filename); + }); + contextmenu->addSeparator(); auto close = new QAction("Close", contextmenu); contextmenu->addAction(close); connect(close, &QAction::triggered, [=]() { diff --git a/Software/PC_Application/appwindow.cpp b/Software/PC_Application/appwindow.cpp index e6578b0..acf8573 100644 --- a/Software/PC_Application/appwindow.cpp +++ b/Software/PC_Application/appwindow.cpp @@ -177,6 +177,9 @@ AppWindow::AppWindow(QWidget *parent) file.close(); LoadSetup(j); }); + connect(ui->actionSave_image, &QAction::triggered, [=](){ + Mode::getActiveMode()->saveSreenshot(); + }); connect(ui->actionManual_Control, &QAction::triggered, this, &AppWindow::StartManualControl); connect(ui->actionFirmware_Update, &QAction::triggered, this, &AppWindow::StartFirmwareUpdateDialog); diff --git a/Software/PC_Application/main.ui b/Software/PC_Application/main.ui index 9ccf3ba..0658f93 100644 --- a/Software/PC_Application/main.ui +++ b/Software/PC_Application/main.ui @@ -29,6 +29,7 @@ + @@ -190,6 +191,14 @@ Load setup + + + + + + Save image... + + diff --git a/Software/PC_Application/mode.cpp b/Software/PC_Application/mode.cpp index 76d373b..4a7cb6d 100644 --- a/Software/PC_Application/mode.cpp +++ b/Software/PC_Application/mode.cpp @@ -4,6 +4,7 @@ #include #include "ui_main.h" #include +#include Mode* Mode::activeMode = nullptr; QWidget* Mode::cornerWidget = nullptr; @@ -127,6 +128,20 @@ Mode *Mode::getActiveMode() return activeMode; } +void Mode::saveSreenshot() +{ + auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, QFileDialog::DontUseNativeDialog); + if(filename.isEmpty()) { + // aborted selection + return; + } + if(filename.endsWith(".png")) { + filename.chop(4); + } + filename += ".png"; + central->grab().save(filename); +} + void Mode::finalize(QWidget *centralWidget) { central = centralWidget; diff --git a/Software/PC_Application/mode.h b/Software/PC_Application/mode.h index 931c5ae..b5219d6 100644 --- a/Software/PC_Application/mode.h +++ b/Software/PC_Application/mode.h @@ -24,6 +24,8 @@ public: virtual void initializeDevice() = 0; virtual void deviceDisconnected(){}; + virtual void saveSreenshot(); + protected: // call once the derived class is fully initialized void finalize(QWidget *centralWidget);