use native OS dialogs by default for load/save

This commit is contained in:
Jan Käberich 2024-11-03 12:54:16 +01:00
parent fc717a8f88
commit 64a7ddc455
25 changed files with 83 additions and 41 deletions

View file

@ -5,6 +5,7 @@
#include "unit.h" #include "unit.h"
#include "Util/util.h" #include "Util/util.h"
#include "LibreCAL/librecaldialog.h" #include "LibreCAL/librecaldialog.h"
#include "preferences.h"
#include "Eigen/Dense" #include "Eigen/Dense"
@ -1489,7 +1490,7 @@ bool Calibration::toFile(QString filename)
{ {
if(filename.isEmpty()) { if(filename.isEmpty()) {
QString fn = descriptiveCalName(); QString fn = descriptiveCalName();
filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", fn, "Calibration files (*.cal)", nullptr, QFileDialog::DontUseNativeDialog); filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", fn, "Calibration files (*.cal)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return false; return false;
@ -1513,7 +1514,7 @@ bool Calibration::toFile(QString filename)
bool Calibration::fromFile(QString filename) bool Calibration::fromFile(QString filename)
{ {
if(filename.isEmpty()) { if(filename.isEmpty()) {
filename = QFileDialog::getOpenFileName(nullptr, "Load calibration data", "", "Calibration files (*.cal)", nullptr, QFileDialog::DontUseNativeDialog); filename = QFileDialog::getOpenFileName(nullptr, "Load calibration data", "", "Calibration files (*.cal)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return false; return false;

View file

@ -2,6 +2,7 @@
#include "ui_calkitdialog.h" #include "ui_calkitdialog.h"
#include "CustomWidgets/informationbox.h" #include "CustomWidgets/informationbox.h"
#include "preferences.h"
#include <QPushButton> #include <QPushButton>
#include <QDebug> #include <QDebug>
@ -88,7 +89,7 @@ CalkitDialog::CalkitDialog(Calkit &c, QWidget *parent) :
accept(); accept();
}); });
connect(ui->buttonBox->button(QDialogButtonBox::Open), &QPushButton::clicked, [=](){ connect(ui->buttonBox->button(QDialogButtonBox::Open), &QPushButton::clicked, [=](){
auto filename = QFileDialog::getOpenFileName(this, "Open calibration kit coefficients", "", "Calibration kit files (*.calkit)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(this, "Open calibration kit coefficients", "", "Calibration kit files (*.calkit)", nullptr, Preferences::QFileDialogOptions());
if(filename.length() > 0) { if(filename.length() > 0) {
try { try {
kit = Calkit::fromFile(filename); kit = Calkit::fromFile(filename);
@ -102,7 +103,7 @@ CalkitDialog::CalkitDialog(Calkit &c, QWidget *parent) :
}); });
connect(ui->buttonBox->button(QDialogButtonBox::Save), &QPushButton::clicked, [=](){ connect(ui->buttonBox->button(QDialogButtonBox::Save), &QPushButton::clicked, [=](){
auto filename = QFileDialog::getSaveFileName(this, "Save calibration kit coefficients", "", "Calibration kit files (*.calkit)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(this, "Save calibration kit coefficients", "", "Calibration kit files (*.calkit)", nullptr, Preferences::QFileDialogOptions());
if(filename.length() > 0) { if(filename.length() > 0) {
parseEntries(); parseEntries();
kit.toFile(filename); kit.toFile(filename);

View file

@ -1,6 +1,7 @@
#include "csvimport.h" #include "csvimport.h"
#include "ui_csvimport.h" #include "ui_csvimport.h"
#include "Traces/trace.h" #include "Traces/trace.h"
#include "preferences.h"
#include <QFileDialog> #include <QFileDialog>
#include <QDebug> #include <QDebug>
@ -63,7 +64,7 @@ void CSVImport::selectTrace(unsigned int index)
void CSVImport::on_browse_clicked() void CSVImport::on_browse_clicked()
{ {
auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "CSV files (*.csv)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "CSV files (*.csv)", nullptr, Preferences::QFileDialogOptions());
if (filename.length() > 0) { if (filename.length() > 0) {
ui->file->setText(filename); ui->file->setText(filename);
evaluateFile(); evaluateFile();

View file

@ -1,6 +1,7 @@
#include "touchstoneimport.h" #include "touchstoneimport.h"
#include "ui_touchstoneimport.h" #include "ui_touchstoneimport.h"
#include "preferences.h"
#include <QFileDialog> #include <QFileDialog>
#include <QDebug> #include <QDebug>
@ -111,7 +112,7 @@ void TouchstoneImport::setFile(QString filename)
void TouchstoneImport::on_browse_clicked() void TouchstoneImport::on_browse_clicked()
{ {
auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "Touchstone files (*.s1p *.s2p *.s3p *.s4p)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "Touchstone files (*.s1p *.s2p *.s3p *.s4p)", nullptr, Preferences::QFileDialogOptions());
if (filename.length() > 0) { if (filename.length() > 0) {
ui->file->setText(filename); ui->file->setText(filename);
} }

View file

@ -44,7 +44,7 @@ AmplitudeCalDialog::AmplitudeCalDialog(LibreVNADriver *dev, QWidget *parent) :
connect(ui->saveFile, &QPushButton::clicked, [=](){ connect(ui->saveFile, &QPushButton::clicked, [=](){
auto fileEnding = pointType() == Protocol::PacketType::SourceCalPoint ? ".srccal" : ".recvcal"; auto fileEnding = pointType() == Protocol::PacketType::SourceCalPoint ? ".srccal" : ".recvcal";
auto fileFilter = QString("Amplitude calibration files (*")+fileEnding+")"; auto fileFilter = QString("Amplitude calibration files (*")+fileEnding+")";
auto filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", "", fileFilter, nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", "", fileFilter, nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;
@ -70,7 +70,7 @@ AmplitudeCalDialog::AmplitudeCalDialog(LibreVNADriver *dev, QWidget *parent) :
connect(ui->loadFile, &QPushButton::clicked, [=](){ connect(ui->loadFile, &QPushButton::clicked, [=](){
auto fileEnding = pointType() == Protocol::PacketType::SourceCalPoint ? ".srccal" : ".recvcal"; auto fileEnding = pointType() == Protocol::PacketType::SourceCalPoint ? ".srccal" : ".recvcal";
auto fileFilter = QString("Amplitude calibration files (*")+fileEnding+")"; auto fileFilter = QString("Amplitude calibration files (*")+fileEnding+")";
auto filename = QFileDialog::getOpenFileName(nullptr, "Save calibration data", "", fileFilter, nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(nullptr, "Save calibration data", "", fileFilter, nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;

View file

@ -3,6 +3,7 @@
#include "CustomWidgets/informationbox.h" #include "CustomWidgets/informationbox.h"
#include "unit.h" #include "unit.h"
#include "preferences.h"
#include <fstream> #include <fstream>
#include <iomanip> #include <iomanip>
@ -28,7 +29,7 @@ DevicePacketLogView::DevicePacketLogView(QWidget *parent) :
updateTree(); updateTree();
}); });
connect(ui->buttonBox->button(QDialogButtonBox::Save), &QPushButton::clicked, [=](){ connect(ui->buttonBox->button(QDialogButtonBox::Save), &QPushButton::clicked, [=](){
QString filename = QFileDialog::getSaveFileName(nullptr, "Load LibreVNA log data", "", "LibreVNA log files (*.vnalog)", nullptr, QFileDialog::DontUseNativeDialog); QString filename = QFileDialog::getSaveFileName(nullptr, "Load LibreVNA log data", "", "LibreVNA log files (*.vnalog)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;
@ -42,7 +43,7 @@ DevicePacketLogView::DevicePacketLogView(QWidget *parent) :
file.close(); file.close();
}); });
connect(ui->buttonBox->button(QDialogButtonBox::Open), &QPushButton::clicked, [=](){ connect(ui->buttonBox->button(QDialogButtonBox::Open), &QPushButton::clicked, [=](){
QString filename = QFileDialog::getOpenFileName(nullptr, "Load LibreVNA log data", "", "LibreVNA log files (*.vnalog)", nullptr, QFileDialog::DontUseNativeDialog); QString filename = QFileDialog::getOpenFileName(nullptr, "Load LibreVNA log data", "", "LibreVNA log files (*.vnalog)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;

View file

@ -3,6 +3,7 @@
#include "ui_firmwareupdatedialog.h" #include "ui_firmwareupdatedialog.h"
#include "../../VNA_embedded/Application/Communication/PacketConstants.h" #include "../../VNA_embedded/Application/Communication/PacketConstants.h"
#include "CustomWidgets/informationbox.h" #include "CustomWidgets/informationbox.h"
#include "preferences.h"
#include <QFileDialog> #include <QFileDialog>
#include <QStyle> #include <QStyle>
@ -51,7 +52,7 @@ bool FirmwareUpdateDialog::FirmwareUpdate(LibreVNADriver *dev, QString file)
void FirmwareUpdateDialog::on_bFile_clicked() void FirmwareUpdateDialog::on_bFile_clicked()
{ {
ui->bStart->setEnabled(false); ui->bStart->setEnabled(false);
auto filename = QFileDialog::getOpenFileName(nullptr, "Open firmware file", "", "Firmware file (*.vnafw)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(nullptr, "Open firmware file", "", "Firmware file (*.vnafw)", nullptr, Preferences::QFileDialogOptions());
if (filename.length() > 0) { if (filename.length() > 0) {
ui->lFile->setText(filename); ui->lFile->setText(filename);
reloadFile(); reloadFile();

View file

@ -1,6 +1,7 @@
#include "devicelog.h" #include "devicelog.h"
#include "ui_devicelog.h" #include "ui_devicelog.h"
#include "preferences.h"
#include <QScrollBar> #include <QScrollBar>
#include <QFileDialog> #include <QFileDialog>
@ -65,7 +66,7 @@ void DeviceLog::clear()
void DeviceLog::on_bToFile_clicked() void DeviceLog::on_bToFile_clicked()
{ {
auto filename = QFileDialog::getSaveFileName(this, "Select file for device log", "", "", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(this, "Select file for device log", "", "", nullptr, Preferences::QFileDialogOptions());
if(filename.length() > 0) { if(filename.length() > 0) {
// create file // create file
ofstream file; ofstream file;

View file

@ -23,7 +23,7 @@ void TraceWidgetSA::exportDialog()
void TraceWidgetSA::importDialog() void TraceWidgetSA::importDialog()
{ {
auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "CSV files (*.csv)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "CSV files (*.csv)", nullptr, Preferences::QFileDialogOptions());
if (!filename.isEmpty()) { if (!filename.isEmpty()) {
try { try {
std::vector<Trace*> traces; std::vector<Trace*> traces;

View file

@ -396,7 +396,7 @@ void EyeDiagramPlot::updateContextMenu()
auto image = new QAction("Save image...", contextmenu); auto image = new QAction("Save image...", contextmenu);
contextmenu->addAction(image); contextmenu->addAction(image);
connect(image, &QAction::triggered, [=]() { connect(image, &QAction::triggered, [=]() {
auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;

View file

@ -2,7 +2,7 @@
#include "ui_tracecsvexport.h" #include "ui_tracecsvexport.h"
#include "csv.h" #include "csv.h"
#include "preferences.h"
#include "traceaxis.h" #include "traceaxis.h"
#include <QDialogButtonBox> #include <QDialogButtonBox>
@ -72,7 +72,7 @@ void TraceCSVExport::on_buttonBox_accepted()
return; return;
} }
auto filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", "", "CSV files (*.csv)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", "", "CSV files (*.csv)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;

View file

@ -2,6 +2,7 @@
#include "Marker/marker.h" #include "Marker/marker.h"
#include "Util/util.h" #include "Util/util.h"
#include "preferences.h"
#include <QFileDialog> #include <QFileDialog>
@ -251,7 +252,7 @@ void TracePolar::updateContextMenu()
auto image = new QAction("Save image...", contextmenu); auto image = new QAction("Save image...", contextmenu);
contextmenu->addAction(image); contextmenu->addAction(image);
connect(image, &QAction::triggered, [=]() { connect(image, &QAction::triggered, [=]() {
auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;

View file

@ -2,6 +2,7 @@
#include "ui_tracetouchstoneexport.h" #include "ui_tracetouchstoneexport.h"
#include "touchstone.h" #include "touchstone.h"
#include "preferences.h"
#include <QDebug> #include <QDebug>
#include <QFileDialog> #include <QFileDialog>
@ -41,7 +42,7 @@ bool TraceTouchstoneExport::setPortNum(int ports)
void TraceTouchstoneExport::on_buttonBox_accepted() void TraceTouchstoneExport::on_buttonBox_accepted()
{ {
auto filename = QFileDialog::getSaveFileName(this, "Select file for exporting traces", "", "Touchstone files (*.s1p *.s2p *.s3p *.s4p)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(this, "Select file for exporting traces", "", "Touchstone files (*.s1p *.s2p *.s3p *.s4p)", nullptr, Preferences::QFileDialogOptions());
if(filename.length() > 0) { if(filename.length() > 0) {
auto ports = ui->sbPorts->value(); auto ports = ui->sbPorts->value();
auto t = Touchstone(ports); auto t = Touchstone(ports);

View file

@ -212,7 +212,7 @@ void TraceWaterfall::updateContextMenu()
auto image = new QAction("Save image...", contextmenu); auto image = new QAction("Save image...", contextmenu);
contextmenu->addAction(image); contextmenu->addAction(image);
connect(image, &QAction::triggered, [=]() { connect(image, &QAction::triggered, [=]() {
auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;

View file

@ -349,7 +349,7 @@ void TraceXYPlot::updateContextMenu()
auto image = new QAction("Save image...", contextmenu); auto image = new QAction("Save image...", contextmenu);
contextmenu->addAction(image); contextmenu->addAction(image);
connect(image, &QAction::triggered, [=]() { connect(image, &QAction::triggered, [=]() {
auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;

View file

@ -2,6 +2,7 @@
#include "ui_xyplotaxisdialog.h" #include "ui_xyplotaxisdialog.h"
#include "traceaxis.h" #include "traceaxis.h"
#include "preferences.h"
#include <QFileDialog> #include <QFileDialog>
#include <QStandardItemModel> #include <QStandardItemModel>
@ -239,7 +240,7 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) :
removeLine(index); removeLine(index);
}); });
connect(ui->exportLines, &QPushButton::clicked, this, [=](){ connect(ui->exportLines, &QPushButton::clicked, this, [=](){
QString filename = QFileDialog::getSaveFileName(nullptr, "Save limit lines", "", "Limit files (*.limits)", nullptr, QFileDialog::DontUseNativeDialog); QString filename = QFileDialog::getSaveFileName(nullptr, "Save limit lines", "", "Limit files (*.limits)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;
@ -262,7 +263,7 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) :
}); });
connect(ui->importLines, &QPushButton::clicked, [=](){ connect(ui->importLines, &QPushButton::clicked, [=](){
QString filename = QFileDialog::getOpenFileName(nullptr, "Load limit lines", "", "Limit files (*.limits)", nullptr, QFileDialog::DontUseNativeDialog); QString filename = QFileDialog::getOpenFileName(nullptr, "Load limit lines", "", "Limit files (*.limits)", nullptr, Preferences::QFileDialogOptions());
ifstream file; ifstream file;
file.open(filename.toStdString()); file.open(filename.toStdString());
if(!file.is_open()) { if(!file.is_open()) {

View file

@ -764,7 +764,7 @@ void MatchingComponent::mouseDoubleClickEvent(QMouseEvent *e)
Q_UNUSED(e); Q_UNUSED(e);
if(type == Type::DefinedThrough || type == Type::DefinedShunt) { if(type == Type::DefinedThrough || type == Type::DefinedShunt) {
// select new touchstone file // select new touchstone file
auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "Touchstone files (*.s2p)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "Touchstone files (*.s2p)", nullptr, Preferences::QFileDialogOptions());
if (!filename.isEmpty()) { if (!filename.isEmpty()) {
try { try {
*touchstone = Touchstone::fromFile(filename.toStdString()); *touchstone = Touchstone::fromFile(filename.toStdString());

View file

@ -56,7 +56,7 @@ void TraceWidgetVNA::exportTouchstone()
void TraceWidgetVNA::importDialog() void TraceWidgetVNA::importDialog()
{ {
auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "Touchstone files (*.s1p *.s2p *.s3p *.s4p);;CSV files (*.csv)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "Touchstone files (*.s1p *.s2p *.s3p *.s4p);;CSV files (*.csv)", nullptr, Preferences::QFileDialogOptions());
if (!filename.isEmpty()) { if (!filename.isEmpty()) {
try { try {
std::vector<Trace*> traces; std::vector<Trace*> traces;

View file

@ -228,7 +228,7 @@ VNA::VNA(AppWindow *window, QString name)
if(window->getDevice()) { if(window->getDevice()) {
auto key = "DefaultCalibration"+window->getDevice()->getSerial(); auto key = "DefaultCalibration"+window->getDevice()->getSerial();
QSettings settings; QSettings settings;
auto filename = QFileDialog::getOpenFileName(nullptr, "Load calibration data", settings.value(key).toString(), "Calibration files (*.cal)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(nullptr, "Load calibration data", settings.value(key).toString(), "Calibration files (*.cal)", nullptr, Preferences::QFileDialogOptions());
if(!filename.isEmpty()) { if(!filename.isEmpty()) {
settings.setValue(key, filename); settings.setValue(key, filename);
removeDefaultCal->setEnabled(true); removeDefaultCal->setEnabled(true);

View file

@ -229,7 +229,7 @@ void AppWindow::SetupMenu()
connect(ui->actionDisconnect, &QAction::triggered, this, &AppWindow::DisconnectDevice); connect(ui->actionDisconnect, &QAction::triggered, this, &AppWindow::DisconnectDevice);
connect(ui->actionQuit, &QAction::triggered, this, &AppWindow::close); connect(ui->actionQuit, &QAction::triggered, this, &AppWindow::close);
connect(ui->actionSave_setup, &QAction::triggered, [=](){ connect(ui->actionSave_setup, &QAction::triggered, [=](){
auto filename = QFileDialog::getSaveFileName(nullptr, "Save setup data", "", "Setup files (*.setup)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(nullptr, "Save setup data", "", "Setup files (*.setup)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;
@ -237,7 +237,7 @@ void AppWindow::SetupMenu()
SaveSetup(filename); SaveSetup(filename);
}); });
connect(ui->actionLoad_setup, &QAction::triggered, [=](){ connect(ui->actionLoad_setup, &QAction::triggered, [=](){
auto filename = QFileDialog::getOpenFileName(nullptr, "Load setup data", "", "Setup files (*.setup)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(nullptr, "Load setup data", "", "Setup files (*.setup)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;

View file

@ -141,7 +141,7 @@ Mode::Type Mode::TypeFromName(QString s)
void Mode::saveSreenshot() void Mode::saveSreenshot()
{ {
auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return; return;

View file

@ -68,7 +68,7 @@ PreferencesDialog::PreferencesDialog(Preferences *pref, QWidget *parent) :
ui->StartupStack->setCurrentWidget(ui->StartupPageSetupFile); ui->StartupStack->setCurrentWidget(ui->StartupPageSetupFile);
}); });
connect(ui->StartupBrowse, &QPushButton::clicked, [=](){ connect(ui->StartupBrowse, &QPushButton::clicked, [=](){
ui->StartupSetupFile->setText(QFileDialog::getOpenFileName(nullptr, "Select startup setup file", "", "Setup files (*.setup)", nullptr, QFileDialog::DontUseNativeDialog)); ui->StartupSetupFile->setText(QFileDialog::getOpenFileName(nullptr, "Select startup setup file", "", "Setup files (*.setup)", nullptr, Preferences::QFileDialogOptions()));
}); });
ui->StartupSweepStart->setUnit("Hz"); ui->StartupSweepStart->setUnit("Hz");
ui->StartupSweepStart->setPrefixes(" kMG"); ui->StartupSweepStart->setPrefixes(" kMG");
@ -186,7 +186,7 @@ PreferencesDialog::PreferencesDialog(Preferences *pref, QWidget *parent) :
updateFromGUI(); updateFromGUI();
}); });
connect(ui->buttonBox->button(QDialogButtonBox::Save), &QPushButton::clicked, [=](){ connect(ui->buttonBox->button(QDialogButtonBox::Save), &QPushButton::clicked, [=](){
auto filename = QFileDialog::getSaveFileName(this, "Save preferences", "", "LibreVNA preferences files (*.vnapref)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(this, "Save preferences", "", "LibreVNA preferences files (*.vnapref)", nullptr, Preferences::QFileDialogOptions());
if(filename.length() > 0) { if(filename.length() > 0) {
if(!filename.toLower().endsWith(".vnapref")) { if(!filename.toLower().endsWith(".vnapref")) {
filename.append(".vnapref"); filename.append(".vnapref");
@ -199,7 +199,7 @@ PreferencesDialog::PreferencesDialog(Preferences *pref, QWidget *parent) :
} }
}); });
connect(ui->buttonBox->button(QDialogButtonBox::Open), &QPushButton::clicked, [=](){ connect(ui->buttonBox->button(QDialogButtonBox::Open), &QPushButton::clicked, [=](){
auto filename = QFileDialog::getOpenFileName(this, "Load preferences", "", "LibreVNA preferences files (*.vnapref)", nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(this, "Load preferences", "", "LibreVNA preferences files (*.vnapref)", nullptr, Preferences::QFileDialogOptions());
if(filename.length() > 0) { if(filename.length() > 0) {
ifstream file; ifstream file;
file.open(filename.toStdString()); file.open(filename.toStdString());
@ -334,6 +334,7 @@ void PreferencesDialog::setInitialGUIState()
ui->DebugMaxUSBlogSize->setValue(p->Debug.USBlogSizeLimit); ui->DebugMaxUSBlogSize->setValue(p->Debug.USBlogSizeLimit);
ui->DebugSaveTraceData->setChecked(p->Debug.saveTraceData); ui->DebugSaveTraceData->setChecked(p->Debug.saveTraceData);
ui->DebugUseNativeDialogs->setChecked(p->Debug.useNativeDialogs);
QTreeWidgetItem *item = ui->treeWidget->topLevelItem(0); QTreeWidgetItem *item = ui->treeWidget->topLevelItem(0);
if (item != nullptr) { if (item != nullptr) {
@ -446,6 +447,7 @@ void PreferencesDialog::updateFromGUI()
p->Debug.USBlogSizeLimit = ui->DebugMaxUSBlogSize->value(); p->Debug.USBlogSizeLimit = ui->DebugMaxUSBlogSize->value();
p->Debug.saveTraceData = ui->DebugSaveTraceData->isChecked(); p->Debug.saveTraceData = ui->DebugSaveTraceData->isChecked();
p->Debug.useNativeDialogs = ui->DebugUseNativeDialogs->isChecked();
p->nonTrivialWriting(); p->nonTrivialWriting();
} }
@ -522,6 +524,14 @@ void Preferences::setDefault(std::vector<Savable::SettingDescription> descr)
} }
} }
QFileDialog::Options Preferences::QFileDialogOptions(QFileDialog::Options option)
{
if(!instance.Debug.useNativeDialogs) {
option = (QFileDialog::Option) ((int) option | QFileDialog::DontUseNativeDialog);
}
return option;
}
void Preferences::fromJSON(nlohmann::json j) void Preferences::fromJSON(nlohmann::json j)
{ {
parseJSON(j, descr); parseJSON(j, descr);

View file

@ -7,6 +7,7 @@
#include "Device/LibreVNA/Compound/compounddevice.h" #include "Device/LibreVNA/Compound/compounddevice.h"
#include <QDialog> #include <QDialog>
#include <QFileDialog>
#include <QVariant> #include <QVariant>
#include <exception> #include <exception>
@ -61,6 +62,8 @@ public:
void manualTCPport() { TCPoverride = true; } void manualTCPport() { TCPoverride = true; }
static QFileDialog::Options QFileDialogOptions(QFileDialog::Options option = (QFileDialog::Options) 0x00000000);
struct { struct {
bool ConnectToFirstDevice; bool ConnectToFirstDevice;
bool RememberSweepSettings; bool RememberSweepSettings;
@ -190,6 +193,7 @@ public:
struct { struct {
double USBlogSizeLimit; double USBlogSizeLimit;
bool saveTraceData; bool saveTraceData;
bool useNativeDialogs;
} Debug; } Debug;
bool TCPoverride; // in case of manual port specification via command line bool TCPoverride; // in case of manual port specification via command line
@ -310,6 +314,7 @@ private:
{&StreamingServers.SANormalizedData.port, "StreamingServers.SANormalizedData.port", 19101}, {&StreamingServers.SANormalizedData.port, "StreamingServers.SANormalizedData.port", 19101},
{&Debug.USBlogSizeLimit, "Debug.USBlogSizeLimit", 10000000.0}, {&Debug.USBlogSizeLimit, "Debug.USBlogSizeLimit", 10000000.0},
{&Debug.saveTraceData, "Debug.saveTraceData", false}, {&Debug.saveTraceData, "Debug.saveTraceData", false},
{&Debug.useNativeDialogs, "Debug.useNativeDialogs", true},
}}; }};
}; };

View file

@ -98,7 +98,7 @@
</size> </size>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>6</number>
</property> </property>
<widget class="QWidget" name="Startup"> <widget class="QWidget" name="Startup">
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4">
@ -112,8 +112,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>424</width> <width>679</width>
<height>852</height> <height>836</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_13"> <layout class="QVBoxLayout" name="verticalLayout_13">
@ -703,8 +703,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>450</width> <width>696</width>
<height>416</height> <height>564</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_21"> <layout class="QVBoxLayout" name="verticalLayout_21">
@ -943,7 +943,7 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>-400</y>
<width>679</width> <width>679</width>
<height>964</height> <height>964</height>
</rect> </rect>
@ -2074,8 +2074,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>194</width> <width>696</width>
<height>146</height> <height>564</height>
</rect> </rect>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_19"> <layout class="QHBoxLayout" name="horizontalLayout_19">
@ -2116,6 +2116,22 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<widget class="QGroupBox" name="groupBox_25">
<property name="title">
<string>Load/save dialogs</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_24">
<item>
<widget class="QCheckBox" name="DebugUseNativeDialogs">
<property name="text">
<string>Use native dialogs from OS</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item> <item>
<spacer name="verticalSpacer_9"> <spacer name="verticalSpacer_9">
<property name="orientation"> <property name="orientation">

View file

@ -1,5 +1,6 @@
#include "savable.h" #include "savable.h"
#include "CustomWidgets/informationbox.h" #include "CustomWidgets/informationbox.h"
#include "preferences.h"
#include <QFileDialog> #include <QFileDialog>
#include <fstream> #include <fstream>
@ -9,7 +10,7 @@ using namespace std;
bool Savable::openFromFileDialog(QString title, QString filetype) bool Savable::openFromFileDialog(QString title, QString filetype)
{ {
auto filename = QFileDialog::getOpenFileName(nullptr, title, "", filetype, nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getOpenFileName(nullptr, title, "", filetype, nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return false; return false;
@ -36,7 +37,7 @@ bool Savable::openFromFileDialog(QString title, QString filetype)
bool Savable::saveToFileDialog(QString title, QString filetype, QString ending) bool Savable::saveToFileDialog(QString title, QString filetype, QString ending)
{ {
auto filename = QFileDialog::getSaveFileName(nullptr, title, "", filetype, nullptr, QFileDialog::DontUseNativeDialog); auto filename = QFileDialog::getSaveFileName(nullptr, title, "", filetype, nullptr, Preferences::QFileDialogOptions());
if(filename.isEmpty()) { if(filename.isEmpty()) {
// aborted selection // aborted selection
return false; return false;