Use nullptr in a few places.
[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, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include "analog.hpp"
22 #include "logic.hpp"
23 #include "signalbase.hpp"
24 #include "signaldata.hpp"
25 #include "decode/row.hpp"
26
27 #include <pv/binding/decoder.hpp>
28
29 using std::dynamic_pointer_cast;
30 using std::shared_ptr;
31
32 using sigrok::Channel;
33 using sigrok::ChannelType;
34
35 namespace pv {
36 namespace data {
37
38 const int SignalBase::ColourBGAlpha = 8*256/100;
39
40 SignalBase::SignalBase(shared_ptr<sigrok::Channel> channel) :
41         channel_(channel)
42 {
43         if (channel_)
44                 internal_name_ = QString::fromStdString(channel_->name());
45 }
46
47 shared_ptr<sigrok::Channel> SignalBase::channel() const
48 {
49         return channel_;
50 }
51
52 QString SignalBase::name() const
53 {
54         return (channel_) ? QString::fromStdString(channel_->name()) : name_;
55 }
56
57 QString SignalBase::internal_name() const
58 {
59         return internal_name_;
60 }
61
62 void SignalBase::set_name(QString name)
63 {
64         if (channel_)
65                 channel_->set_name(name.toUtf8().constData());
66
67         name_ = name;
68
69         name_changed(name);
70 }
71
72 bool SignalBase::enabled() const
73 {
74         return (channel_) ? channel_->enabled() : true;
75 }
76
77 void SignalBase::set_enabled(bool value)
78 {
79         if (channel_) {
80                 channel_->set_enabled(value);
81                 enabled_changed(value);
82         }
83 }
84
85 const ChannelType *SignalBase::type() const
86 {
87         return (channel_) ? channel_->type() : nullptr;
88 }
89
90 unsigned int SignalBase::index() const
91 {
92         return (channel_) ? channel_->index() : (unsigned int)-1;
93 }
94
95 QColor SignalBase::colour() const
96 {
97         return colour_;
98 }
99
100 void SignalBase::set_colour(QColor colour)
101 {
102         colour_ = colour;
103
104         bgcolour_ = colour;
105         bgcolour_.setAlpha(ColourBGAlpha);
106
107         colour_changed(colour);
108 }
109
110 QColor SignalBase::bgcolour() const
111 {
112         return bgcolour_;
113 }
114
115 void SignalBase::set_data(shared_ptr<pv::data::SignalData> data)
116 {
117         data_ = data;
118 }
119
120 shared_ptr<data::Analog> SignalBase::analog_data() const
121 {
122         if (type() == ChannelType::ANALOG)
123                 return dynamic_pointer_cast<data::Analog>(data_);
124         else
125                 return shared_ptr<data::Analog>();
126 }
127
128 shared_ptr<data::Logic> SignalBase::logic_data() const
129 {
130         if (type() == ChannelType::LOGIC)
131                 return dynamic_pointer_cast<data::Logic>(data_);
132         else
133                 return shared_ptr<data::Logic>();
134 }
135
136 #ifdef ENABLE_DECODE
137 bool SignalBase::is_decode_signal() const
138 {
139         return (decoder_stack_ != nullptr);
140 }
141
142 std::shared_ptr<pv::data::DecoderStack> SignalBase::decoder_stack() const
143 {
144         return decoder_stack_;
145 }
146
147 void SignalBase::set_decoder_stack(std::shared_ptr<pv::data::DecoderStack>
148         decoder_stack)
149 {
150         decoder_stack_ = decoder_stack;
151 }
152 #endif
153
154 void SignalBase::save_settings(QSettings &settings) const
155 {
156         settings.setValue("name", name());
157         settings.setValue("enabled", enabled());
158         settings.setValue("colour", colour());
159 }
160
161 void SignalBase::restore_settings(QSettings &settings)
162 {
163         set_name(settings.value("name").toString());
164         set_enabled(settings.value("enabled").toBool());
165         set_colour(settings.value("colour").value<QColor>());
166 }
167
168
169 } // namespace data
170 } // namespace pv