main_contents.pack_start (*constraint_hbox, false, false);
if (is_scrollable ) {
- scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+ scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
scroller.set_name ("PluginEditor");
scroller_view.set_name("PluginEditor");
scroller_view.add (hpacker);
pi->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&GenericPluginUI::processor_active_changed, this, boost::weak_ptr<Processor>(pi)), gui_context());
- if (!pi->active()) {
- bypass_button.set_active_state (Gtkmm2ext::Active);
- } else {
- bypass_button.unset_active_state ();
- }
+ bypass_button.set_active (!pi->active());
prefheight = 0;
build ();
// don't lock to avoid deadlock because we're triggered by
// AutomationControl::Changed() while the automation lock is taken
- switch (insert->get_parameter_automation_state (cui->parameter())
- & (Off|Play|Touch|Write)) {
- case Off:
+ switch (insert->get_parameter_automation_state (cui->parameter()) & (ARDOUR::Off|Play|Touch|Write)) {
+ case ARDOUR::Off:
cui->automate_button.set_label (S_("Automation|Manual"));
break;
case Play:
}
-static void integer_printer (char buf[32], Adjustment &adj, void */*arg*/)
+bool
+GenericPluginUI::integer_printer (char buf[32], Adjustment &adj, ControlUI* cui)
{
- snprintf (buf, 32, "%.0f", adj.get_value());
+ float const v = adj.get_value ();
+
+ if (cui->scale_points) {
+ Plugin::ScalePoints::const_iterator i = cui->scale_points->begin ();
+ while (i != cui->scale_points->end() && i->second != v) {
+ ++i;
+ }
+
+ if (i != cui->scale_points->end ()) {
+ snprintf (buf, 32, "%s", i->first.c_str());
+ return true;
+ }
+ }
+
+ snprintf (buf, 32, "%.0f", v);
+ return true;
}
void
if (plugin->parameter_is_input(port_index)) {
- /* Build a combo box */
+ /* See if there any named values for our input value */
+ control_ui->scale_points = plugin->get_scale_points (port_index);
+
+ /* 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;
- control_ui->combo_map = plugin->get_scale_points (port_index);
+ if (control_ui->scale_points && steps && control_ui->scale_points->size() == steps) {
+ /* There is a label for each possible value of this input, so build a combo box */
- if (control_ui->combo_map) {
std::vector<std::string> labels;
for (
- ARDOUR::Plugin::ScalePoints::const_iterator i = control_ui->combo_map->begin();
- i != control_ui->combo_map->end();
+ ARDOUR::Plugin::ScalePoints::const_iterator i = control_ui->scale_points->begin();
+ i != control_ui->scale_points->end();
++i) {
labels.push_back(i->first);
Adjustment* adj = control_ui->controller->adjustment();
boost::shared_ptr<PluginInsert::PluginControl> pc = boost::dynamic_pointer_cast<PluginInsert::PluginControl> (control_ui->control);
- adj->set_lower (pc->user_to_ui (desc.lower));
- adj->set_upper (pc->user_to_ui (desc.upper));
+ adj->set_lower (pc->internal_to_interface (desc.lower));
+ adj->set_upper (pc->internal_to_interface (desc.upper));
adj->set_step_increment (desc.step);
adj->set_page_increment (desc.largestep);
if (desc.integer_step) {
control_ui->clickbox = new ClickBox (adj, "PluginUIClickBox");
Gtkmm2ext::set_size_request_to_display_given_text (*control_ui->clickbox, "g9999999", 2, 2);
- control_ui->clickbox->set_print_func (integer_printer, 0);
+ control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::integer_printer), control_ui));
} else {
//sigc::slot<void,char*,uint32_t> pslot = sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::print_parameter), (uint32_t) port_index);
}
- adj->set_value (pc->user_to_ui (plugin->get_parameter (port_index)));
+ adj->set_value (pc->internal_to_interface (plugin->get_parameter (port_index)));
/* XXX memory leak: SliderController not destroyed by ControlUI
destructor, and manage() reports object hierarchy
items.clear ();
items.push_back (MenuElem (S_("Automation|Manual"),
- sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Off, cui)));
+ sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) ARDOUR::Off, cui)));
items.push_back (MenuElem (_("Play"),
sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Play, cui)));
items.push_back (MenuElem (_("Write"),
cui->ignore_change++;
- if (cui->combo && cui->combo_map) {
- for (ARDOUR::Plugin::ScalePoints::iterator it = cui->combo_map->begin(); it != cui->combo_map->end(); ++it) {
+ if (cui->combo && cui->scale_points) {
+ for (ARDOUR::Plugin::ScalePoints::iterator it = cui->scale_points->begin(); it != cui->scale_points->end(); ++it) {
if (it->second == val) {
cui->combo->set_active_text(it->first);
break;
void
GenericPluginUI::control_combo_changed (ControlUI* cui)
{
- if (!cui->ignore_change && cui->combo_map) {
+ if (!cui->ignore_change && cui->scale_points) {
string value = cui->combo->get_active_text();
- insert->automation_control (cui->parameter())->set_value ((*cui->combo_map)[value]);
+ insert->automation_control (cui->parameter())->set_value ((*cui->scale_points)[value]);
}
}