1 #include "control/controlpotmeter.h"
2
3 #include "control/control.h"
4 #include "control/controlproxy.h"
5 #include "control/controlpushbutton.h"
6 #include "moc_controlpotmeter.cpp"
7
ControlPotmeter(const ConfigKey & key,double dMinValue,double dMaxValue,bool allowOutOfBounds,bool bIgnoreNops,bool bTrack,bool bPersist,double defaultValue)8 ControlPotmeter::ControlPotmeter(const ConfigKey& key,
9 double dMinValue,
10 double dMaxValue,
11 bool allowOutOfBounds,
12 bool bIgnoreNops,
13 bool bTrack,
14 bool bPersist,
15 double defaultValue)
16 : ControlObject(key, bIgnoreNops, bTrack, bPersist, defaultValue),
17 m_controls(key) {
18 setRange(dMinValue, dMaxValue, allowOutOfBounds);
19 double default_value = dMinValue + 0.5 * (dMaxValue - dMinValue);
20 setDefaultValue(default_value);
21 if (!bPersist) {
22 set(default_value);
23 }
24 //qDebug() << "" << this << ", min " << dMinValue << ", max " << dMaxValue << ", default " << default_value;
25
26 if (m_pControl) {
27 connect(m_pControl.data(),
28 &ControlDoublePrivate::valueChanged,
29 this,
30 &ControlPotmeter::privateValueChanged,
31 Qt::DirectConnection);
32 }
33 m_controls.setIsDefault(get() == default_value);
34 }
35
setStepCount(int count)36 void ControlPotmeter::setStepCount(int count) {
37 m_controls.setStepCount(count);
38 }
39
setSmallStepCount(int count)40 void ControlPotmeter::setSmallStepCount(int count) {
41 m_controls.setSmallStepCount(count);
42 }
43
setRange(double dMinValue,double dMaxValue,bool allowOutOfBounds)44 void ControlPotmeter::setRange(double dMinValue, double dMaxValue,
45 bool allowOutOfBounds) {
46 m_bAllowOutOfBounds = allowOutOfBounds;
47
48 if (m_pControl) {
49 m_pControl->setBehavior(
50 new ControlPotmeterBehavior(dMinValue, dMaxValue, allowOutOfBounds));
51 }
52 }
53
54 // slot
privateValueChanged(double dValue,QObject * pSender)55 void ControlPotmeter::privateValueChanged(double dValue, QObject* pSender) {
56 Q_UNUSED(pSender);
57 m_controls.setIsDefault(dValue == defaultValue());
58 }
59
PotmeterControls(const ConfigKey & key)60 PotmeterControls::PotmeterControls(const ConfigKey& key)
61 : m_pControl(new ControlProxy(key, this)),
62 m_stepCount(10),
63 m_smallStepCount(100) {
64 // These controls are deleted when the ControlPotmeter is since
65 // PotmeterControls is a member variable of the associated ControlPotmeter
66 // and the push-button controls are parented to the PotmeterControls.
67
68 ControlPushButton* controlUp = new ControlPushButton(
69 ConfigKey(key.group, QString(key.item) + "_up"));
70 controlUp->setParent(this);
71 connect(controlUp,
72 &ControlPushButton::valueChanged,
73 this,
74 &PotmeterControls::incValue);
75
76 ControlPushButton* controlDown = new ControlPushButton(
77 ConfigKey(key.group, QString(key.item) + "_down"));
78 controlDown->setParent(this);
79 connect(controlDown,
80 &ControlPushButton::valueChanged,
81 this,
82 &PotmeterControls::decValue);
83
84 ControlPushButton* controlUpSmall = new ControlPushButton(
85 ConfigKey(key.group, QString(key.item) + "_up_small"));
86 controlUpSmall->setParent(this);
87 connect(controlUpSmall,
88 &ControlPushButton::valueChanged,
89 this,
90 &PotmeterControls::incSmallValue);
91
92 ControlPushButton* controlDownSmall = new ControlPushButton(
93 ConfigKey(key.group, QString(key.item) + "_down_small"));
94 controlDownSmall->setParent(this);
95 connect(controlDownSmall,
96 &ControlPushButton::valueChanged,
97 this,
98 &PotmeterControls::decSmallValue);
99
100 m_pControlDefault = new ControlPushButton(
101 ConfigKey(key.group, QString(key.item) + "_set_default"));
102 m_pControlDefault->setParent(this);
103 connect(m_pControlDefault,
104 &ControlPushButton::valueChanged,
105 this,
106 &PotmeterControls::setToDefault);
107
108 ControlPushButton* controlZero = new ControlPushButton(
109 ConfigKey(key.group, QString(key.item) + "_set_zero"));
110 controlZero->setParent(this);
111 connect(controlZero,
112 &ControlPushButton::valueChanged,
113 this,
114 &PotmeterControls::setToZero);
115
116 ControlPushButton* controlOne = new ControlPushButton(
117 ConfigKey(key.group, QString(key.item) + "_set_one"));
118 controlOne->setParent(this);
119 connect(controlOne,
120 &ControlPushButton::valueChanged,
121 this,
122 &PotmeterControls::setToOne);
123
124 ControlPushButton* controlMinusOne = new ControlPushButton(
125 ConfigKey(key.group, QString(key.item) + "_set_minus_one"));
126 controlMinusOne->setParent(this);
127 connect(controlMinusOne, &ControlPushButton::valueChanged, this, &PotmeterControls::setToMinusOne);
128
129 ControlPushButton* controlToggle = new ControlPushButton(
130 ConfigKey(key.group, QString(key.item) + "_toggle"));
131 controlToggle->setParent(this);
132 connect(controlToggle,
133 &ControlPushButton::valueChanged,
134 this,
135 &PotmeterControls::toggleValue);
136
137 ControlPushButton* controlMinusToggle = new ControlPushButton(
138 ConfigKey(key.group, QString(key.item) + "_minus_toggle"));
139 controlMinusToggle->setParent(this);
140 connect(controlMinusToggle,
141 &ControlPushButton::valueChanged,
142 this,
143 &PotmeterControls::toggleMinusValue);
144 }
145
~PotmeterControls()146 PotmeterControls::~PotmeterControls() {
147 }
148
incValue(double v)149 void PotmeterControls::incValue(double v) {
150 if (v > 0) {
151 double parameter = m_pControl->getParameter();
152 parameter += 1.0 / m_stepCount;
153 m_pControl->setParameter(parameter);
154 }
155 }
156
decValue(double v)157 void PotmeterControls::decValue(double v) {
158 if (v > 0) {
159 double parameter = m_pControl->getParameter();
160 parameter -= 1.0 / m_stepCount;
161 m_pControl->setParameter(parameter);
162 }
163 }
164
incSmallValue(double v)165 void PotmeterControls::incSmallValue(double v) {
166 if (v > 0) {
167 double parameter = m_pControl->getParameter();
168 parameter += 1.0 / m_smallStepCount;
169 m_pControl->setParameter(parameter);
170 }
171 }
172
decSmallValue(double v)173 void PotmeterControls::decSmallValue(double v) {
174 if (v > 0) {
175 double parameter = m_pControl->getParameter();
176 parameter -= 1.0 / m_smallStepCount;
177 m_pControl->setParameter(parameter);
178 }
179 }
180
setToZero(double v)181 void PotmeterControls::setToZero(double v) {
182 if (v > 0) {
183 m_pControl->set(0.0);
184 }
185 }
186
setToOne(double v)187 void PotmeterControls::setToOne(double v) {
188 if (v > 0) {
189 m_pControl->set(1.0);
190 }
191 }
192
setToMinusOne(double v)193 void PotmeterControls::setToMinusOne(double v) {
194 if (v > 0) {
195 m_pControl->set(-1.0);
196 }
197 }
198
setToDefault(double v)199 void PotmeterControls::setToDefault(double v) {
200 if (v > 0) {
201 m_pControl->reset();
202 }
203 }
204
toggleValue(double v)205 void PotmeterControls::toggleValue(double v) {
206 if (v > 0) {
207 double value = m_pControl->get();
208 m_pControl->set(value > 0.0 ? 0.0 : 1.0);
209 }
210 }
211
toggleMinusValue(double v)212 void PotmeterControls::toggleMinusValue(double v) {
213 if (v > 0) {
214 double value = m_pControl->get();
215 m_pControl->set(value > 0.0 ? -1.0 : 1.0);
216 }
217 }
218
setIsDefault(bool isDefault)219 void PotmeterControls::setIsDefault(bool isDefault) {
220 m_pControlDefault->forceSet(isDefault ? 1.0 : 0.0);
221 }
222