X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fsession.cpp;h=dc16dd97f9b616e4d7f6911e665ddf248a20815d;hb=c8a6db0e46202d49b47158e902e1afb8b1d5fbcf;hp=d3b2d6ac81d4c0517c999b7487602c9437f25aa3;hpb=8962d7b3b640b5f07f26a4b4ebee839c4880b69d;p=pulseview.git diff --git a/pv/session.cpp b/pv/session.cpp index d3b2d6ac..dc16dd97 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -218,6 +218,7 @@ void Session::save_setup(QSettings &settings) const for (const shared_ptr& view : views_) { if (view != main_view_) { settings.beginGroup("view" + QString::number(views++)); + settings.setValue("type", view->get_type()); view->save_settings(settings); settings.endGroup(); } @@ -312,7 +313,7 @@ void Session::restore_setup(QSettings &settings) if (i > 0) { views::ViewType type = (views::ViewType)settings.value("type").toInt(); - add_view(name_, type, this); + add_view(type, this); views_.back()->restore_settings(settings); } else main_view_->restore_settings(settings); @@ -525,7 +526,8 @@ Session::input_format_options(vector user_spec, return result; } -void Session::load_init_file(const string &file_name, const string &format) +void Session::load_init_file(const string &file_name, + const string &format, const string &setup_file_name) { shared_ptr input_format; map input_opts; @@ -549,12 +551,12 @@ void Session::load_init_file(const string &file_name, const string &format) input_format->options()); } - load_file(QString::fromStdString(file_name), input_format, input_opts); + load_file(QString::fromStdString(file_name), QString::fromStdString(setup_file_name), + input_format, input_opts); } -void Session::load_file(QString file_name, - shared_ptr format, - const map &options) +void Session::load_file(QString file_name, QString setup_file_name, + shared_ptr format, const map &options) { const QString errorMessage( QString("Failed to load file %1").arg(file_name)); @@ -582,10 +584,13 @@ void Session::load_file(QString file_name, return; } - // Auto-load the setup if one exists - QString setup_file_name = file_name; - setup_file_name.truncate(setup_file_name.lastIndexOf('.')); - setup_file_name.append(".pvs"); + // Use the input file with .pvs extension if no setup file was given + if (setup_file_name.isEmpty()) { + setup_file_name = file_name; + setup_file_name.truncate(setup_file_name.lastIndexOf('.')); + setup_file_name.append(".pvs"); + } + if (QFileInfo::exists(setup_file_name) && QFileInfo(setup_file_name).isReadable()) { QSettings settings_storage(setup_file_name, QSettings::IniFormat); restore_setup(settings_storage); @@ -659,9 +664,8 @@ void Session::stop_capture() void Session::register_view(shared_ptr view) { - if (views_.empty()) { + if (views_.empty()) main_view_ = view; - } views_.push_back(view); @@ -669,35 +673,29 @@ void Session::register_view(shared_ptr view) update_signals(); // Add all other signals - unordered_set< shared_ptr > view_signalbases = - view->signalbases(); - - views::trace::View *trace_view = - qobject_cast(view.get()); - - if (trace_view) { - for (const shared_ptr& signalbase : signalbases_) { - const int sb_exists = count_if( - view_signalbases.cbegin(), view_signalbases.cend(), - [&](const shared_ptr &sb) { - return sb == signalbase; - }); - // Add the signal to the view as it doesn't have it yet - if (!sb_exists) - switch (signalbase->type()) { - case data::SignalBase::AnalogChannel: - case data::SignalBase::LogicChannel: - case data::SignalBase::DecodeChannel: + unordered_set< shared_ptr > view_signalbases = view->signalbases(); + + for (const shared_ptr& signalbase : signalbases_) { + const int sb_exists = count_if( + view_signalbases.cbegin(), view_signalbases.cend(), + [&](const shared_ptr &sb) { + return sb == signalbase; + }); + + // Add the signal to the view if it doesn't have it yet + if (!sb_exists) + switch (signalbase->type()) { + case data::SignalBase::AnalogChannel: + case data::SignalBase::LogicChannel: + case data::SignalBase::MathChannel: + view->add_signalbase(signalbase); + break; + case data::SignalBase::DecodeChannel: #ifdef ENABLE_DECODE - trace_view->add_decode_signal( - dynamic_pointer_cast(signalbase)); + view->add_decode_signal(dynamic_pointer_cast(signalbase)); #endif - break; - case data::SignalBase::MathChannel: - // TBD - break; - } - } + break; + } } signals_changed(); @@ -820,6 +818,11 @@ void Session::set_capture_state(capture_state state) { bool changed; + if (state == Running) + acq_time_.restart(); + if (state == Stopped) + qDebug("Acquisition took %.2f s", acq_time_.elapsed() / 1000.); + { lock_guard lock(sampling_mutex_); changed = capture_state_ != state; @@ -1461,4 +1464,17 @@ void Session::on_data_saved() data_saved_ = true; } +#ifdef ENABLE_DECODE +void Session::on_new_decoders_selected(vector decoders) +{ + assert(decoders.size() > 0); + + shared_ptr signal = add_decode_signal(); + + if (signal) + for (const srd_decoder* d : decoders) + signal->stack_decoder(d); +} +#endif + } // namespace pv