diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp b/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp index b922c16..f7bfba2 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/calibration.cpp @@ -1487,11 +1487,12 @@ bool Calibration::toFile(QString filename) { if(filename.isEmpty()) { QString fn = descriptiveCalName(); - filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", fn, "Calibration files (*.cal)", nullptr, Preferences::QFileDialogOptions()); + filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", Preferences::getInstance().UISettings.Paths.cal + "/" + fn, "Calibration files (*.cal)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return false; } + Preferences::getInstance().UISettings.Paths.cal = QFileInfo(filename).path(); } if(filename.toLower().endsWith(".cal")) { @@ -1511,11 +1512,12 @@ bool Calibration::toFile(QString filename) bool Calibration::fromFile(QString filename) { if(filename.isEmpty()) { - filename = QFileDialog::getOpenFileName(nullptr, "Load calibration data", "", "Calibration files (*.cal)", nullptr, Preferences::QFileDialogOptions()); + filename = QFileDialog::getOpenFileName(nullptr, "Load calibration data", Preferences::getInstance().UISettings.Paths.cal, "Calibration files (*.cal)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return false; } + Preferences::getInstance().UISettings.Paths.cal = QFileInfo(filename).path(); } // force correct file ending diff --git a/Software/PC_Application/LibreVNA-GUI/Calibration/calkitdialog.cpp b/Software/PC_Application/LibreVNA-GUI/Calibration/calkitdialog.cpp index e556305..f3d057d 100644 --- a/Software/PC_Application/LibreVNA-GUI/Calibration/calkitdialog.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Calibration/calkitdialog.cpp @@ -89,8 +89,9 @@ CalkitDialog::CalkitDialog(Calkit &c, QWidget *parent) : accept(); }); connect(ui->buttonBox->button(QDialogButtonBox::Open), &QPushButton::clicked, [=](){ - auto filename = QFileDialog::getOpenFileName(this, "Open calibration kit coefficients", "", "Calibration kit files (*.calkit)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getOpenFileName(this, "Open calibration kit coefficients", Preferences::getInstance().UISettings.Paths.calkit, "Calibration kit files (*.calkit)", nullptr, Preferences::QFileDialogOptions()); if(filename.length() > 0) { + Preferences::getInstance().UISettings.Paths.calkit = QFileInfo(filename).path(); try { kit = Calkit::fromFile(filename); } catch (runtime_error &e) { @@ -103,8 +104,9 @@ CalkitDialog::CalkitDialog(Calkit &c, QWidget *parent) : }); connect(ui->buttonBox->button(QDialogButtonBox::Save), &QPushButton::clicked, [=](){ - auto filename = QFileDialog::getSaveFileName(this, "Save calibration kit coefficients", "", "Calibration kit files (*.calkit)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(this, "Save calibration kit coefficients", Preferences::getInstance().UISettings.Paths.calkit, "Calibration kit files (*.calkit)", nullptr, Preferences::QFileDialogOptions()); if(filename.length() > 0) { + Preferences::getInstance().UISettings.Paths.calkit = QFileInfo(filename).path(); parseEntries(); kit.toFile(filename); } diff --git a/Software/PC_Application/LibreVNA-GUI/CustomWidgets/csvimport.cpp b/Software/PC_Application/LibreVNA-GUI/CustomWidgets/csvimport.cpp index 39a5e56..686d301 100644 --- a/Software/PC_Application/LibreVNA-GUI/CustomWidgets/csvimport.cpp +++ b/Software/PC_Application/LibreVNA-GUI/CustomWidgets/csvimport.cpp @@ -64,8 +64,9 @@ void CSVImport::selectTrace(unsigned int index) void CSVImport::on_browse_clicked() { - auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "CSV files (*.csv)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", Preferences::getInstance().UISettings.Paths.data, "CSV files (*.csv)", nullptr, Preferences::QFileDialogOptions()); if (filename.length() > 0) { + Preferences::getInstance().UISettings.Paths.data = QFileInfo(filename).path(); ui->file->setText(filename); evaluateFile(); } diff --git a/Software/PC_Application/LibreVNA-GUI/CustomWidgets/touchstoneimport.cpp b/Software/PC_Application/LibreVNA-GUI/CustomWidgets/touchstoneimport.cpp index f06d702..179a786 100644 --- a/Software/PC_Application/LibreVNA-GUI/CustomWidgets/touchstoneimport.cpp +++ b/Software/PC_Application/LibreVNA-GUI/CustomWidgets/touchstoneimport.cpp @@ -112,8 +112,9 @@ void TouchstoneImport::setFile(QString filename) void TouchstoneImport::on_browse_clicked() { - auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "Touchstone files (*.s1p *.s2p *.s3p *.s4p)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", Preferences::getInstance().UISettings.Paths.data, "Touchstone files (*.s1p *.s2p *.s3p *.s4p)", nullptr, Preferences::QFileDialogOptions()); if (filename.length() > 0) { + Preferences::getInstance().UISettings.Paths.data = QFileInfo(filename).path(); ui->file->setText(filename); } } diff --git a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/amplitudecaldialog.cpp b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/amplitudecaldialog.cpp index ae435e5..dba20aa 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/amplitudecaldialog.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/amplitudecaldialog.cpp @@ -44,11 +44,12 @@ AmplitudeCalDialog::AmplitudeCalDialog(LibreVNADriver *dev, QWidget *parent) : connect(ui->saveFile, &QPushButton::clicked, [=](){ auto fileEnding = pointType() == Protocol::PacketType::SourceCalPoint ? ".srccal" : ".recvcal"; auto fileFilter = QString("Amplitude calibration files (*")+fileEnding+")"; - auto filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", "", fileFilter, nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", Preferences::getInstance().UISettings.Paths.vnacaldata, fileFilter, nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.vnacaldata = QFileInfo(filename).path(); if(!filename.endsWith(fileEnding)) { filename.append(fileEnding); } @@ -70,11 +71,12 @@ AmplitudeCalDialog::AmplitudeCalDialog(LibreVNADriver *dev, QWidget *parent) : connect(ui->loadFile, &QPushButton::clicked, [=](){ auto fileEnding = pointType() == Protocol::PacketType::SourceCalPoint ? ".srccal" : ".recvcal"; auto fileFilter = QString("Amplitude calibration files (*")+fileEnding+")"; - auto filename = QFileDialog::getOpenFileName(nullptr, "Save calibration data", "", fileFilter, nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getOpenFileName(nullptr, "Save calibration data", Preferences::getInstance().UISettings.Paths.vnacaldata, fileFilter, nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.vnacaldata = QFileInfo(filename).path(); ifstream file; file.open(filename.toStdString()); if(!file.is_open()) { diff --git a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/devicepacketlogview.cpp b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/devicepacketlogview.cpp index 8ff3798..6b4bae8 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/devicepacketlogview.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/devicepacketlogview.cpp @@ -29,11 +29,12 @@ DevicePacketLogView::DevicePacketLogView(QWidget *parent) : updateTree(); }); connect(ui->buttonBox->button(QDialogButtonBox::Save), &QPushButton::clicked, [=](){ - QString filename = QFileDialog::getSaveFileName(nullptr, "Load LibreVNA log data", "", "LibreVNA log files (*.vnalog)", nullptr, Preferences::QFileDialogOptions()); + QString filename = QFileDialog::getSaveFileName(nullptr, "Save LibreVNA log data", Preferences::getInstance().UISettings.Paths.packetlog, "LibreVNA log files (*.vnalog)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.packetlog = QFileInfo(filename).path(); if(!filename.endsWith(".vnalog")) { filename.append(".vnalog"); } @@ -43,11 +44,12 @@ DevicePacketLogView::DevicePacketLogView(QWidget *parent) : file.close(); }); connect(ui->buttonBox->button(QDialogButtonBox::Open), &QPushButton::clicked, [=](){ - QString filename = QFileDialog::getOpenFileName(nullptr, "Load LibreVNA log data", "", "LibreVNA log files (*.vnalog)", nullptr, Preferences::QFileDialogOptions()); + QString filename = QFileDialog::getOpenFileName(nullptr, "Load LibreVNA log data", Preferences::getInstance().UISettings.Paths.packetlog, "LibreVNA log files (*.vnalog)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.packetlog = QFileInfo(filename).path(); ifstream file; file.open(filename.toStdString()); if(!file.is_open()) { diff --git a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/firmwareupdatedialog.cpp b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/firmwareupdatedialog.cpp index 85c6c46..654c723 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/firmwareupdatedialog.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Device/LibreVNA/firmwareupdatedialog.cpp @@ -52,8 +52,9 @@ bool FirmwareUpdateDialog::FirmwareUpdate(LibreVNADriver *dev, QString file) void FirmwareUpdateDialog::on_bFile_clicked() { ui->bStart->setEnabled(false); - auto filename = QFileDialog::getOpenFileName(nullptr, "Open firmware file", "", "Firmware file (*.vnafw)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getOpenFileName(nullptr, "Open firmware file", Preferences::getInstance().UISettings.Paths.firmware, "Firmware file (*.vnafw)", nullptr, Preferences::QFileDialogOptions()); if (filename.length() > 0) { + Preferences::getInstance().UISettings.Paths.firmware = QFileInfo(filename).path(); ui->lFile->setText(filename); reloadFile(); } diff --git a/Software/PC_Application/LibreVNA-GUI/Device/devicelog.cpp b/Software/PC_Application/LibreVNA-GUI/Device/devicelog.cpp index 0f83f92..edc94d3 100644 --- a/Software/PC_Application/LibreVNA-GUI/Device/devicelog.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Device/devicelog.cpp @@ -68,8 +68,9 @@ void DeviceLog::clear() void DeviceLog::on_bToFile_clicked() { - auto filename = QFileDialog::getSaveFileName(this, "Select file for device log", "", "", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(this, "Select file for device log", Preferences::getInstance().UISettings.Paths.packetlog, "", nullptr, Preferences::QFileDialogOptions()); if(filename.length() > 0) { + Preferences::getInstance().UISettings.Paths.packetlog = QFileInfo(filename).path(); // create file ofstream file; file.open(filename.toStdString()); diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/eyediagramplot.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/eyediagramplot.cpp index fd6a954..d686387 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/eyediagramplot.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/eyediagramplot.cpp @@ -403,11 +403,12 @@ void EyeDiagramPlot::updateContextMenu() auto image = new QAction("Save image...", contextmenu); contextmenu->addAction(image); connect(image, &QAction::triggered, this, [=]() { - auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", Preferences::getInstance().UISettings.Paths.image, "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.image = QFileInfo(filename).path(); if(filename.endsWith(".png")) { filename.chop(4); } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/tracecsvexport.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/tracecsvexport.cpp index dc59c48..af0e2a4 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/tracecsvexport.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/tracecsvexport.cpp @@ -72,11 +72,12 @@ void TraceCSVExport::on_buttonBox_accepted() return; } - auto filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", "", "CSV files (*.csv)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(nullptr, "Save calibration data", Preferences::getInstance().UISettings.Paths.data, "CSV files (*.csv)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.data = QFileInfo(filename).path(); if(!filename.endsWith(".csv")) { filename.append(".csv"); } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/tracepolar.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/tracepolar.cpp index 8de5b17..15b87c7 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/tracepolar.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/tracepolar.cpp @@ -253,11 +253,12 @@ void TracePolar::updateContextMenu() 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, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", Preferences::getInstance().UISettings.Paths.image, "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.image = QFileInfo(filename).path(); if(filename.endsWith(".png")) { filename.chop(4); } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/tracetouchstoneexport.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/tracetouchstoneexport.cpp index 10dd1ee..8c773a2 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/tracetouchstoneexport.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/tracetouchstoneexport.cpp @@ -99,8 +99,9 @@ void TraceTouchstoneExport::on_buttonBox_accepted() { unsigned int ports = ui->sbPorts->value(); QString extension = ".s"+QString::number(ports)+"p"; - auto filename = QFileDialog::getSaveFileName(this, "Select file for exporting traces", "", "Touchstone files (*"+extension+")", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(this, "Select file for exporting traces", Preferences::getInstance().UISettings.Paths.data, "Touchstone files (*"+extension+")", nullptr, Preferences::QFileDialogOptions()); if(filename.length() > 0) { + Preferences::getInstance().UISettings.Paths.data = QFileInfo(filename).path(); auto t = Touchstone(ports); t.setReferenceImpedance(ui->selector->getReferenceImpedance()); // add trace points to touchstone diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/tracewaterfall.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/tracewaterfall.cpp index 2177cdc..043a6e3 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/tracewaterfall.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/tracewaterfall.cpp @@ -213,11 +213,12 @@ void TraceWaterfall::updateContextMenu() 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, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", Preferences::getInstance().UISettings.Paths.image, "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.image = QFileInfo(filename).path(); if(filename.endsWith(".png")) { filename.chop(4); } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/tracewidget.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/tracewidget.cpp index 3640178..5ddf491 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/tracewidget.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/tracewidget.cpp @@ -222,8 +222,9 @@ void TraceWidget::importDialog() } supported.chop(1); supported += ")"; - auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", supported, nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", Preferences::getInstance().UISettings.Paths.data, supported, nullptr, Preferences::QFileDialogOptions()); if (!filename.isEmpty()) { + Preferences::getInstance().UISettings.Paths.data = QFileInfo(filename).path(); importFile(filename); } } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/tracexyplot.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/tracexyplot.cpp index 4b8f2c3..3fcd8ea 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/tracexyplot.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/tracexyplot.cpp @@ -350,11 +350,12 @@ void TraceXYPlot::updateContextMenu() 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, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", Preferences::getInstance().UISettings.Paths.image, "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.image = QFileInfo(filename).path(); if(filename.endsWith(".png")) { filename.chop(4); } diff --git a/Software/PC_Application/LibreVNA-GUI/Traces/xyplotaxisdialog.cpp b/Software/PC_Application/LibreVNA-GUI/Traces/xyplotaxisdialog.cpp index 1a59b97..ccde4f2 100644 --- a/Software/PC_Application/LibreVNA-GUI/Traces/xyplotaxisdialog.cpp +++ b/Software/PC_Application/LibreVNA-GUI/Traces/xyplotaxisdialog.cpp @@ -242,11 +242,12 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) : removeLine(index); }); connect(ui->exportLines, &QPushButton::clicked, this, [=](){ - QString filename = QFileDialog::getSaveFileName(nullptr, "Save limit lines", "", "Limit files (*.limits)", nullptr, Preferences::QFileDialogOptions()); + QString filename = QFileDialog::getSaveFileName(nullptr, "Save limit lines", Preferences::getInstance().UISettings.Paths.limitLines, "Limit files (*.limits)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.limitLines = QFileInfo(filename).path(); if(!filename.endsWith(".limits")) { filename.append(".limits"); } @@ -265,7 +266,7 @@ XYplotAxisDialog::XYplotAxisDialog(TraceXYPlot *plot) : }); connect(ui->importLines, &QPushButton::clicked, [=](){ - QString filename = QFileDialog::getOpenFileName(nullptr, "Load limit lines", "", "Limit files (*.limits)", nullptr, Preferences::QFileDialogOptions()); + QString filename = QFileDialog::getOpenFileName(nullptr, "Load limit lines", Preferences::getInstance().UISettings.Paths.limitLines, "Limit files (*.limits)", nullptr, Preferences::QFileDialogOptions()); ifstream file; file.open(filename.toStdString()); if(!file.is_open()) { diff --git a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/matchingnetwork.cpp b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/matchingnetwork.cpp index 52823fc..039e1f6 100644 --- a/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/matchingnetwork.cpp +++ b/Software/PC_Application/LibreVNA-GUI/VNA/Deembedding/matchingnetwork.cpp @@ -767,8 +767,9 @@ void MatchingComponent::mouseDoubleClickEvent(QMouseEvent *e) Q_UNUSED(e); if(type == Type::DefinedThrough || type == Type::DefinedShunt) { // select new touchstone file - auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", "", "Touchstone files (*.s2p)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getOpenFileName(nullptr, "Open measurement file", Preferences::getInstance().UISettings.Paths.data, "Touchstone files (*.s2p)", nullptr, Preferences::QFileDialogOptions()); if (!filename.isEmpty()) { + Preferences::getInstance().UISettings.Paths.data = QFileInfo(filename).path(); try { *touchstone = Touchstone::fromFile(filename.toStdString()); } catch(const std::exception& e) { diff --git a/Software/PC_Application/LibreVNA-GUI/appwindow.cpp b/Software/PC_Application/LibreVNA-GUI/appwindow.cpp index 57e6afa..b11ae40 100644 --- a/Software/PC_Application/LibreVNA-GUI/appwindow.cpp +++ b/Software/PC_Application/LibreVNA-GUI/appwindow.cpp @@ -229,19 +229,21 @@ void AppWindow::SetupMenu() connect(ui->actionDisconnect, &QAction::triggered, this, &AppWindow::DisconnectDevice); connect(ui->actionQuit, &QAction::triggered, this, &AppWindow::close); connect(ui->actionSave_setup, &QAction::triggered, [=](){ - auto filename = QFileDialog::getSaveFileName(nullptr, "Save setup data", "", "Setup files (*.setup)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(nullptr, "Save setup data", Preferences::getInstance().UISettings.Paths.setup, "Setup files (*.setup)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.setup = QFileInfo(filename).path(); SaveSetup(filename); }); connect(ui->actionLoad_setup, &QAction::triggered, [=](){ - auto filename = QFileDialog::getOpenFileName(nullptr, "Load setup data", "", "Setup files (*.setup)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getOpenFileName(nullptr, "Load setup data", Preferences::getInstance().UISettings.Paths.setup, "Setup files (*.setup)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.setup = QFileInfo(filename).path(); LoadSetup(filename); }); connect(ui->actionSave_image, &QAction::triggered, [=](){ diff --git a/Software/PC_Application/LibreVNA-GUI/mode.cpp b/Software/PC_Application/LibreVNA-GUI/mode.cpp index f008092..3a9618b 100644 --- a/Software/PC_Application/LibreVNA-GUI/mode.cpp +++ b/Software/PC_Application/LibreVNA-GUI/mode.cpp @@ -141,11 +141,12 @@ Mode::Type Mode::TypeFromName(QString s) void Mode::saveSreenshot() { - auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", "", "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(nullptr, "Save plot image", Preferences::getInstance().UISettings.Paths.image, "PNG image files (*.png)", nullptr, Preferences::QFileDialogOptions()); if(filename.isEmpty()) { // aborted selection return; } + Preferences::getInstance().UISettings.Paths.image = QFileInfo(filename).path(); if(filename.endsWith(".png")) { filename.chop(4); } diff --git a/Software/PC_Application/LibreVNA-GUI/preferences.cpp b/Software/PC_Application/LibreVNA-GUI/preferences.cpp index c009d8b..1ec8d0f 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferences.cpp +++ b/Software/PC_Application/LibreVNA-GUI/preferences.cpp @@ -68,7 +68,7 @@ PreferencesDialog::PreferencesDialog(Preferences *pref, QWidget *parent) : ui->StartupStack->setCurrentWidget(ui->StartupPageSetupFile); }); connect(ui->StartupBrowse, &QPushButton::clicked, [=](){ - ui->StartupSetupFile->setText(QFileDialog::getOpenFileName(nullptr, "Select startup setup file", "", "Setup files (*.setup)", nullptr, Preferences::QFileDialogOptions())); + ui->StartupSetupFile->setText(QFileDialog::getOpenFileName(nullptr, "Select startup setup file", Preferences::getInstance().UISettings.Paths.setup, "Setup files (*.setup)", nullptr, Preferences::QFileDialogOptions())); }); ui->StartupSweepStart->setUnit("Hz"); ui->StartupSweepStart->setPrefixes(" kMG"); @@ -203,29 +203,31 @@ PreferencesDialog::PreferencesDialog(Preferences *pref, QWidget *parent) : emit p->updated(); }); connect(ui->buttonBox->button(QDialogButtonBox::Save), &QPushButton::clicked, [=](){ - auto filename = QFileDialog::getSaveFileName(this, "Save preferences", "", "LibreVNA preferences files (*.vnapref)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getSaveFileName(this, "Save preferences", Preferences::getInstance().UISettings.Paths.pref, "LibreVNA preferences files (*.vnapref)", nullptr, Preferences::QFileDialogOptions()); if(filename.length() > 0) { - if(!filename.toLower().endsWith(".vnapref")) { + Preferences::getInstance().UISettings.Paths.pref = QFileInfo(filename).path(); + if(!filename.toLower().endsWith(".vnapref")) { filename.append(".vnapref"); - } - ofstream file; - file.open(filename.toStdString()); - updateFromGUI(); - file << setw(1) << p->toJSON(); - file.close(); + } + ofstream file; + file.open(filename.toStdString()); + updateFromGUI(); + file << setw(1) << p->toJSON(); + file.close(); } }); connect(ui->buttonBox->button(QDialogButtonBox::Open), &QPushButton::clicked, [=](){ - auto filename = QFileDialog::getOpenFileName(this, "Load preferences", "", "LibreVNA preferences files (*.vnapref)", nullptr, Preferences::QFileDialogOptions()); + auto filename = QFileDialog::getOpenFileName(this, "Load preferences", Preferences::getInstance().UISettings.Paths.pref, "LibreVNA preferences files (*.vnapref)", nullptr, Preferences::QFileDialogOptions()); if(filename.length() > 0) { - ifstream file; - file.open(filename.toStdString()); - nlohmann::json j; - file >> j; - file.close(); - p->fromJSON(j); - setInitialGUIState(); - emit p->updated(); + Preferences::getInstance().UISettings.Paths.pref = QFileInfo(filename).path(); + ifstream file; + file.open(filename.toStdString()); + nlohmann::json j; + file >> j; + file.close(); + p->fromJSON(j); + setInitialGUIState(); + emit p->updated(); } }); connect(ui->AcquisitionLimitTDRCheckbox, &QCheckBox::toggled, [=](bool enabled){ diff --git a/Software/PC_Application/LibreVNA-GUI/preferences.h b/Software/PC_Application/LibreVNA-GUI/preferences.h index cfbbb1a..167cf0f 100644 --- a/Software/PC_Application/LibreVNA-GUI/preferences.h +++ b/Software/PC_Application/LibreVNA-GUI/preferences.h @@ -214,6 +214,18 @@ public: unsigned int unitIndex; QString exportedTraceNames; } TouchstoneExport; + struct { + QString setup; + QString cal; + QString calkit; + QString data; + QString image; + QString vnacaldata; + QString packetlog; + QString limitLines; + QString pref; + QString firmware; + } Paths; } UISettings; bool TCPoverride; // in case of manual port specification via command line @@ -387,6 +399,16 @@ private: {&UISettings.TouchstoneExport.formatIndex, "UISettings.TouchstoneExport.formatIndex", 2}, {&UISettings.TouchstoneExport.unitIndex, "UISettings.TouchstoneExport.unitIndex", 3}, {&UISettings.TouchstoneExport.exportedTraceNames, "UISettings.TouchstoneExport.exportedTraceNames", ""}, + {&UISettings.Paths.setup, "UISettings.Paths.setup", ""}, + {&UISettings.Paths.cal, "UISettings.Paths.cal", ""}, + {&UISettings.Paths.calkit, "UISettings.Paths.calkit", ""}, + {&UISettings.Paths.data, "UISettings.Paths.data", ""}, + {&UISettings.Paths.image, "UISettings.Paths.image", ""}, + {&UISettings.Paths.vnacaldata, "UISettings.Paths.vnacaldata", ""}, + {&UISettings.Paths.packetlog, "UISettings.Paths.packetlog", ""}, + {&UISettings.Paths.limitLines, "UISettings.Paths.limitLines", ""}, + {&UISettings.Paths.pref, "UISettings.Paths.pref", ""}, + {&UISettings.Paths.firmware, "UISettings.Paths.firmware", ""}, }}; };