X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fviews%2Ftrace%2Fview.cpp;h=e26e8fc2582a8a45b57f41d3abbf2d72940ed6f7;hp=07919c28ac937d13b4767f5ccea297e2df5543df;hb=7daebd054e65a244dce36933cbf173b8d7532a09;hpb=aa8da126bbe0cf68bb04bbbc6410bd5ff5980cc8 diff --git a/pv/views/trace/view.cpp b/pv/views/trace/view.cpp index 07919c28..e26e8fc2 100644 --- a/pv/views/trace/view.cpp +++ b/pv/views/trace/view.cpp @@ -125,6 +125,8 @@ bool CustomScrollArea::viewportEvent(QEvent *event) View::View(Session &session, bool is_main_view, QWidget *parent) : ViewBase(session, is_main_view, parent), splitter_(new QSplitter()), + segment_display_mode_(Trace::ShowLastSegmentOnly), + segment_selectable_(false), scale_(1e-3), offset_(0), updating_scroll_(false), @@ -255,6 +257,8 @@ void View::add_signal(const shared_ptr signal) ViewBase::add_signalbase(signal->base()); signals_.insert(signal); + signal->set_segment_display_mode(segment_display_mode_); + connect(signal->base().get(), SIGNAL(name_changed(const QString&)), this, SLOT(on_signal_name_changed())); } @@ -271,6 +275,8 @@ void View::add_decode_signal(shared_ptr signal) new DecodeTrace(session_, signal, decode_traces_.size())); decode_traces_.push_back(d); + d->set_segment_display_mode(segment_display_mode_); + connect(signal.get(), SIGNAL(name_changed(const QString&)), this, SLOT(on_signal_name_changed())); } @@ -477,6 +483,26 @@ void View::set_time_unit(pv::util::TimeUnit time_unit) } } +bool View::segment_is_selectable() const +{ + return segment_selectable_; +} + +void View::set_segment_display_mode(Trace::SegmentDisplayMode mode) +{ + for (shared_ptr signal : signals_) + signal->set_segment_display_mode(mode); + + viewport_->update(); + + segment_selectable_ = true; + + if (mode == Trace::ShowSingleSegmentOnly) + segment_selectable_ = false; + + segment_display_mode_changed(segment_selectable_); +} + void View::zoom(double steps) { zoom(steps, viewport_->width() / 2); @@ -1386,16 +1412,25 @@ void View::capture_state_updated(int state) void View::on_new_segment(int new_segment_id) { on_segment_changed(new_segment_id); + segment_changed(new_segment_id); } void View::on_segment_changed(int segment) { - current_segment_ = segment - 1; - - for (shared_ptr signal : signals_) - signal->set_current_segment(current_segment_); + switch (segment_display_mode_) { + case Trace::ShowLastSegmentOnly: + case Trace::ShowSingleSegmentOnly: + current_segment_ = segment - 1; + for (shared_ptr signal : signals_) + signal->set_current_segment(current_segment_); + viewport_->update(); + break; - viewport_->update(); + case Trace::ShowAllSegments: + case Trace::ShowAccumulatedIntensity: + default: + break; + } } void View::perform_delayed_view_update()