- /* See if there any named values for our input value */
- control_ui->scale_points = desc.scale_points;
-
- /* If this parameter is an integer, work out the number of distinct values
- it can take on (assuming that lower and upper values are allowed).
- */
- int const steps = desc.integer_step ? (desc.upper - desc.lower + 1) / desc.step : 0;
-
- if (control_ui->scale_points && ((steps && int (control_ui->scale_points->size()) == steps) || desc.enumeration)) {
-
- /* Either:
- * a) There is a label for each possible value of this input, or
- * b) This port is marked as being an enumeration.
- */
-
- std::vector<std::string> labels;
- for (
- ARDOUR::ScalePoints::const_iterator i = control_ui->scale_points->begin();
- i != control_ui->scale_points->end();
- ++i) {
-
- labels.push_back(i->first);
- }
-
- // TODO use ArdourDropDown
- control_ui->combo = new Gtk::ComboBoxText();
- set_popdown_strings(*control_ui->combo, labels);
- control_ui->combo->signal_changed().connect(
- sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_combo_changed),
- control_ui));
- mcontrol->Changed.connect(control_connections, invalidator(*this),
- boost::bind(&GenericPluginUI::ui_parameter_changed,
- this, control_ui),
- gui_context());
-
- if (use_knob) {
- control_ui->knobtable = manage (new Table());
- control_ui->pack_start(*control_ui->knobtable, true, false);
- control_ui->knobtable->attach (control_ui->label, 0, 1, 0, 1);
- control_ui->knobtable->attach (*control_ui->combo, 0, 1, 1, 2);
- } else {
- control_ui->pack_start(control_ui->label, true, true);
- control_ui->pack_start(*control_ui->combo, false, true);
- }
-
- update_control_display(control_ui);
-
- return control_ui;
- }
-