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