#include <cassert>
#include <climits>
#include <cmath>
+#include <iostream>
#include <iterator>
#include <mutex>
#include <unordered_set>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/serialization/serialization.hpp>
#include <boost/thread/locks.hpp>
#include <QApplication>
return session_;
}
+std::unordered_set< std::shared_ptr<view::Signal> > View::signals() const
+{
+ return signals_;
+}
+
+void View::clear_signals()
+{
+ signals_.clear();
+}
+
+void View::add_signal(const shared_ptr<view::Signal> signal)
+{
+ signals_.insert(signal);
+}
+
+#ifdef ENABLE_DECODE
+void View::clear_decode_traces()
+{
+ decode_traces_.clear();
+}
+
+void View::add_decode_trace(shared_ptr<data::SignalBase> signalbase)
+{
+ shared_ptr<view::DecodeTrace> d(
+ new view::DecodeTrace(session_, signalbase, decode_traces_.size()));
+ decode_traces_.push_back(d);
+}
+
+void View::remove_decode_trace(shared_ptr<data::SignalBase> 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;
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<view::Signal> 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<view::Signal> signal : signals_) {
+ settings.beginGroup(signal->base()->internal_name());
+ signal->restore_settings(settings);
+ settings.endGroup();
+ }
+}
+
vector< shared_ptr<TimeItem> > View::time_items() const
{
const vector<shared_ptr<Flag>> f(flags());
set< shared_ptr<SignalData> > View::get_visible_data() const
{
- const unordered_set< shared_ptr<Signal> > sigs(session().signals());
-
// Make a set of all the visible data objects
set< shared_ptr<SignalData> > visible_data;
- for (const shared_ptr<Signal> sig : sigs)
+ for (const shared_ptr<Signal> sig : signals_)
if (sig->enabled())
visible_data.insert(sig->data());
{
// 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<Signal> > sigs(session().signals());
-
// Check all signals but...
- for (const shared_ptr<Signal> signal : sigs) {
+ for (const shared_ptr<Signal> signal : signals_) {
const shared_ptr<SignalData> data = signal->data();
// ...only check first segment of each
if (!session_.device()) {
reset_scroll();
+ signals_.clear();
} else {
sr_dev = session_.device()->device();
assert(sr_dev);
const set<shared_ptr<Trace>> prev_traces(
prev_trace_list.begin(), prev_trace_list.end());
- const unordered_set< shared_ptr<Signal> > sigs(session_.signals());
-
- set< shared_ptr<Trace> > traces(sigs.begin(), sigs.end());
+ set< shared_ptr<Trace> > traces(signals_.begin(), signals_.end());
#ifdef ENABLE_DECODE
- const vector< shared_ptr<DecodeTrace> > 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<Trace> > add_traces;
// Make a look-up table of sigrok Channels to pulseview Signals
unordered_map<shared_ptr<data::SignalBase>, shared_ptr<Signal> >
signal_map;
- for (const shared_ptr<Signal> &sig : sigs)
- signal_map[sig->channel()] = sig;
+ for (const shared_ptr<Signal> &sig : signals_)
+ signal_map[sig->base()] = sig;
// Populate channel groups
if (sr_dev)