diff --git a/tools/cabana/mainwin.cc b/tools/cabana/mainwin.cc index b8913a3aa7..7ae97379f6 100644 --- a/tools/cabana/mainwin.cc +++ b/tools/cabana/mainwin.cc @@ -156,8 +156,9 @@ void MainWindow::loadDBCFromName(const QString &name) { } void MainWindow::loadDBCFromFile() { - QString file_name = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::homePath(), "DBC (*.dbc)"); + QString file_name = QFileDialog::getOpenFileName(this, tr("Open File"), settings.last_dir, "DBC (*.dbc)"); if (!file_name.isEmpty()) { + settings.last_dir = QFileInfo(file_name).absolutePath(); QFile file(file_name); if (file.open(QIODevice::ReadOnly)) { auto dbc_name = QFileInfo(file_name).baseName(); @@ -185,8 +186,9 @@ void MainWindow::loadDBCFromFingerprint() { void MainWindow::saveDBCToFile() { QString file_name = QFileDialog::getSaveFileName(this, tr("Save File"), - QDir::homePath() + "/untitled.dbc", tr("DBC (*.dbc)")); + QDir::cleanPath(settings.last_dir + "/untitled.dbc"), tr("DBC (*.dbc)")); if (!file_name.isEmpty()) { + settings.last_dir = QFileInfo(file_name).absolutePath(); QFile file(file_name); if (file.open(QIODevice::WriteOnly)) file.write(dbc()->generateDBC().toUtf8()); @@ -228,6 +230,8 @@ void MainWindow::closeEvent(QCloseEvent *event) { main_win = nullptr; if (floating_window) floating_window->deleteLater(); + + settings.save(); QWidget::closeEvent(event); } diff --git a/tools/cabana/settings.cc b/tools/cabana/settings.cc index b173b41df3..b3a4ed4872 100644 --- a/tools/cabana/settings.cc +++ b/tools/cabana/settings.cc @@ -1,6 +1,7 @@ #include "tools/cabana/settings.h" #include +#include #include #include @@ -19,7 +20,7 @@ void Settings::save() { s.setValue("chart_height", chart_height); s.setValue("chart_theme", chart_theme); s.setValue("max_chart_x_range", max_chart_x_range); - emit changed(); + s.setValue("last_dir", last_dir); } void Settings::load() { @@ -30,6 +31,7 @@ void Settings::load() { chart_height = s.value("chart_height", 200).toInt(); chart_theme = s.value("chart_theme", 0).toInt(); max_chart_x_range = s.value("max_chart_x_range", 3 * 60).toInt(); + last_dir = s.value("last_dir", QDir::homePath()).toString(); } // SettingsDlg @@ -90,4 +92,5 @@ void SettingsDlg::save() { settings.max_chart_x_range = max_chart_x_range->value() * 60; settings.save(); accept(); + emit settings.changed(); } diff --git a/tools/cabana/settings.h b/tools/cabana/settings.h index cb858de873..e08d0ae55e 100644 --- a/tools/cabana/settings.h +++ b/tools/cabana/settings.h @@ -18,6 +18,7 @@ public: int chart_height = 200; int chart_theme = 0; int max_chart_x_range = 3 * 60; // 3 minutes + QString last_dir; signals: void changed();