X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Fview.cpp;h=07e97666a2e60e59acd4309b17f294a28df37609;hp=e8774f332b235dfa20222c4cd5da09202a0b1371;hb=051ba3b399abbd83fea8b7ef6f8876884ac0786c;hpb=9eae6de4dd0a3c628026eca6ca55cef8b70bfa86 diff --git a/pv/view/view.cpp b/pv/view/view.cpp index e8774f33..07e97666 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -57,6 +57,7 @@ #include "viewport.hpp" #include "pv/session.hpp" +#include "pv/globalsettings.hpp" #include "pv/devices/device.hpp" #include "pv/data/logic.hpp" #include "pv/data/logicsegment.hpp" @@ -135,8 +136,8 @@ bool CustomAbstractScrollArea::viewportEvent(QEvent *event) } } -View::View(Session &session, QWidget *parent) : - ViewBase(session, parent), +View::View(Session &session, bool is_main_view, QWidget *parent) : + ViewBase(session, is_main_view, parent), viewport_(new Viewport(*this)), ruler_(new Ruler(*this)), header_(new Header(*this)), @@ -145,7 +146,6 @@ View::View(Session &session, QWidget *parent) : offset_(0), updating_scroll_(false), sticky_scrolling_(false), // Default setting is set in MainWindow::setup_ui() - coloured_bg_(false), always_zoom_to_fit_(false), tick_period_(0), tick_prefix_(pv::util::SIPrefix::yocto), @@ -160,6 +160,9 @@ View::View(Session &session, QWidget *parent) : saved_v_offset_(0), size_finalized_(false) { + GlobalSettings settings; + coloured_bg_ = settings.value(GlobalSettings::Key_View_ColouredBG).toBool(); + connect(scrollarea_.horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(h_scroll_value_changed(int))); connect(scrollarea_.verticalScrollBar(), SIGNAL(valueChanged(int)), @@ -559,19 +562,11 @@ pair View::get_time_extents() const return make_pair(*left_time, *right_time); } -void View::enable_sticky_scrolling(bool state) -{ - sticky_scrolling_ = state; -} - -void View::toggle_sticky_scrolling(void) +void View::enable_show_sampling_points(bool state) { - sticky_scrolling_ = !sticky_scrolling_; -} + (void)state; -bool View::get_coloured_bg(void) -{ - return coloured_bg_; + viewport_->update(); } void View::enable_coloured_bg(bool state) @@ -579,8 +574,6 @@ void View::enable_coloured_bg(bool state) const vector> items( list_by_type()); - coloured_bg_ = state; - for (shared_ptr i : items) { // Can't cast to Trace because it's abstract, so we need to // check for any derived classes individually @@ -603,11 +596,6 @@ void View::enable_coloured_bg(bool state) viewport_->update(); } -void View::toggle_coloured_bg(void) -{ - enable_coloured_bg(!coloured_bg_); -} - bool View::cursors_shown() const { return show_cursors_; @@ -636,8 +624,8 @@ std::shared_ptr View::cursors() const void View::add_flag(const Timestamp& time) { - flags_.push_back(shared_ptr(new Flag(*this, time, - QString("%1").arg(next_flag_text_)))); + flags_.push_back(make_shared(*this, time, + QString("%1").arg(next_flag_text_))); next_flag_text_ = (next_flag_text_ >= 'Z') ? 'A' : (next_flag_text_ + 1); @@ -685,7 +673,7 @@ void View::restack_all_trace_tree_items() o->restack_items(); // Re-assign background colors - bool next_bgcolour_state = 0; + bool next_bgcolour_state = false; for (auto &o : sorted_owners) next_bgcolour_state = o->reassign_bgcolour_states(next_bgcolour_state); @@ -697,8 +685,7 @@ void View::restack_all_trace_tree_items() void View::trigger_event(util::Timestamp location) { - trigger_markers_.push_back(shared_ptr( - new TriggerMarker(*this, location))); + trigger_markers_.push_back(make_shared(*this, location)); } void View::get_scroll_layout(double &length, Timestamp &offset) const @@ -1241,6 +1228,19 @@ void View::capture_state_updated(int state) set_time_unit(util::TimeUnit::Samples); trigger_markers_.clear(); + + // Activate "always zoom to fit" if the setting is enabled and we're + // the main view of this session (other trace views may be used for + // zooming and we don't want to mess them up) + GlobalSettings settings; + bool state = settings.value(GlobalSettings::Key_View_AlwaysZoomToFit).toBool(); + if (is_main_view_ && state) { + always_zoom_to_fit_ = true; + always_zoom_to_fit_changed(always_zoom_to_fit_); + } + + // Enable sticky scrolling if the setting is enabled + sticky_scrolling_ = settings.value(GlobalSettings::Key_View_StickyScrolling).toBool(); } if (state == Session::Stopped) { @@ -1250,8 +1250,10 @@ void View::capture_state_updated(int state) // Reset "always zoom to fit", the acquisition has stopped if (always_zoom_to_fit_) { + // Perform a final zoom-to-fit before disabling + zoom_fit(always_zoom_to_fit_); always_zoom_to_fit_ = false; - always_zoom_to_fit_changed(false); + always_zoom_to_fit_changed(always_zoom_to_fit_); } } } @@ -1271,10 +1273,9 @@ void View::data_updated() void View::perform_delayed_view_update() { - if (always_zoom_to_fit_) + if (always_zoom_to_fit_) { zoom_fit(true); - - if (sticky_scrolling_) { + } else if (sticky_scrolling_) { // Make right side of the view sticky double length = 0; Timestamp offset;