lbajardsilogic@0
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
lbajardsilogic@0
|
2
|
lbajardsilogic@0
|
3 /*
|
lbajardsilogic@0
|
4 Sonic Visualiser
|
lbajardsilogic@0
|
5 An audio file viewer and annotation editor.
|
lbajardsilogic@0
|
6 Centre for Digital Music, Queen Mary, University of London.
|
lbajardsilogic@0
|
7 This file copyright 2006 Chris Cannam and QMUL.
|
lbajardsilogic@0
|
8
|
lbajardsilogic@0
|
9 This program is free software; you can redistribute it and/or
|
lbajardsilogic@0
|
10 modify it under the terms of the GNU General Public License as
|
lbajardsilogic@0
|
11 published by the Free Software Foundation; either version 2 of the
|
lbajardsilogic@0
|
12 License, or (at your option) any later version. See the file
|
lbajardsilogic@0
|
13 COPYING included with this distribution for more information.
|
lbajardsilogic@0
|
14 */
|
lbajardsilogic@0
|
15
|
lbajardsilogic@0
|
16 #include "PluginParameterBox.h"
|
lbajardsilogic@0
|
17
|
lbajardsilogic@0
|
18 #include "AudioDial.h"
|
lbajardsilogic@0
|
19
|
lbajardsilogic@0
|
20 #include "plugin/PluginXml.h"
|
lbajardsilogic@0
|
21
|
lbajardsilogic@0
|
22 #include "base/RangeMapper.h"
|
lbajardsilogic@0
|
23
|
lbajardsilogic@0
|
24 #include <QDoubleSpinBox>
|
lbajardsilogic@0
|
25 #include <QGridLayout>
|
lbajardsilogic@0
|
26 #include <QComboBox>
|
lbajardsilogic@0
|
27 #include <QCheckBox>
|
lbajardsilogic@0
|
28 #include <QLayout>
|
lbajardsilogic@0
|
29 #include <QLabel>
|
lbajardsilogic@0
|
30
|
lbajardsilogic@0
|
31 #include <iostream>
|
lbajardsilogic@0
|
32 #include <string>
|
lbajardsilogic@0
|
33
|
lbajardsilogic@0
|
34 #include <cmath>
|
lbajardsilogic@0
|
35
|
lbajardsilogic@0
|
36 PluginParameterBox::PluginParameterBox(Vamp::PluginBase *plugin, QWidget *parent) :
|
lbajardsilogic@0
|
37 QFrame(parent),
|
lbajardsilogic@0
|
38 m_plugin(plugin)
|
lbajardsilogic@0
|
39 {
|
lbajardsilogic@0
|
40 m_layout = new QGridLayout;
|
lbajardsilogic@0
|
41 setLayout(m_layout);
|
lbajardsilogic@0
|
42 populate();
|
lbajardsilogic@0
|
43 }
|
lbajardsilogic@0
|
44
|
lbajardsilogic@0
|
45 PluginParameterBox::~PluginParameterBox()
|
lbajardsilogic@0
|
46 {
|
lbajardsilogic@0
|
47 }
|
lbajardsilogic@0
|
48
|
lbajardsilogic@0
|
49 void
|
lbajardsilogic@0
|
50 PluginParameterBox::populate()
|
lbajardsilogic@0
|
51 {
|
lbajardsilogic@0
|
52 Vamp::PluginBase::ParameterList params = m_plugin->getParameterDescriptors();
|
lbajardsilogic@0
|
53 Vamp::PluginBase::ProgramList programs = m_plugin->getPrograms();
|
lbajardsilogic@0
|
54
|
lbajardsilogic@0
|
55 m_params.clear();
|
lbajardsilogic@0
|
56
|
lbajardsilogic@0
|
57 if (params.empty() && programs.empty()) {
|
lbajardsilogic@0
|
58 m_layout->addWidget
|
lbajardsilogic@0
|
59 (new QLabel(tr("This plugin has no adjustable parameters.")),
|
lbajardsilogic@0
|
60 0, 0);
|
lbajardsilogic@0
|
61 }
|
lbajardsilogic@0
|
62
|
lbajardsilogic@0
|
63 int offset = 0;
|
lbajardsilogic@0
|
64
|
lbajardsilogic@0
|
65 if (!programs.empty()) {
|
lbajardsilogic@0
|
66
|
lbajardsilogic@0
|
67 std::string currentProgram = m_plugin->getCurrentProgram();
|
lbajardsilogic@0
|
68
|
lbajardsilogic@0
|
69 QComboBox *programCombo = new QComboBox;
|
lbajardsilogic@0
|
70 programCombo->setMaxVisibleItems(20);
|
lbajardsilogic@0
|
71
|
lbajardsilogic@0
|
72 for (size_t i = 0; i < programs.size(); ++i) {
|
lbajardsilogic@0
|
73 programCombo->addItem(programs[i].c_str());
|
lbajardsilogic@0
|
74 if (programs[i] == currentProgram) {
|
lbajardsilogic@0
|
75 programCombo->setCurrentIndex(i);
|
lbajardsilogic@0
|
76 }
|
lbajardsilogic@0
|
77 }
|
lbajardsilogic@0
|
78
|
lbajardsilogic@0
|
79 m_layout->addWidget(new QLabel(tr("Program")), 0, 0);
|
lbajardsilogic@0
|
80 m_layout->addWidget(programCombo, 0, 1, 1, 2);
|
lbajardsilogic@0
|
81
|
lbajardsilogic@0
|
82 connect(programCombo, SIGNAL(currentIndexChanged(const QString &)),
|
lbajardsilogic@0
|
83 this, SLOT(programComboChanged(const QString &)));
|
lbajardsilogic@0
|
84
|
lbajardsilogic@0
|
85 offset = 1;
|
lbajardsilogic@0
|
86 }
|
lbajardsilogic@0
|
87
|
lbajardsilogic@0
|
88 for (size_t i = 0; i < params.size(); ++i) {
|
lbajardsilogic@0
|
89
|
lbajardsilogic@0
|
90 QString identifier = params[i].identifier.c_str();
|
lbajardsilogic@0
|
91 QString name = params[i].name.c_str();
|
lbajardsilogic@0
|
92 QString unit = params[i].unit.c_str();
|
lbajardsilogic@0
|
93
|
lbajardsilogic@0
|
94 float min = params[i].minValue;
|
lbajardsilogic@0
|
95 float max = params[i].maxValue;
|
lbajardsilogic@0
|
96 float deft = params[i].defaultValue;
|
lbajardsilogic@0
|
97 float value = m_plugin->getParameter(params[i].identifier);
|
lbajardsilogic@0
|
98
|
lbajardsilogic@0
|
99 float qtz = 0.0;
|
lbajardsilogic@0
|
100 if (params[i].isQuantized) qtz = params[i].quantizeStep;
|
lbajardsilogic@0
|
101
|
lbajardsilogic@0
|
102 std::vector<std::string> valueNames = params[i].valueNames;
|
lbajardsilogic@0
|
103
|
lbajardsilogic@0
|
104 // construct an integer range
|
lbajardsilogic@0
|
105
|
lbajardsilogic@0
|
106 int imin = 0, imax = 100;
|
lbajardsilogic@0
|
107
|
lbajardsilogic@0
|
108 if (qtz > 0.0) {
|
lbajardsilogic@0
|
109 imax = int((max - min) / qtz);
|
lbajardsilogic@0
|
110 } else {
|
lbajardsilogic@0
|
111 qtz = (max - min) / 100.0;
|
lbajardsilogic@0
|
112 }
|
lbajardsilogic@0
|
113
|
lbajardsilogic@0
|
114 //!!! would be nice to ensure the default value corresponds to
|
lbajardsilogic@0
|
115 // an integer!
|
lbajardsilogic@0
|
116
|
lbajardsilogic@0
|
117 QLabel *label = new QLabel(name);
|
lbajardsilogic@0
|
118 if (params[i].description != "") {
|
lbajardsilogic@0
|
119 label->setToolTip(params[i].description.c_str());
|
lbajardsilogic@0
|
120 }
|
lbajardsilogic@0
|
121 m_layout->addWidget(label, i + offset, 0);
|
lbajardsilogic@0
|
122
|
lbajardsilogic@0
|
123 ParamRec rec;
|
lbajardsilogic@0
|
124 rec.param = params[i];
|
lbajardsilogic@0
|
125 rec.dial = 0;
|
lbajardsilogic@0
|
126 rec.spin = 0;
|
lbajardsilogic@0
|
127 rec.check = 0;
|
lbajardsilogic@0
|
128 rec.combo = 0;
|
lbajardsilogic@0
|
129
|
lbajardsilogic@0
|
130 if (params[i].isQuantized && !valueNames.empty()) {
|
lbajardsilogic@0
|
131
|
lbajardsilogic@0
|
132 QComboBox *combobox = new QComboBox;
|
lbajardsilogic@0
|
133 combobox->setObjectName(identifier);
|
lbajardsilogic@0
|
134 for (unsigned int j = 0; j < valueNames.size(); ++j) {
|
lbajardsilogic@0
|
135 combobox->addItem(valueNames[j].c_str());
|
lbajardsilogic@0
|
136 if ((unsigned int)(lrintf(fabsf((value - min) / qtz))) == j) {
|
lbajardsilogic@0
|
137 combobox->setCurrentIndex(j);
|
lbajardsilogic@0
|
138 }
|
lbajardsilogic@0
|
139 }
|
lbajardsilogic@0
|
140 connect(combobox, SIGNAL(activated(int)),
|
lbajardsilogic@0
|
141 this, SLOT(dialChanged(int)));
|
lbajardsilogic@0
|
142 m_layout->addWidget(combobox, i + offset, 1, 1, 2);
|
lbajardsilogic@0
|
143 rec.combo = combobox;
|
lbajardsilogic@0
|
144
|
lbajardsilogic@0
|
145 } else if (min == 0.0 && max == 1.0 && qtz == 1.0) {
|
lbajardsilogic@0
|
146
|
lbajardsilogic@0
|
147 QCheckBox *checkbox = new QCheckBox;
|
lbajardsilogic@0
|
148 checkbox->setObjectName(identifier);
|
lbajardsilogic@0
|
149 checkbox->setCheckState(value == 0.0 ? Qt::Unchecked : Qt::Checked);
|
lbajardsilogic@0
|
150 connect(checkbox, SIGNAL(stateChanged(int)),
|
lbajardsilogic@0
|
151 this, SLOT(checkBoxChanged(int)));
|
lbajardsilogic@0
|
152 m_layout->addWidget(checkbox, i + offset, 2);
|
lbajardsilogic@0
|
153 rec.check = checkbox;
|
lbajardsilogic@0
|
154
|
lbajardsilogic@0
|
155 } else {
|
lbajardsilogic@0
|
156
|
lbajardsilogic@0
|
157 AudioDial *dial = new AudioDial;
|
lbajardsilogic@0
|
158 dial->setObjectName(name);
|
lbajardsilogic@0
|
159 dial->setMinimum(imin);
|
lbajardsilogic@0
|
160 dial->setMaximum(imax);
|
lbajardsilogic@0
|
161 dial->setPageStep(1);
|
lbajardsilogic@0
|
162 dial->setNotchesVisible((imax - imin) <= 12);
|
lbajardsilogic@0
|
163 dial->setDefaultValue(lrintf((deft - min) / qtz));
|
lbajardsilogic@0
|
164 dial->setValue(lrintf((value - min) / qtz));
|
lbajardsilogic@0
|
165 dial->setFixedWidth(32);
|
lbajardsilogic@0
|
166 dial->setFixedHeight(32);
|
lbajardsilogic@0
|
167 dial->setRangeMapper(new LinearRangeMapper
|
lbajardsilogic@0
|
168 (imin, imax, min, max, unit));
|
lbajardsilogic@0
|
169 dial->setShowToolTip(true);
|
lbajardsilogic@0
|
170 connect(dial, SIGNAL(valueChanged(int)),
|
lbajardsilogic@0
|
171 this, SLOT(dialChanged(int)));
|
lbajardsilogic@0
|
172 m_layout->addWidget(dial, i + offset, 1);
|
lbajardsilogic@0
|
173
|
lbajardsilogic@0
|
174 QDoubleSpinBox *spinbox = new QDoubleSpinBox;
|
lbajardsilogic@0
|
175 spinbox->setObjectName(identifier);
|
lbajardsilogic@0
|
176 spinbox->setMinimum(min);
|
lbajardsilogic@0
|
177 spinbox->setMaximum(max);
|
lbajardsilogic@0
|
178 spinbox->setSuffix(QString(" %1").arg(unit));
|
lbajardsilogic@0
|
179 spinbox->setSingleStep(qtz);
|
lbajardsilogic@0
|
180 spinbox->setValue(value);
|
lbajardsilogic@0
|
181 spinbox->setDecimals(4);
|
lbajardsilogic@0
|
182 connect(spinbox, SIGNAL(valueChanged(double)),
|
lbajardsilogic@0
|
183 this, SLOT(spinBoxChanged(double)));
|
lbajardsilogic@0
|
184 m_layout->addWidget(spinbox, i + offset, 2);
|
lbajardsilogic@0
|
185 rec.dial = dial;
|
lbajardsilogic@0
|
186 rec.spin = spinbox;
|
lbajardsilogic@0
|
187 }
|
lbajardsilogic@0
|
188
|
lbajardsilogic@0
|
189 m_params[identifier] = rec;
|
lbajardsilogic@0
|
190 m_nameMap[name] = identifier;
|
lbajardsilogic@0
|
191 }
|
lbajardsilogic@0
|
192 }
|
lbajardsilogic@0
|
193
|
lbajardsilogic@0
|
194 void
|
lbajardsilogic@0
|
195 PluginParameterBox::dialChanged(int ival)
|
lbajardsilogic@0
|
196 {
|
lbajardsilogic@0
|
197 QObject *obj = sender();
|
lbajardsilogic@0
|
198 QString identifier = obj->objectName();
|
lbajardsilogic@0
|
199
|
lbajardsilogic@0
|
200 if (m_params.find(identifier) == m_params.end() &&
|
lbajardsilogic@0
|
201 m_nameMap.find(identifier) != m_nameMap.end()) {
|
lbajardsilogic@0
|
202 identifier = m_nameMap[identifier];
|
lbajardsilogic@0
|
203 }
|
lbajardsilogic@0
|
204
|
lbajardsilogic@0
|
205 if (m_params.find(identifier) == m_params.end()) {
|
lbajardsilogic@0
|
206 std::cerr << "WARNING: PluginParameterBox::dialChanged: Unknown parameter \"" << identifier.toStdString() << "\"" << std::endl;
|
lbajardsilogic@0
|
207 return;
|
lbajardsilogic@0
|
208 }
|
lbajardsilogic@0
|
209
|
lbajardsilogic@0
|
210 Vamp::PluginBase::ParameterDescriptor params = m_params[identifier].param;
|
lbajardsilogic@0
|
211
|
lbajardsilogic@0
|
212 float min = params.minValue;
|
lbajardsilogic@0
|
213 float max = params.maxValue;
|
lbajardsilogic@0
|
214
|
lbajardsilogic@0
|
215 float newValue;
|
lbajardsilogic@0
|
216
|
lbajardsilogic@0
|
217 float qtz = 0.0;
|
lbajardsilogic@0
|
218 if (params.isQuantized) qtz = params.quantizeStep;
|
lbajardsilogic@0
|
219
|
lbajardsilogic@0
|
220 AudioDial *ad = dynamic_cast<AudioDial *>(obj);
|
lbajardsilogic@0
|
221
|
lbajardsilogic@0
|
222 if (ad && ad->rangeMapper()) {
|
lbajardsilogic@0
|
223
|
lbajardsilogic@0
|
224 newValue = ad->mappedValue();
|
lbajardsilogic@0
|
225 if (newValue < min) newValue = min;
|
lbajardsilogic@0
|
226 if (newValue > max) newValue = max;
|
lbajardsilogic@0
|
227 if (qtz != 0.0) {
|
lbajardsilogic@0
|
228 ival = lrintf((newValue - min) / qtz);
|
lbajardsilogic@0
|
229 newValue = min + ival * qtz;
|
lbajardsilogic@0
|
230 }
|
lbajardsilogic@0
|
231
|
lbajardsilogic@0
|
232 } else {
|
lbajardsilogic@0
|
233 if (qtz == 0.0) {
|
lbajardsilogic@0
|
234 qtz = (max - min) / 100.0;
|
lbajardsilogic@0
|
235 }
|
lbajardsilogic@0
|
236 newValue = min + ival * qtz;
|
lbajardsilogic@0
|
237 }
|
lbajardsilogic@0
|
238
|
lbajardsilogic@0
|
239 QDoubleSpinBox *spin = m_params[identifier].spin;
|
lbajardsilogic@0
|
240 if (spin) {
|
lbajardsilogic@0
|
241 spin->blockSignals(true);
|
lbajardsilogic@0
|
242 spin->setValue(newValue);
|
lbajardsilogic@0
|
243 spin->blockSignals(false);
|
lbajardsilogic@0
|
244 }
|
lbajardsilogic@0
|
245
|
lbajardsilogic@0
|
246 m_plugin->setParameter(identifier.toStdString(), newValue);
|
lbajardsilogic@0
|
247
|
lbajardsilogic@0
|
248 emit pluginConfigurationChanged(PluginXml(m_plugin).toXmlString());
|
lbajardsilogic@0
|
249 }
|
lbajardsilogic@0
|
250
|
lbajardsilogic@0
|
251 void
|
lbajardsilogic@0
|
252 PluginParameterBox::checkBoxChanged(int state)
|
lbajardsilogic@0
|
253 {
|
lbajardsilogic@0
|
254 QObject *obj = sender();
|
lbajardsilogic@0
|
255 QString identifier = obj->objectName();
|
lbajardsilogic@0
|
256
|
lbajardsilogic@0
|
257 if (m_params.find(identifier) == m_params.end() &&
|
lbajardsilogic@0
|
258 m_nameMap.find(identifier) != m_nameMap.end()) {
|
lbajardsilogic@0
|
259 identifier = m_nameMap[identifier];
|
lbajardsilogic@0
|
260 }
|
lbajardsilogic@0
|
261
|
lbajardsilogic@0
|
262 if (m_params.find(identifier) == m_params.end()) {
|
lbajardsilogic@0
|
263 std::cerr << "WARNING: PluginParameterBox::checkBoxChanged: Unknown parameter \"" << identifier.toStdString() << "\"" << std::endl;
|
lbajardsilogic@0
|
264 return;
|
lbajardsilogic@0
|
265 }
|
lbajardsilogic@0
|
266
|
lbajardsilogic@0
|
267 Vamp::PluginBase::ParameterDescriptor params = m_params[identifier].param;
|
lbajardsilogic@0
|
268
|
lbajardsilogic@0
|
269 if (state) m_plugin->setParameter(identifier.toStdString(), 1.0);
|
lbajardsilogic@0
|
270 else m_plugin->setParameter(identifier.toStdString(), 0.0);
|
lbajardsilogic@0
|
271
|
lbajardsilogic@0
|
272 emit pluginConfigurationChanged(PluginXml(m_plugin).toXmlString());
|
lbajardsilogic@0
|
273 }
|
lbajardsilogic@0
|
274
|
lbajardsilogic@0
|
275 void
|
lbajardsilogic@0
|
276 PluginParameterBox::spinBoxChanged(double value)
|
lbajardsilogic@0
|
277 {
|
lbajardsilogic@0
|
278 QObject *obj = sender();
|
lbajardsilogic@0
|
279 QString identifier = obj->objectName();
|
lbajardsilogic@0
|
280
|
lbajardsilogic@0
|
281 if (m_params.find(identifier) == m_params.end() &&
|
lbajardsilogic@0
|
282 m_nameMap.find(identifier) != m_nameMap.end()) {
|
lbajardsilogic@0
|
283 identifier = m_nameMap[identifier];
|
lbajardsilogic@0
|
284 }
|
lbajardsilogic@0
|
285
|
lbajardsilogic@0
|
286 if (m_params.find(identifier) == m_params.end()) {
|
lbajardsilogic@0
|
287 std::cerr << "WARNING: PluginParameterBox::spinBoxChanged: Unknown parameter \"" << identifier.toStdString() << "\"" << std::endl;
|
lbajardsilogic@0
|
288 return;
|
lbajardsilogic@0
|
289 }
|
lbajardsilogic@0
|
290
|
lbajardsilogic@0
|
291 Vamp::PluginBase::ParameterDescriptor params = m_params[identifier].param;
|
lbajardsilogic@0
|
292
|
lbajardsilogic@0
|
293 float min = params.minValue;
|
lbajardsilogic@0
|
294 float max = params.maxValue;
|
lbajardsilogic@0
|
295
|
lbajardsilogic@0
|
296 float qtz = 0.0;
|
lbajardsilogic@0
|
297 if (params.isQuantized) qtz = params.quantizeStep;
|
lbajardsilogic@0
|
298
|
lbajardsilogic@0
|
299 if (qtz > 0.0) {
|
lbajardsilogic@0
|
300 int step = int((value - min) / qtz);
|
lbajardsilogic@0
|
301 value = min + step * qtz;
|
lbajardsilogic@0
|
302 }
|
lbajardsilogic@0
|
303
|
lbajardsilogic@0
|
304 int imax = 100;
|
lbajardsilogic@0
|
305
|
lbajardsilogic@0
|
306 if (qtz > 0.0) {
|
lbajardsilogic@0
|
307 imax = int((max - min) / qtz);
|
lbajardsilogic@0
|
308 } else {
|
lbajardsilogic@0
|
309 qtz = (max - min) / 100.0;
|
lbajardsilogic@0
|
310 }
|
lbajardsilogic@0
|
311
|
lbajardsilogic@0
|
312 int ival = lrintf((value - min) / qtz);
|
lbajardsilogic@0
|
313
|
lbajardsilogic@0
|
314 AudioDial *dial = m_params[identifier].dial;
|
lbajardsilogic@0
|
315 if (dial) {
|
lbajardsilogic@0
|
316 dial->blockSignals(true);
|
lbajardsilogic@0
|
317 dial->setValue(ival);
|
lbajardsilogic@0
|
318 dial->blockSignals(false);
|
lbajardsilogic@0
|
319 }
|
lbajardsilogic@0
|
320
|
lbajardsilogic@0
|
321 m_plugin->setParameter(identifier.toStdString(), value);
|
lbajardsilogic@0
|
322
|
lbajardsilogic@0
|
323 emit pluginConfigurationChanged(PluginXml(m_plugin).toXmlString());
|
lbajardsilogic@0
|
324 }
|
lbajardsilogic@0
|
325
|
lbajardsilogic@0
|
326 void
|
lbajardsilogic@0
|
327 PluginParameterBox::programComboChanged(const QString &newProgram)
|
lbajardsilogic@0
|
328 {
|
lbajardsilogic@0
|
329 m_plugin->selectProgram(newProgram.toStdString());
|
lbajardsilogic@0
|
330
|
lbajardsilogic@0
|
331 for (std::map<QString, ParamRec>::iterator i = m_params.begin();
|
lbajardsilogic@0
|
332 i != m_params.end(); ++i) {
|
lbajardsilogic@0
|
333
|
lbajardsilogic@0
|
334 Vamp::PluginBase::ParameterDescriptor ¶m = i->second.param;
|
lbajardsilogic@0
|
335 float value = m_plugin->getParameter(param.identifier);
|
lbajardsilogic@0
|
336
|
lbajardsilogic@0
|
337 if (i->second.spin) {
|
lbajardsilogic@0
|
338 i->second.spin->blockSignals(true);
|
lbajardsilogic@0
|
339 i->second.spin->setValue(value);
|
lbajardsilogic@0
|
340 i->second.spin->blockSignals(false);
|
lbajardsilogic@0
|
341 }
|
lbajardsilogic@0
|
342
|
lbajardsilogic@0
|
343 if (i->second.dial) {
|
lbajardsilogic@0
|
344
|
lbajardsilogic@0
|
345 float min = param.minValue;
|
lbajardsilogic@0
|
346 float max = param.maxValue;
|
lbajardsilogic@0
|
347
|
lbajardsilogic@0
|
348 float qtz = 0.0;
|
lbajardsilogic@0
|
349 if (param.isQuantized) qtz = param.quantizeStep;
|
lbajardsilogic@0
|
350
|
lbajardsilogic@0
|
351 if (qtz == 0.0) {
|
lbajardsilogic@0
|
352 qtz = (max - min) / 100.0;
|
lbajardsilogic@0
|
353 }
|
lbajardsilogic@0
|
354
|
lbajardsilogic@0
|
355 i->second.dial->blockSignals(true);
|
lbajardsilogic@0
|
356 i->second.dial->setValue(lrintf((value - min) / qtz));
|
lbajardsilogic@0
|
357 i->second.dial->blockSignals(false);
|
lbajardsilogic@0
|
358 }
|
lbajardsilogic@0
|
359
|
lbajardsilogic@0
|
360 if (i->second.combo) {
|
lbajardsilogic@0
|
361 i->second.combo->blockSignals(true);
|
lbajardsilogic@0
|
362 i->second.combo->setCurrentIndex(lrintf(value));
|
lbajardsilogic@0
|
363 i->second.combo->blockSignals(false);
|
lbajardsilogic@0
|
364 }
|
lbajardsilogic@0
|
365 }
|
lbajardsilogic@0
|
366
|
lbajardsilogic@0
|
367 emit pluginConfigurationChanged(PluginXml(m_plugin).toXmlString());
|
lbajardsilogic@0
|
368 }
|
lbajardsilogic@0
|
369
|