]> sigrok.org Git - pulseview.git/blobdiff - pv/data/mathsignal.cpp
Move signal color handling to SignalBase
[pulseview.git] / pv / data / mathsignal.cpp
index 20a41a4cc814c9b861836da1b1395a6df8befead..d9ba5bc369440e3ae051cc4ebecf517338d37484 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "mathsignal.hpp"
 
+#include <extdef.h>
 #include <pv/globalsettings.hpp>
 #include <pv/session.hpp>
 #include <pv/data/analogsegment.hpp>
@@ -90,10 +91,11 @@ MathSignal::MathSignal(pv::Session &session) :
        exprtk_parser_(nullptr),
        fnc_sig_sample_(nullptr)
 {
-       set_name(QString(tr("Math%1")).arg(session_.get_next_signal_index(MathChannel)));
+       uint32_t sig_idx = session_.get_next_signal_index(MathChannel);
+       set_name(QString(tr("Math%1")).arg(sig_idx));
+       set_color(AnalogSignalColors[(sig_idx - 1) % countof(AnalogSignalColors)]);
 
-       shared_ptr<Analog> data(new data::Analog());
-       set_data(data);
+       set_data(std::make_shared<data::Analog>());
 
        connect(&session_, SIGNAL(capture_state_changed(int)),
                this, SLOT(on_capture_state_changed(int)));
@@ -338,7 +340,7 @@ void MathSignal::generation_proc()
        if (gen_interrupt_)
                return;
 
-       shared_ptr<Analog> analog = dynamic_pointer_cast<Analog>(data_);
+       shared_ptr<Analog> analog = analog_data();
 
        // Create initial analog segment
        shared_ptr<AnalogSegment> output_segment =
@@ -375,6 +377,8 @@ void MathSignal::generation_proc()
 
                if (samples_to_process == 0) {
                        if (segment_id < session_.get_highest_segment_id()) {
+                               analog->analog_segments().back()->set_complete();
+
                                // Process next segment
                                segment_id++;
 
@@ -440,6 +444,11 @@ void MathSignal::on_capture_state_changed(int state)
 {
        if (state == Session::Running)
                begin_generation();
+
+       if (state == Session::Stopped) {
+               shared_ptr<Analog> analog = analog_data();
+               analog->analog_segments().back()->set_complete();
+       }
 }
 
 void MathSignal::on_data_received()