X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsession.cpp;h=f6fb7085582a7ce19a1941c71e5effa3a040c91c;hp=38e862cf30fff42732c3396a26eebd6e07ae914d;hb=0ff97f965aca66a69fd44a870d42f2bd67d38e94;hpb=43017494e4cca1f2a0470b57ad3aceb977aced6b diff --git a/pv/session.cpp b/pv/session.cpp index 38e862cf..f6fb7085 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -99,6 +99,7 @@ using Glib::Variant; namespace pv { Session::Session(DeviceManager &device_manager, QString name) : device_manager_(device_manager), + default_name_(name), name_(name), capture_state_(Stopped), cur_samplerate_(0) @@ -148,6 +149,11 @@ void Session::set_name(QString name) name_changed(); } +const std::list< std::shared_ptr > Session::views() const +{ + return views_; +} + std::shared_ptr Session::main_view() const { return main_view_; @@ -167,7 +173,7 @@ void Session::save_settings(QSettings &settings) const { map dev_info; list key_list; - int stacks = 0; + int stacks = 0, views = 0; if (device_) { shared_ptr hw_device = @@ -230,6 +236,22 @@ void Session::save_settings(QSettings &settings) const } settings.setValue("decoder_stacks", stacks); + + // Save view states and their signal settings + // Note: main_view must be saved as view0 + settings.beginGroup("view" + QString::number(views++)); + main_view_->save_settings(settings); + settings.endGroup(); + + for (shared_ptr view : views_) { + if (view != main_view_) { + settings.beginGroup("view" + QString::number(views++)); + view->save_settings(settings); + settings.endGroup(); + } + } + + settings.setValue("views", views); } } @@ -279,10 +301,11 @@ void Session::restore_settings(QSettings &settings) device = std::make_shared(device_manager_.context(), filename.toStdString()); set_device(device); - set_name(filename); // TODO Perform error handling start_capture([](QString infoMessage) { (void)infoMessage; }); + + set_name(QFileInfo(filename).fileName()); } } @@ -307,6 +330,22 @@ void Session::restore_settings(QSettings &settings) settings.endGroup(); } #endif + + // Restore views + int views = settings.value("views").toInt(); + + for (int i = 0; i < views; i++) { + settings.beginGroup("view" + QString::number(i)); + + if (i > 0) { + view::ViewType type = (view::ViewType)settings.value("type").toInt(); + add_view(name_, type, this); + views_.back()->restore_settings(settings); + } else + main_view_->restore_settings(settings); + + settings.endGroup(); + } } } @@ -439,12 +478,15 @@ void Session::register_view(std::shared_ptr view) main_view_ = view; } - views_.insert(view); + views_.push_back(view); + + update_signals(); } void Session::deregister_view(std::shared_ptr view) { - views_.erase(view); + views_.remove_if([&](std::shared_ptr v) { + return v == view; }); if (views_.empty()) { main_view_.reset(); @@ -456,7 +498,11 @@ void Session::deregister_view(std::shared_ptr view) bool Session::has_view(std::shared_ptr view) { - return views_.find(view) != views_.end(); + for (std::shared_ptr v : views_) + if (v == view) + return true; + + return false; } double Session::get_samplerate() const @@ -626,6 +672,7 @@ void Session::update_signals() if (iter != prev_sigs.end()) { // Copy the signal from the old set to the new signal = *iter; + view->add_signal(signal); } else { // Find the signalbase for this channel if possible signalbase.reset();