From 7ee199a77ecbb7edd6decca4786648cfe07e6eec Mon Sep 17 00:00:00 2001 From: Soeren Apel Date: Mon, 10 Aug 2015 08:21:53 +0200 Subject: [PATCH] View: Separate data changed/capture state changed events --- pv/view/view.cpp | 45 ++++++++++++++++++++++++++------------------- pv/view/view.hpp | 1 + 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/pv/view/view.cpp b/pv/view/view.cpp index 42b22258..0844b6a4 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -118,7 +118,7 @@ View::View(Session &session, QWidget *parent) : connect(&session_, SIGNAL(signals_changed()), this, SLOT(signals_changed())); connect(&session_, SIGNAL(capture_state_changed(int)), - this, SLOT(data_updated())); + this, SLOT(capture_state_updated(int))); connect(&session_, SIGNAL(data_received()), this, SLOT(data_updated())); connect(&session_, SIGNAL(frame_ended()), @@ -647,22 +647,23 @@ vector< shared_ptr > View::extract_new_traces_for_channels( void View::determine_time_unit() { - time_unit_ = util::Samples; - - shared_lock lock(session().signals_mutex()); - const unordered_set< shared_ptr > &sigs(session().signals()); - - // Check all signals but... - for (const shared_ptr signal : sigs) { - const shared_ptr data = signal->data(); - - // ...only check first segment of each - const vector< shared_ptr > segments = data->segments(); - if (!segments.empty()) - if (segments[0]->samplerate()) { - time_unit_ = util::Time; - break; - } + // Check whether we know the sample rate and hence can use time as the unit + if (time_unit_ == util::Samples) { + shared_lock lock(session().signals_mutex()); + const unordered_set< shared_ptr > &sigs(session().signals()); + + // Check all signals but... + for (const shared_ptr signal : sigs) { + const shared_ptr data = signal->data(); + + // ...only check first segment of each + const vector< shared_ptr > segments = data->segments(); + if (!segments.empty()) + if (segments[0]->samplerate()) { + time_unit_ = util::Time; + break; + } + } } } @@ -896,14 +897,20 @@ void View::signals_changed() viewport_->update(); } -void View::data_updated() +void View::capture_state_updated(int state) { // Reset "always zoom to fit" when we change to the stopped state - if (always_zoom_to_fit_ && (session_.get_capture_state() == Session::Stopped)) { + if (always_zoom_to_fit_ && (state == Session::Stopped)) { always_zoom_to_fit_ = false; always_zoom_to_fit_changed(false); } + if (state == Session::Running) + time_unit_ = util::Samples; +} + +void View::data_updated() +{ if (always_zoom_to_fit_ || sticky_scrolling_) { if (!delayed_view_updater_.isActive()) delayed_view_updater_.start(); diff --git a/pv/view/view.hpp b/pv/view/view.hpp index b7d35e3c..95a02084 100644 --- a/pv/view/view.hpp +++ b/pv/view/view.hpp @@ -286,6 +286,7 @@ private Q_SLOTS: void v_scroll_value_changed(); void signals_changed(); + void capture_state_updated(int state); void data_updated(); void perform_delayed_view_update(); -- 2.30.2