X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Fview.cpp;h=c69e75caec10594ba3122aa31a8344a2e5dd5b3a;hp=e7308ddf69f0586064b0112e2586d07eab423957;hb=3a21afa6;hpb=bf0edd2b0cbb5f4bd5d69b0f00bcea7d037e2287 diff --git a/pv/view/view.cpp b/pv/view/view.cpp index e7308ddf..c69e75ca 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -28,10 +28,14 @@ #include #include #include +#include #include #include #include +#include +#include +#include #include #include @@ -186,6 +190,45 @@ const Session& View::session() const return session_; } +std::unordered_set< std::shared_ptr > View::signals() const +{ + return signals_; +} + +void View::clear_signals() +{ + signals_.clear(); +} + +void View::add_signal(const shared_ptr signal) +{ + signals_.insert(signal); +} + +#ifdef ENABLE_DECODE +void View::clear_decode_traces() +{ + decode_traces_.clear(); +} + +void View::add_decode_trace(shared_ptr signalbase) +{ + shared_ptr d( + new view::DecodeTrace(session_, signalbase, decode_traces_.size())); + decode_traces_.push_back(d); +} + +void View::remove_decode_trace(shared_ptr signalbase) +{ + for (auto i = decode_traces_.begin(); i != decode_traces_.end(); i++) + if ((*i)->base() == signalbase) { + decode_traces_.erase(i); + signals_changed(); + return; + } +} +#endif + View* View::view() { return this; @@ -206,6 +249,45 @@ const Viewport* View::viewport() const return viewport_; } +void View::save_settings(QSettings &settings) const +{ + settings.setValue("scale", scale_); + + std::stringstream ss; + boost::archive::text_oarchive oa(ss); + oa << boost::serialization::make_nvp("offset", offset_); + settings.setValue("offset", QString::fromStdString(ss.str())); + + for (shared_ptr signal : signals_) { + settings.beginGroup(signal->base()->internal_name()); + signal->save_settings(settings); + settings.endGroup(); + } +} + +void View::restore_settings(QSettings &settings) +{ + if (settings.contains("scale")) + set_scale(settings.value("scale").toDouble()); + + if (settings.contains("offset")) { + util::Timestamp offset; + std::stringstream ss; + ss << settings.value("offset").toString().toStdString(); + + boost::archive::text_iarchive ia(ss); + ia >> boost::serialization::make_nvp("offset", offset); + + set_offset(offset); + } + + for (shared_ptr signal : signals_) { + settings.beginGroup(signal->base()->internal_name()); + signal->restore_settings(settings); + settings.endGroup(); + } +} + vector< shared_ptr > View::time_items() const { const vector> f(flags()); @@ -397,11 +479,9 @@ void View::set_scale_offset(double scale, const Timestamp& offset) set< shared_ptr > View::get_visible_data() const { - const unordered_set< shared_ptr > sigs(session().signals()); - // Make a set of all the visible data objects set< shared_ptr > visible_data; - for (const shared_ptr sig : sigs) + for (const shared_ptr sig : signals_) if (sig->enabled()) visible_data.insert(sig->data()); @@ -803,10 +883,8 @@ void View::determine_time_unit() { // Check whether we know the sample rate and hence can use time as the unit if (time_unit_ == util::TimeUnit::Samples) { - const unordered_set< shared_ptr > sigs(session().signals()); - // Check all signals but... - for (const shared_ptr signal : sigs) { + for (const shared_ptr signal : signals_) { const shared_ptr data = signal->data(); // ...only check first segment of each @@ -938,6 +1016,7 @@ void View::signals_changed() if (!session_.device()) { reset_scroll(); + signals_.clear(); } else { sr_dev = session_.device()->device(); assert(sr_dev); @@ -952,14 +1031,10 @@ void View::signals_changed() const set> prev_traces( prev_trace_list.begin(), prev_trace_list.end()); - const unordered_set< shared_ptr > sigs(session_.signals()); - - set< shared_ptr > traces(sigs.begin(), sigs.end()); + set< shared_ptr > traces(signals_.begin(), signals_.end()); #ifdef ENABLE_DECODE - const vector< shared_ptr > decode_traces( - session().get_decode_signals()); - traces.insert(decode_traces.begin(), decode_traces.end()); + traces.insert(decode_traces_.begin(), decode_traces_.end()); #endif set< shared_ptr > add_traces; @@ -975,8 +1050,8 @@ void View::signals_changed() // Make a look-up table of sigrok Channels to pulseview Signals unordered_map, shared_ptr > signal_map; - for (const shared_ptr &sig : sigs) - signal_map[sig->channel()] = sig; + for (const shared_ptr &sig : signals_) + signal_map[sig->base()] = sig; // Populate channel groups if (sr_dev)