diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index 8646175e..1a7b0ad4 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -340,6 +340,8 @@ shared_ptr MainWindow::add_session() connect(session.get(), SIGNAL(add_view(ViewType, Session*)), this, SLOT(on_add_view(ViewType, Session*))); + connect(session.get(), SIGNAL(remove_view(shared_ptr)), + this, SLOT(on_remove_view(shared_ptr))); connect(session.get(), SIGNAL(name_changed()), this, SLOT(on_session_name_changed())); connect(session.get(), SIGNAL(device_changed()), @@ -724,6 +726,11 @@ void MainWindow::on_add_view(views::ViewType type, Session *session) add_view(type, *s); } +void MainWindow::on_remove_view(shared_ptr view) +{ + remove_view(view); +} + void MainWindow::on_focus_changed() { shared_ptr view = get_active_view(); diff --git a/pv/mainwindow.hpp b/pv/mainwindow.hpp index 493e3a55..a7fdbeb5 100644 --- a/pv/mainwindow.hpp +++ b/pv/mainwindow.hpp @@ -124,6 +124,7 @@ public Q_SLOTS: private Q_SLOTS: void on_add_view(ViewType type, Session *session); + void on_remove_view(shared_ptr view); void on_focus_changed(); void on_focused_session_changed(shared_ptr session); diff --git a/pv/session.cpp b/pv/session.cpp index 03770097..268d7c5f 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -375,6 +375,27 @@ void Session::save_settings(QSettings &settings) const void Session::restore_setup(QSettings &settings) { + // Reset main view, remove all other views + main_view_->reset_view_state(); + for (auto &v : vector< shared_ptr >(views_)) { + if (v != main_view_) + remove_view(v); + } + + // Remove generated signals and decoders + for (shared_ptr base : vector< shared_ptr >(signalbases_)) { +#ifdef ENABLE_DECODE + if (base->is_decode_signal()) { + shared_ptr ds = dynamic_pointer_cast(base); + assert(ds); + remove_decode_signal(ds); + } else +#endif + if (base->is_generated()) { + remove_generated_signal(base); + } + } + // Restore channels for (shared_ptr base : signalbases_) { settings.beginGroup(base->internal_name()); diff --git a/pv/session.hpp b/pv/session.hpp index 94338c20..8acd9ac1 100644 --- a/pv/session.hpp +++ b/pv/session.hpp @@ -267,6 +267,7 @@ class Session : public QObject void data_received(); void add_view(ViewType type, Session *session); + void remove_view(shared_ptr view); void session_error_raised(const QString text, const QString info_text); public Q_SLOTS: diff --git a/pv/toolbars/mainbar.cpp b/pv/toolbars/mainbar.cpp index cd46c063..c10fc39d 100644 --- a/pv/toolbars/mainbar.cpp +++ b/pv/toolbars/mainbar.cpp @@ -878,6 +878,7 @@ void MainBar::on_actionSaveSetup_triggered() return; QSettings settings_storage(file_name, QSettings::IniFormat); + settings_storage.clear(); session_.save_setup(settings_storage); }