Skip to content

Commit 56dbec8

Browse files
committed
Add image saving to SVG format
This allows to create images independent from screen resolution Replaced copy-pasted screenshot code with the single implementation
1 parent bbd1bce commit 56dbec8

14 files changed

Lines changed: 96 additions & 62 deletions

File tree

.github/workflows/Build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- name: Install dependencies
1818
run: |
1919
sudo apt-get update
20-
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev
20+
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev libqt6svg6-dev libgl-dev
2121
qtchooser -install qt6 $(which qmake6)
2222
2323
- name: Get build timestamp

.github/workflows/HIL_Tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
- name: Install dependencies
2020
run: |
2121
sudo apt-get update
22-
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev
22+
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev qt6-svg-dev
2323
2424
- name: Build application
2525
run: |

.github/workflows/Release_tag_stable.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- name: Install dependencies
1818
run: |
1919
sudo apt-get update
20-
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev zip
20+
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev libqt6svg6-dev libgl-dev zip
2121
qtchooser -install qt6 $(which qmake6)
2222
2323
- name: Get app version
@@ -72,7 +72,7 @@ jobs:
7272
- name: Install dependencies
7373
run: |
7474
sudo apt-get update
75-
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev
75+
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev qt6-svg-dev
7676
7777
- name: Get app version
7878
id: id_version

.github/workflows/Test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- name: Install dependencies
1818
run: |
1919
sudo apt-get update
20-
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev
20+
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev libqt6svg6-dev libgl-dev
2121
qtchooser -install qt6 $(which qmake6)
2222
2323
- name: Build Tests

Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI.pro

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ HEADERS += \
164164
preferences.h \
165165
savable.h \
166166
scpi.h \
167+
screenshot.h \
167168
streamingserver.h \
168169
tcpserver.h \
169170
touchstone.h \
@@ -320,6 +321,7 @@ SOURCES += \
320321
preferences.cpp \
321322
savable.cpp \
322323
scpi.cpp \
324+
screenshot.cpp \
323325
streamingserver.cpp \
324326
tcpserver.cpp \
325327
touchstone.cpp \
@@ -338,7 +340,7 @@ mac{
338340
PKGCONFIG += libusb-1.0
339341
}
340342

341-
QT += widgets network
343+
QT += widgets network svg
342344

343345
FORMS += \
344346
Calibration/CalStandardLineEditDialog.ui \

Software/PC_Application/LibreVNA-GUI/Traces/eyediagramplot.cpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "fftcomplex.h"
88
#include "preferences.h"
99
#include "appwindow.h"
10+
#include "screenshot.h"
1011

1112
#include <random>
1213
#include <thread>
@@ -403,17 +404,7 @@ void EyeDiagramPlot::updateContextMenu()
403404
auto image = new QAction("Save image...", contextmenu);
404405
contextmenu->addAction(image);
405406
connect(image, &QAction::triggered, this, [=]() {
406-
auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", Preferences::getInstance().UISettings.Paths.image, "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions());
407-
if(filename.isEmpty()) {
408-
// aborted selection
409-
return;
410-
}
411-
Preferences::getInstance().UISettings.Paths.image = QFileInfo(filename).path();
412-
if(filename.endsWith(".png")) {
413-
filename.chop(4);
414-
}
415-
filename += ".png";
416-
grab().save(filename);
407+
SaveScreenshot(this);
417408
});
418409

419410
contextmenu->addSection("Traces");

Software/PC_Application/LibreVNA-GUI/Traces/tracepolar.cpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "Marker/marker.h"
44
#include "Util/util.h"
55
#include "preferences.h"
6+
#include "screenshot.h"
67

78
#include <QFileDialog>
89

@@ -253,17 +254,7 @@ void TracePolar::updateContextMenu()
253254
auto image = new QAction("Save image...", contextmenu);
254255
contextmenu->addAction(image);
255256
connect(image, &QAction::triggered, [=]() {
256-
auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", Preferences::getInstance().UISettings.Paths.image, "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions());
257-
if(filename.isEmpty()) {
258-
// aborted selection
259-
return;
260-
}
261-
Preferences::getInstance().UISettings.Paths.image = QFileInfo(filename).path();
262-
if(filename.endsWith(".png")) {
263-
filename.chop(4);
264-
}
265-
filename += ".png";
266-
grab().save(filename);
257+
SaveScreenshot(this);
267258
});
268259

269260
auto createMarker = contextmenu->addAction("Add marker here");

Software/PC_Application/LibreVNA-GUI/Traces/tracewaterfall.cpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "waterfallaxisdialog.h"
77
#include "appwindow.h"
88
#include "tracexyplot.h"
9+
#include "screenshot.h"
910

1011
#include <QFileDialog>
1112
#include <QPainter>
@@ -213,17 +214,7 @@ void TraceWaterfall::updateContextMenu()
213214
auto image = new QAction("Save image...", contextmenu);
214215
contextmenu->addAction(image);
215216
connect(image, &QAction::triggered, [=]() {
216-
auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", Preferences::getInstance().UISettings.Paths.image, "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions());
217-
if(filename.isEmpty()) {
218-
// aborted selection
219-
return;
220-
}
221-
Preferences::getInstance().UISettings.Paths.image = QFileInfo(filename).path();
222-
if(filename.endsWith(".png")) {
223-
filename.chop(4);
224-
}
225-
filename += ".png";
226-
grab().save(filename);
217+
SaveScreenshot(this);
227218
});
228219

229220
contextmenu->addSection("Traces");

Software/PC_Application/LibreVNA-GUI/Traces/tracexyplot.cpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "preferences.h"
1010
#include "appwindow.h"
1111
#include "ui_XYPlotConstantLineEditDialog.h"
12+
#include "screenshot.h"
1213

1314
#include <QGridLayout>
1415
#include <cmath>
@@ -349,17 +350,7 @@ void TraceXYPlot::updateContextMenu()
349350
auto image = new QAction("Save image...", contextmenu);
350351
contextmenu->addAction(image);
351352
connect(image, &QAction::triggered, [=]() {
352-
auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", Preferences::getInstance().UISettings.Paths.image, "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions());
353-
if(filename.isEmpty()) {
354-
// aborted selection
355-
return;
356-
}
357-
Preferences::getInstance().UISettings.Paths.image = QFileInfo(filename).path();
358-
if(filename.endsWith(".png")) {
359-
filename.chop(4);
360-
}
361-
filename += ".png";
362-
grab().save(filename);
353+
SaveScreenshot(this);
363354
});
364355

365356
auto createMarker = contextmenu->addAction("Add marker here");

Software/PC_Application/LibreVNA-GUI/mode.cpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "CustomWidgets/informationbox.h"
77

88
#include "ui_main.h"
9+
#include "screenshot.h"
910

1011
#include <QPushButton>
1112
#include <QSettings>
@@ -141,17 +142,7 @@ Mode::Type Mode::TypeFromName(QString s)
141142

142143
void Mode::saveSreenshot()
143144
{
144-
auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", Preferences::getInstance().UISettings.Paths.image, "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions());
145-
if(filename.isEmpty()) {
146-
// aborted selection
147-
return;
148-
}
149-
Preferences::getInstance().UISettings.Paths.image = QFileInfo(filename).path();
150-
if(filename.endsWith(".png")) {
151-
filename.chop(4);
152-
}
153-
filename += ".png";
154-
central->grab().save(filename);
145+
SaveScreenshot(central);
155146
}
156147

157148
void Mode::finalize(QWidget *centralWidget)

0 commit comments

Comments
 (0)