diff widgets/PluginParameterBox.cpp @ 74:195ad6178ef8

* Support latest changes to Vamp API (value names for parameters, FFT alignment, value -> bin terminology change)
author Chris Cannam
date Wed, 05 Apr 2006 16:52:30 +0000
parents 72fa239a4880
children 967193b6c7aa
line wrap: on
line diff
--- a/widgets/PluginParameterBox.cpp	Mon Apr 03 17:18:27 2006 +0000
+++ b/widgets/PluginParameterBox.cpp	Wed Apr 05 16:52:30 2006 +0000
@@ -95,6 +95,8 @@
         float qtz = 0.0;
         if (params[i].isQuantized) qtz = params[i].quantizeStep;
 
+        std::vector<std::string> valueNames = params[i].valueNames;
+
         // construct an integer range
 
         int imin = 0, imax = 100;
@@ -116,8 +118,24 @@
         rec.dial = 0;
         rec.spin = 0;
         rec.check = 0;
+        rec.combo = 0;
         
-        if (min == 0.0 && max == 1.0 && qtz == 1.0) {
+        if (params[i].isQuantized && !valueNames.empty()) {
+            
+            QComboBox *combobox = new QComboBox;
+            combobox->setObjectName(name);
+            for (unsigned int j = 0; j < valueNames.size(); ++j) {
+                combobox->addItem(valueNames[j].c_str());
+                if (lrintf((value - min) / qtz) == j) {
+                    combobox->setCurrentIndex(j);
+                }
+            }
+            connect(combobox, SIGNAL(activated(int)),
+                    this, SLOT(dialChanged(int)));
+            m_layout->addWidget(combobox, i + offset, 1, 1, 2);
+            rec.combo = combobox;
+
+        } else if (min == 0.0 && max == 1.0 && qtz == 1.0) {
             
             QCheckBox *checkbox = new QCheckBox;
             checkbox->setObjectName(name);
@@ -135,8 +153,8 @@
             dial->setMaximum(imax);
             dial->setPageStep(1);
             dial->setNotchesVisible((imax - imin) <= 12);
-            dial->setDefaultValue(int((deft - min) / qtz));
-            dial->setValue(int((value - min) / qtz));
+            dial->setDefaultValue(lrintf((deft - min) / qtz));
+            dial->setValue(lrintf((value - min) / qtz));
             dial->setFixedWidth(32);
             dial->setFixedHeight(32);
             connect(dial, SIGNAL(valueChanged(int)),
@@ -293,9 +311,15 @@
             }
 
             i->second.dial->blockSignals(true);
-            i->second.dial->setValue(int((value - min) / qtz));
+            i->second.dial->setValue(lrintf((value - min) / qtz));
             i->second.dial->blockSignals(false);
         }
+
+        if (i->second.combo) {
+            i->second.combo->blockSignals(true);
+            i->second.combo->setCurrentIndex(value);
+            i->second.combo->blockSignals(false);
+        }
     }
 
     emit pluginConfigurationChanged(PluginXml(m_plugin).toXmlString());