From 2601ce965fc455d23f5a964b84ddd74eb93705c4 Mon Sep 17 00:00:00 2001 From: Soeren Apel Date: Tue, 8 Aug 2017 19:40:11 +0200 Subject: [PATCH] AnalogSignal: Use setting change handler for threshold display --- pv/views/trace/analogsignal.cpp | 23 +++++++++++++++++------ pv/views/trace/analogsignal.hpp | 3 +++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/pv/views/trace/analogsignal.cpp b/pv/views/trace/analogsignal.cpp index 58a186ec..5e7081d6 100644 --- a/pv/views/trace/analogsignal.cpp +++ b/pv/views/trace/analogsignal.cpp @@ -46,6 +46,7 @@ #include +using std::bind; using std::deque; using std::div; using std::div_t; @@ -54,6 +55,7 @@ using std::make_pair; using std::min; using std::numeric_limits; using std::pair; +using std::placeholders::_1; using std::shared_ptr; using std::vector; @@ -111,7 +113,13 @@ AnalogSignal::AnalogSignal( connect(analog_data, SIGNAL(min_max_changed(float, float)), this, SLOT(on_min_max_changed(float, float))); + GlobalSettings::register_change_handler(GlobalSettings::Key_View_ShowConversionThresholds, + bind(&AnalogSignal::on_settingViewShowConversionThresholds_changed, this, _1)); + GlobalSettings gs; + show_conversion_thresholds_ = + gs.value(GlobalSettings::Key_View_ShowConversionThresholds).toBool(); + div_height_ = gs.value(GlobalSettings::Key_View_DefaultDivHeight).toInt(); base_->set_colour(SignalColours[base_->index() % countof(SignalColours)]); @@ -198,15 +206,10 @@ void AnalogSignal::paint_back(QPainter &p, ViewItemPaintParams &pp) if (!base_->enabled()) return; - // TODO Register a change handler instead of querying this with every repaint - GlobalSettings settings; - const bool show_conversion_thresholds = - settings.value(GlobalSettings::Key_View_ShowConversionThresholds).toBool(); - const vector thresholds = base_->get_conversion_thresholds(); // Only display thresholds if we have some and we show analog samples - if ((thresholds.size() > 0) && show_conversion_thresholds && + if ((thresholds.size() > 0) && show_conversion_thresholds_ && ((display_type_ == DisplayAnalog) || (display_type_ == DisplayBoth))) { const int visual_y = get_visual_y(); @@ -1070,6 +1073,14 @@ void AnalogSignal::on_display_type_changed(int index) owner_->row_item_appearance_changed(false, true); } +void AnalogSignal::on_settingViewShowConversionThresholds_changed(const QVariant new_value) +{ + show_conversion_thresholds_ = new_value.toBool(); + + if (owner_) + owner_->row_item_appearance_changed(false, true); +} + } // namespace trace } // namespace views } // namespace pv diff --git a/pv/views/trace/analogsignal.hpp b/pv/views/trace/analogsignal.hpp index 536fc8a6..a36efce4 100644 --- a/pv/views/trace/analogsignal.hpp +++ b/pv/views/trace/analogsignal.hpp @@ -173,6 +173,8 @@ private Q_SLOTS: void on_display_type_changed(int index); + void on_settingViewShowConversionThresholds_changed(const QVariant new_value); + private: QComboBox *resolution_cb_, *conversion_cb_, *conv_threshold_cb_, *display_type_cb_; @@ -188,6 +190,7 @@ private: DisplayType display_type_; bool autoranging_; + bool show_conversion_thresholds_; }; } // namespace trace -- 2.30.2