]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/analogsignal.cpp
Apply changes suggested by clang-tidy
[pulseview.git] / pv / views / trace / analogsignal.cpp
index cddf59c15059cdda26a209b4781032f73fdd9bce..cb8e4a527938bde2dd056d2c563d61e6661fa579 100644 (file)
@@ -47,7 +47,6 @@
 
 #include <libsigrokcxx/libsigrokcxx.hpp>
 
-using std::bind;
 using std::deque;
 using std::div;
 using std::div_t;
@@ -57,7 +56,6 @@ using std::min;
 using std::numeric_limits;
 using std::out_of_range;
 using std::pair;
-using std::placeholders::_1;
 using std::shared_ptr;
 using std::vector;
 
@@ -118,8 +116,7 @@ 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_ConversionThresholdDispMode,
-               bind(&AnalogSignal::on_settingViewConversionThresholdDispMode_changed, this, _1));
+       GlobalSettings::add_change_handler(this);
 
        GlobalSettings gs;
        conversion_threshold_disp_mode_ =
@@ -131,6 +128,11 @@ AnalogSignal::AnalogSignal(
        update_scale();
 }
 
+AnalogSignal::~AnalogSignal()
+{
+       GlobalSettings::remove_change_handler(this);
+}
+
 shared_ptr<pv::data::SignalData> AnalogSignal::data() const
 {
        return base_->analog_data();
@@ -206,6 +208,12 @@ void AnalogSignal::scale_handle_drag_release()
        update_scale();
 }
 
+void AnalogSignal::on_setting_changed(const QString &key, const QVariant &value)
+{
+       if (key == GlobalSettings::Key_View_ConversionThresholdDispMode)
+               on_settingViewConversionThresholdDispMode_changed(value);
+}
+
 void AnalogSignal::paint_back(QPainter &p, ViewItemPaintParams &pp)
 {
        if (!base_->enabled())
@@ -268,23 +276,14 @@ void AnalogSignal::paint_mid(QPainter &p, ViewItemPaintParams &pp)
        if ((display_type_ == DisplayAnalog) || (display_type_ == DisplayBoth)) {
                paint_grid(p, y, pp.left(), pp.right());
 
-               const deque< shared_ptr<pv::data::AnalogSegment> > &segments =
-                       base_->analog_data()->analog_segments();
-               if (segments.empty())
+               shared_ptr<pv::data::AnalogSegment> segment = get_analog_segment_to_paint();
+               if (!segment)
                        return;
 
-               shared_ptr<pv::data::AnalogSegment> segment;
-               try {
-                       segment = segments.at(current_segment_);
-               } catch (out_of_range) {
-                       qDebug() << "Current analog segment out of range for signal" << base_->name();
-                       return;
-               }
-
                const double pixels_offset = pp.pixels_offset();
                const double samplerate = max(1.0, segment->samplerate());
                const pv::util::Timestamp& start_time = segment->start_time();
-               const int64_t last_sample = segment->get_sample_count() - 1;
+               const int64_t last_sample = (int64_t)segment->get_sample_count() - 1;
                const double samples_per_pixel = samplerate * pp.scale();
                const pv::util::Timestamp start = samplerate * (pp.offset() - start_time);
                const pv::util::Timestamp end = start + samples_per_pixel * pp.width();
@@ -448,8 +447,7 @@ void AnalogSignal::paint_trace(QPainter &p,
                                }
                        }
 
-                       sampling_points[idx].push_back(
-                               QRectF(x - (w / 2), y - sample_block[block_sample] * scale_ - (w / 2), w, w));
+                       sampling_points[idx].emplace_back(x - (w / 2), y - sample_block[block_sample] * scale_ - (w / 2), w, w);
                }
        }
        delete[] sample_block;
@@ -539,19 +537,9 @@ void AnalogSignal::paint_logic_mid(QPainter &p, ViewItemPaintParams &pp)
        const float high_offset = y - ph + signal_margin + 0.5f;
        const float low_offset = y + nh - signal_margin - 0.5f;
 
-       const deque< shared_ptr<pv::data::LogicSegment> > &segments =
-               base_->logic_data()->logic_segments();
-
-       if (segments.empty())
-               return;
-
-       shared_ptr<pv::data::LogicSegment> segment;
-       try {
-               segment = segments.at(current_segment_);
-       } catch (out_of_range) {
-               qDebug() << "Current logic segment out of range for signal" << base_->name();
+       shared_ptr<pv::data::LogicSegment> segment = get_logic_segment_to_paint();
+       if (!segment)
                return;
-       }
 
        double samplerate = segment->samplerate();
 
@@ -561,7 +549,7 @@ void AnalogSignal::paint_logic_mid(QPainter &p, ViewItemPaintParams &pp)
 
        const double pixels_offset = pp.pixels_offset();
        const pv::util::Timestamp& start_time = segment->start_time();
-       const int64_t last_sample = segment->get_sample_count() - 1;
+       const int64_t last_sample = (int64_t)segment->get_sample_count() - 1;
        const double samples_per_pixel = samplerate * pp.scale();
        const double pixels_per_sample = 1 / samples_per_pixel;
        const pv::util::Timestamp start = samplerate * (pp.offset() - start_time);
@@ -666,6 +654,54 @@ void AnalogSignal::paint_logic_caps(QPainter &p, QLineF *const lines,
        p.drawLines(lines, line - lines);
 }
 
+shared_ptr<pv::data::AnalogSegment> AnalogSignal::get_analog_segment_to_paint() const
+{
+       shared_ptr<pv::data::AnalogSegment> segment;
+
+       const deque< shared_ptr<pv::data::AnalogSegment> > &segments =
+               base_->analog_data()->analog_segments();
+
+       if (!segments.empty()) {
+               if (segment_display_mode_ == ShowLastSegmentOnly)
+                       segment = segments.back();
+
+               if ((segment_display_mode_ == ShowSingleSegmentOnly) ||
+                               (segment_display_mode_ == ShowLastCompleteSegmentOnly)) {
+                       try {
+                               segment = segments.at(current_segment_);
+                       } catch (out_of_range) {
+                               qDebug() << "Current analog segment out of range for signal" << base_->name() << ":" << current_segment_;
+                       }
+               }
+       }
+
+       return segment;
+}
+
+shared_ptr<pv::data::LogicSegment> AnalogSignal::get_logic_segment_to_paint() const
+{
+       shared_ptr<pv::data::LogicSegment> segment;
+
+       const deque< shared_ptr<pv::data::LogicSegment> > &segments =
+               base_->logic_data()->logic_segments();
+
+       if (!segments.empty()) {
+               if (segment_display_mode_ == ShowLastSegmentOnly)
+                       segment = segments.back();
+
+               if ((segment_display_mode_ == ShowSingleSegmentOnly) ||
+                               (segment_display_mode_ == ShowLastCompleteSegmentOnly)) {
+                       try {
+                               segment = segments.at(current_segment_);
+                       } catch (out_of_range) {
+                               qDebug() << "Current logic segment out of range for signal" << base_->name() << ":" << current_segment_;
+                       }
+               }
+       }
+
+       return segment;
+}
+
 float AnalogSignal::get_resolution(int scale_index)
 {
        const float seq[] = {1.0f, 2.0f, 5.0f};