]> sigrok.org Git - pulseview.git/blob - pv/data/signalbase.cpp
3adf3338dc4d7cd4f6f41988bf667fab90ad1af3
[pulseview.git] / pv / data / signalbase.cpp
1 /*
2  * This file is part of the PulseView project.
3  *
4  * Copyright (C) 2012 Joel Holdsworth <joel@airwebreathe.org.uk>
5  * Copyright (C) 2016 Soeren Apel <soeren@apelpie.net>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
20  */
21
22 #include "analog.hpp"
23 #include "logic.hpp"
24 #include "signalbase.hpp"
25 #include "signaldata.hpp"
26 #include "decode/row.hpp"
27
28 #include <pv/binding/decoder.hpp>
29
30 using std::dynamic_pointer_cast;
31 using std::shared_ptr;
32
33 using sigrok::Channel;
34 using sigrok::ChannelType;
35
36 namespace pv {
37 namespace data {
38
39 const int SignalBase::ColourBGAlpha = 8*256/100;
40
41 SignalBase::SignalBase(shared_ptr<sigrok::Channel> channel) :
42         channel_(channel)
43 {
44 }
45
46 shared_ptr<sigrok::Channel> SignalBase::channel() const
47 {
48         return channel_;
49 }
50
51 QString SignalBase::name() const
52 {
53         return (channel_) ? QString::fromStdString(channel_->name()) : name_;
54 }
55
56 void SignalBase::set_name(QString name)
57 {
58         if (channel_)
59                 channel_->set_name(name.toUtf8().constData());
60
61         name_ = name;
62
63         name_changed(name);
64 }
65
66 bool SignalBase::enabled() const
67 {
68         return (channel_) ? channel_->enabled() : true;
69 }
70
71 void SignalBase::set_enabled(bool value)
72 {
73         if (channel_) {
74                 channel_->set_enabled(value);
75                 enabled_changed(value);
76         }
77 }
78
79 const ChannelType *SignalBase::type() const
80 {
81         return (channel_) ? channel_->type() : nullptr;
82 }
83
84 unsigned int SignalBase::index() const
85 {
86         return (channel_) ? channel_->index() : (unsigned int)-1;
87 }
88
89 QColor SignalBase::colour() const
90 {
91         return colour_;
92 }
93
94 void SignalBase::set_colour(QColor colour)
95 {
96         colour_ = colour;
97
98         bgcolour_ = colour;
99         bgcolour_.setAlpha(ColourBGAlpha);
100
101         colour_changed(colour);
102 }
103
104 QColor SignalBase::bgcolour() const
105 {
106         return bgcolour_;
107 }
108
109 void SignalBase::set_data(shared_ptr<pv::data::SignalData> data)
110 {
111         data_ = data;
112 }
113
114 shared_ptr<data::Analog> SignalBase::analog_data() const
115 {
116         if (type() == ChannelType::ANALOG)
117                 return dynamic_pointer_cast<data::Analog>(data_);
118         else
119                 return shared_ptr<data::Analog>();
120 }
121
122 shared_ptr<data::Logic> SignalBase::logic_data() const
123 {
124         if (type() == ChannelType::LOGIC)
125                 return dynamic_pointer_cast<data::Logic>(data_);
126         else
127                 return shared_ptr<data::Logic>();
128 }
129
130 #ifdef ENABLE_DECODE
131 bool SignalBase::is_decode_signal() const
132 {
133         return (decoder_stack_ != nullptr);
134 }
135
136 std::shared_ptr<pv::data::DecoderStack> SignalBase::decoder_stack() const
137 {
138         return decoder_stack_;
139 }
140
141 void SignalBase::set_decoder_stack(std::shared_ptr<pv::data::DecoderStack>
142         decoder_stack)
143 {
144         decoder_stack_ = decoder_stack;
145 }
146 #endif
147
148 } // namespace data
149 } // namespace pv