X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsession.cpp;h=0077ccfd00d0d36d6de0a401d8f71347e24a4d08;hp=c9a569f7f9e9d67fb3288b16a724accf8e761428;hb=00f6bae935837b38b0d03a5928ba8175d460413f;hpb=7b254679cb45fc4d032fe68c0797642a237f0fa6 diff --git a/pv/session.cpp b/pv/session.cpp index c9a569f7..0077ccfd 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -76,6 +76,7 @@ using std::pair; using std::recursive_mutex; using std::set; using std::shared_ptr; +using std::make_shared; using std::string; using std::unordered_set; using std::vector; @@ -192,11 +193,11 @@ void Session::save_settings(QSettings &settings) const settings.setValue("device_type", "hardware"); settings.beginGroup("device"); - key_list.push_back("vendor"); - key_list.push_back("model"); - key_list.push_back("version"); - key_list.push_back("serial_num"); - key_list.push_back("connection_id"); + key_list.emplace_back("vendor"); + key_list.emplace_back("model"); + key_list.emplace_back("version"); + key_list.emplace_back("serial_num"); + key_list.emplace_back("connection_id"); dev_info = device_manager_.get_device_info(device_); @@ -276,11 +277,11 @@ void Session::restore_settings(QSettings &settings) // Re-select last used device if possible but only if it's not demo settings.beginGroup("device"); - key_list.push_back("vendor"); - key_list.push_back("model"); - key_list.push_back("version"); - key_list.push_back("serial_num"); - key_list.push_back("connection_id"); + key_list.emplace_back("vendor"); + key_list.emplace_back("model"); + key_list.emplace_back("version"); + key_list.emplace_back("serial_num"); + key_list.emplace_back("connection_id"); for (string key : key_list) { const QString k = QString::fromStdString(key); @@ -307,7 +308,7 @@ void Session::restore_settings(QSettings &settings) settings.endGroup(); if (QFileInfo(filename).isReadable()) { - device = std::make_shared(device_manager_.context(), + device = make_shared(device_manager_.context(), filename.toStdString()); set_device(device); @@ -415,16 +416,17 @@ void Session::set_device(shared_ptr device) device_->open(); } catch (const QString &e) { device_.reset(); - device_changed(); - throw; } - device_->session()->add_datafeed_callback([=] - (shared_ptr device, shared_ptr packet) { - data_feed_in(device, packet); - }); + if (device_) { + device_->session()->add_datafeed_callback([=] + (shared_ptr device, shared_ptr packet) { + data_feed_in(device, packet); + }); + + update_signals(); + } - update_signals(); device_changed(); } @@ -532,9 +534,15 @@ void Session::start_capture(function error_handler) for (const shared_ptr d : all_signal_data_) d->clear(); - // Revert name back to default name (e.g. "Session 1") as the data is gone - name_ = default_name_; - name_changed(); + // Revert name back to default name (e.g. "Session 1") for real devices + // as the (possibly saved) data is gone. File devices keep their name. + shared_ptr hw_device = + dynamic_pointer_cast< devices::HardwareDevice >(device_); + + if (hw_device) { + name_ = default_name_; + name_changed(); + } // Begin the session sampling_thread_ = std::thread( @@ -616,8 +624,7 @@ bool Session::add_decoder(srd_decoder *const dec) try { // Create the decoder - decoder_stack = shared_ptr( - new data::DecoderStack(*this, dec)); + decoder_stack = make_shared(*this, dec); // Make a list of all the channels std::vector all_channels; @@ -643,7 +650,7 @@ bool Session::add_decoder(srd_decoder *const dec) // Create the decode signal shared_ptr signalbase = - shared_ptr(new data::SignalBase(nullptr)); + make_shared(nullptr); signalbase->set_decoder_stack(decoder_stack); signalbases_.insert(signalbase); @@ -771,8 +778,7 @@ void Session::update_signals() switch(channel->type()->id()) { case SR_CHANNEL_LOGIC: if (!signalbase) { - signalbase = shared_ptr( - new data::SignalBase(channel)); + signalbase = make_shared(channel); signalbases_.insert(signalbase); all_signal_data_.insert(logic_data_); @@ -788,8 +794,7 @@ void Session::update_signals() case SR_CHANNEL_ANALOG: { if (!signalbase) { - signalbase = shared_ptr( - new data::SignalBase(channel)); + signalbase = make_shared(channel); signalbases_.insert(signalbase); shared_ptr data(new data::Analog()); @@ -953,8 +958,8 @@ void Session::feed_in_logic(shared_ptr logic) set_capture_state(Running); // Create a new data segment - cur_logic_segment_ = shared_ptr( - new data::LogicSegment(*logic_data_, logic, cur_samplerate_)); + cur_logic_segment_ = make_shared( + *logic_data_, logic, cur_samplerate_); logic_data_->push_segment(cur_logic_segment_); // @todo Putting this here means that only listeners querying @@ -1005,8 +1010,8 @@ void Session::feed_in_analog(shared_ptr analog) assert(data); // Create a segment, keep it in the maps of channels - segment = shared_ptr( - new data::AnalogSegment(*data, cur_samplerate_)); + segment = make_shared( + *data, cur_samplerate_); cur_analog_segments_[channel] = segment; // Push the segment into the analog data.