#include "devices/hardwaredevice.hpp"
#include "devices/sessionfile.hpp"
+#include "toolbars/mainbar.hpp"
+
#include "view/analogsignal.hpp"
#include "view/decodetrace.hpp"
#include "view/logicsignal.hpp"
return device_;
}
+std::shared_ptr<pv::view::View> Session::main_view() const
+{
+ return main_view_;
+}
+
+void Session::set_main_bar(std::shared_ptr<pv::toolbars::MainBar> main_bar)
+{
+ main_bar_ = main_bar;
+}
+
+shared_ptr<pv::toolbars::MainBar> Session::main_bar() const
+{
+ return main_bar_;
+}
+
void Session::set_device(shared_ptr<devices::Device> device)
{
assert(device);
device_.reset();
// Remove all stored data
- for (std::shared_ptr<pv::view::View> view : views_)
+ for (std::shared_ptr<pv::view::View> view : views_) {
view->clear_signals();
+#ifdef ENABLE_DECODE
+ view->clear_decode_traces();
+#endif
+ }
for (const shared_ptr<data::SignalData> d : all_signal_data_)
d->clear();
all_signal_data_.clear();
}
logic_data_.reset();
- decode_traces_.clear();
signals_changed();
void Session::register_view(std::shared_ptr<pv::view::View> view)
{
+ if (views_.empty()) {
+ main_view_ = view;
+ }
+
views_.insert(view);
}
void Session::deregister_view(std::shared_ptr<pv::view::View> view)
{
views_.erase(view);
+
+ if (views_.empty()) {
+ main_view_.reset();
+
+ // Without a view there can be no main bar
+ main_bar_.reset();
+ }
}
double Session::get_samplerate() const
shared_ptr<data::SignalBase> signalbase =
shared_ptr<data::SignalBase>(new data::SignalBase(nullptr));
- shared_ptr<view::DecodeTrace> d(
- new view::DecodeTrace(*this, signalbase, decoder_stack,
- decode_traces_.size()));
- decode_traces_.push_back(d);
+ signalbase->set_decoder_stack(decoder_stack);
+
+ for (std::shared_ptr<pv::view::View> view : views_)
+ view->add_decode_trace(signalbase);
} catch (std::runtime_error e) {
return false;
}
return true;
}
-vector< shared_ptr<view::DecodeTrace> > Session::get_decode_signals() const
+void Session::remove_decode_signal(shared_ptr<data::SignalBase> signalbase)
{
- return decode_traces_;
-}
-
-void Session::remove_decode_signal(view::DecodeTrace *signal)
-{
- for (auto i = decode_traces_.begin(); i != decode_traces_.end(); i++)
- if ((*i).get() == signal) {
- decode_traces_.erase(i);
- signals_changed();
- return;
- }
+ for (std::shared_ptr<pv::view::View> view : views_)
+ view->remove_decode_trace(signalbase);
}
#endif
if (!device_) {
signalbases_.clear();
logic_data_.reset();
- for (std::shared_ptr<pv::view::View> view : views_)
+ for (std::shared_ptr<pv::view::View> view : views_) {
view->clear_signals();
+#ifdef ENABLE_DECODE
+ view->clear_decode_traces();
+#endif
+ }
return;
}
if (!sr_dev) {
signalbases_.clear();
logic_data_.reset();
- for (std::shared_ptr<pv::view::View> view : views_)
+ for (std::shared_ptr<pv::view::View> view : views_) {
view->clear_signals();
+#ifdef ENABLE_DECODE
+ view->clear_decode_traces();
+#endif
+ }
return;
}