20 #include "plugin/PluginXml.h" 21 #include "plugin/RealTimePluginInstance.h" 23 #include "base/RangeMapper.h" 25 #include <QDoubleSpinBox> 26 #include <QGridLayout> 54 Vamp::PluginBase::ParameterList params =
m_plugin->getParameterDescriptors();
61 (
new QLabel(tr(
"This plugin has no adjustable parameters.")),
69 std::string currentProgram =
m_plugin->getCurrentProgram();
75 for (
size_t i = 0; i <
m_programs.size(); ++i) {
82 m_layout->addWidget(
new QLabel(tr(
"Program")), 0, 0);
85 connect(
m_programCombo, SIGNAL(currentIndexChanged(
const QString &)),
91 for (
size_t i = 0; i < params.size(); ++i) {
93 QString identifier = params[i].identifier.c_str();
94 QString name = params[i].name.c_str();
95 QString unit = params[i].unit.c_str();
97 float min = params[i].minValue;
98 float max = params[i].maxValue;
99 float deft = params[i].defaultValue;
100 float value =
m_plugin->getParameter(params[i].identifier);
102 int hint = PortHint::NoHint;
103 RealTimePluginInstance *rtpi = dynamic_cast<RealTimePluginInstance *>
106 hint = rtpi->getParameterDisplayHint(i);
110 if (params[i].isQuantized) qtz = params[i].quantizeStep;
115 std::vector<std::string> valueNames = params[i].valueNames;
119 int imin = 0, imax = 100;
121 if (!(hint & PortHint::Logarithmic)) {
123 imax = lrintf((max - min) / qtz);
125 qtz = (max - min) / 100.0;
132 QLabel *label =
new QLabel(name);
133 if (params[i].description !=
"") {
134 label->setToolTip(QString(
"<qt>%1</qt>")
135 .arg(params[i].description.c_str())
136 .replace(
"\n",
"<br>"));
138 m_layout->addWidget(label, i + offset, 0);
141 rec.
param = params[i];
147 if (params[i].isQuantized && !valueNames.empty()) {
149 QComboBox *combobox =
new QComboBox;
150 combobox->setObjectName(identifier);
151 for (
unsigned int j = 0; j < valueNames.size(); ++j) {
152 combobox->addItem(valueNames[j].c_str());
153 if ((
unsigned int)(lrintf(fabsf((value - min) / qtz))) == j) {
154 combobox->setCurrentIndex(j);
157 connect(combobox, SIGNAL(activated(
int)),
159 m_layout->addWidget(combobox, i + offset, 1, 1, 2);
160 rec.
combo = combobox;
162 }
else if (min == 0.0 && max == 1.0 && qtz == 1.0) {
164 QCheckBox *checkbox =
new QCheckBox;
165 checkbox->setObjectName(identifier);
166 checkbox->setCheckState(value < 0.5 ? Qt::Unchecked : Qt::Checked);
167 connect(checkbox, SIGNAL(stateChanged(
int)),
169 m_layout->addWidget(checkbox, i + offset, 2);
170 rec.
check = checkbox;
175 dial->setObjectName(name);
176 dial->setMinimum(imin);
177 dial->setMaximum(imax);
178 dial->setPageStep(1);
179 dial->setNotchesVisible((imax - imin) <= 12);
182 dial->setFixedWidth(32);
183 dial->setFixedHeight(32);
185 if (hint & PortHint::Logarithmic) {
186 rm =
new LogRangeMapper(imin, imax, min, max, unit);
188 rm =
new LinearRangeMapper(imin, imax, min, max, unit);
192 dial->
setValue(rm->getPositionForValue(value));
194 connect(dial, SIGNAL(valueChanged(
int)),
196 m_layout->addWidget(dial, i + offset, 1);
198 QDoubleSpinBox *spinbox =
new QDoubleSpinBox;
199 spinbox->setObjectName(identifier);
200 spinbox->setMinimum(min);
201 spinbox->setMaximum(max);
202 spinbox->setSuffix(QString(
" %1").arg(unit));
203 if (qtz != 0) spinbox->setSingleStep(qtz);
204 spinbox->setValue(value);
205 spinbox->setDecimals(4);
206 connect(spinbox, SIGNAL(valueChanged(
double)),
208 m_layout->addWidget(spinbox, i + offset, 2);
221 QObject *obj = sender();
222 QString identifier = obj->objectName();
230 cerr <<
"WARNING: PluginParameterBox::dialChanged: Unknown parameter \"" << identifier <<
"\"" << endl;
234 Vamp::PluginBase::ParameterDescriptor params =
m_params[identifier].param;
236 float min = params.minValue;
237 float max = params.maxValue;
242 if (params.isQuantized) qtz = params.quantizeStep;
244 AudioDial *ad = dynamic_cast<AudioDial *>(obj);
249 if (newValue < min) newValue = min;
250 if (newValue > max) newValue = max;
252 ival = lrintf((newValue - min) / qtz);
253 newValue = min + ival * qtz;
258 qtz = (max - min) / 100.0;
260 newValue = min + ival * qtz;
265 QDoubleSpinBox *spin =
m_params[identifier].spin;
267 spin->blockSignals(
true);
268 spin->setValue(newValue);
269 spin->blockSignals(
false);
274 m_plugin->setParameter(identifier.toStdString(), newValue);
284 QObject *obj = sender();
285 QString identifier = obj->objectName();
293 cerr <<
"WARNING: PluginParameterBox::checkBoxChanged: Unknown parameter \"" << identifier <<
"\"" << endl;
297 Vamp::PluginBase::ParameterDescriptor params =
m_params[identifier].param;
299 if (state)
m_plugin->setParameter(identifier.toStdString(), 1.0);
300 else m_plugin->setParameter(identifier.toStdString(), 0.0);
310 QObject *obj = sender();
311 QString identifier = obj->objectName();
319 cerr <<
"WARNING: PluginParameterBox::spinBoxChanged: Unknown parameter \"" << identifier <<
"\"" << endl;
323 Vamp::PluginBase::ParameterDescriptor params =
m_params[identifier].param;
325 float min = params.minValue;
326 float max = params.maxValue;
329 if (params.isQuantized) qtz = params.quantizeStep;
332 int step = lrintf((value - min) / qtz);
333 value = min + step * qtz;
341 qtz = (max - min) / 100.0;
344 int ival = lrintf((value - min) / qtz);
348 dial->blockSignals(
true);
354 dial->blockSignals(
false);
357 SVDEBUG <<
"setting plugin parameter \"" << identifier <<
"\" to value " << value << endl;
359 m_plugin->setParameter(identifier.toStdString(), value);
369 m_plugin->selectProgram(newProgram.toStdString());
371 for (std::map<QString, ParamRec>::iterator i =
m_params.begin();
374 Vamp::PluginBase::ParameterDescriptor ¶m = i->second.param;
375 float value =
m_plugin->getParameter(param.identifier);
377 if (i->second.spin) {
378 i->second.spin->blockSignals(
true);
379 i->second.spin->setValue(value);
380 i->second.spin->blockSignals(
false);
383 if (i->second.dial) {
385 float min = param.minValue;
386 float max = param.maxValue;
389 if (param.isQuantized) qtz = param.quantizeStep;
392 qtz = (max - min) / 100.0;
395 i->second.dial->blockSignals(
true);
396 i->second.dial->setValue(lrintf((value - min) / qtz));
397 i->second.dial->blockSignals(
false);
400 if (i->second.combo) {
401 i->second.combo->blockSignals(
true);
402 i->second.combo->setCurrentIndex(lrintf(value));
403 i->second.combo->blockSignals(
false);
406 if (i->second.check) {
407 i->second.check->blockSignals(
true);
408 i->second.check->setCheckState(value < 0.5 ? Qt::Unchecked : Qt::Checked);
409 i->second.check->blockSignals(
false);
421 std::string currentProgram =
m_plugin->getCurrentProgram();
423 for (
size_t i = 0; i <
m_programs.size(); ++i) {
Vamp::PluginBase * m_plugin
void checkBoxChanged(int)
QComboBox * m_programCombo
void setDefaultValue(int defaultValue)
void spinBoxChanged(double)
float mappedValue() const
void setMappedValue(float mappedValue)
PluginParameterBox(Vamp::PluginBase *, QWidget *parent=0)
void pluginConfigurationChanged(QString)
std::map< QString, ParamRec > m_params
std::map< QString, QString > m_nameMap
AudioDial is a nicer-looking QDial that by default reacts to mouse movement on horizontal and vertica...
void programComboChanged(const QString &)
Vamp::PluginBase::ProgramList m_programs
Vamp::PluginBase::ParameterDescriptor param
void setRangeMapper(RangeMapper *mapper)
void updateProgramCombo()
const RangeMapper * rangeMapper() const
void setShowToolTip(bool show)