]> sigrok.org Git - pulseview.git/commitdiff
AnalogSignal: Use setting change handler for threshold display
authorSoeren Apel <redacted>
Tue, 8 Aug 2017 17:40:11 +0000 (19:40 +0200)
committerSoeren Apel <redacted>
Tue, 8 Aug 2017 17:40:11 +0000 (19:40 +0200)
pv/views/trace/analogsignal.cpp
pv/views/trace/analogsignal.hpp

index 58a186ecf0229cd28e7a2bd134f9e76613205667..5e7081d61145e0555dc8a048cc65c850c5f49de0 100644 (file)
@@ -46,6 +46,7 @@
 
 #include <libsigrokcxx/libsigrokcxx.hpp>
 
+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<double> 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
index 536fc8a61714b6bf323f4a991b934389022b962c..a36efce4879ca1c9e5602772ca41972ab2af280a 100644 (file)
@@ -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