X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fgeneric_pluginui.cc;h=a655203920743c9cb4f04bbed673e1ce55718d3a;hb=af2ee3c8564c7d60cadb130b8c7ad1f4cddd2216;hp=010dfe52376ff5add98592ce161a997eb574cff0;hpb=d599be115df673bc5833527491788afa1156c7f5;p=ardour.git diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index 010dfe5237..a655203920 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -222,7 +222,7 @@ void GenericPluginUI::build () { std::vector control_uis; - bool grid = true; + bool grid = plugin->parameter_count() > 0; // Build a ControlUI for each control port for (size_t i = 0; i < plugin->parameter_count(); ++i) { @@ -525,6 +525,8 @@ GenericPluginUI::automatic_layout (const std::vector& control_uis) } else { delete output_table; } + show_all(); + } void @@ -555,7 +557,7 @@ GenericPluginUI::ControlUI::ControlUI (const Evoral::Parameter& p) , meterinfo (0) , knobtable (0) { - automate_button.set_name ("PluginAutomateButton"); + automate_button.set_name ("plugin automation state button"); set_tooltip (automate_button, _("Automation control")); /* XXX translators: use a string here that will be at least as long @@ -563,7 +565,7 @@ GenericPluginUI::ControlUI::ControlUI (const Evoral::Parameter& p) below). be sure to include a descender. */ - set_size_request_to_display_given_text (automate_button, _("Mgnual"), 12, 6); + automate_button.set_sizing_text(_("Mgnual")); ignore_change = false; update_pending = false; @@ -664,8 +666,6 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter& param, control_ui->label.set_name ("PluginParameterLabel"); control_ui->set_spacing (5); - Gtk::Requisition req (control_ui->automate_button.size_request()); - if (is_input) { if (desc.datatype == Variant::PATH) { @@ -740,7 +740,7 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter& param, * destructor, and manage() reports object hierarchy * ambiguity. */ - control_ui->controller = AutomationController::create(insert, mcontrol->parameter(), desc, mcontrol, use_knob); + control_ui->controller = AutomationController::create(mcontrol->parameter(), desc, mcontrol, use_knob); /* Control UI's don't need the rapid timer workaround */ control_ui->controller->stop_updating (); @@ -760,16 +760,20 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter& param, control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::integer_printer), control_ui)); } } else if (desc.toggled) { - control_ui->controller->set_size_request (req.height, req.height); + ArdourButton* but = dynamic_cast (control_ui->controller->widget()); + assert(but); + but->set_tweaks(ArdourButton::Square); } else if (use_knob) { - control_ui->controller->set_size_request (req.height * 1.5, req.height * 1.5); + /* Delay size request so that styles are gotten right */ + control_ui->controller->widget()->signal_size_request().connect( + sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::knob_size_request), control_ui)); } else { - control_ui->controller->set_size_request (200, req.height); + control_ui->controller->set_size_request (200, -1); control_ui->controller->set_name (X_("ProcessorControlSlider")); } if (!desc.integer_step && !desc.toggled && use_knob) { - control_ui->spin_box = manage (new ArdourSpinner (mcontrol, adj, insert)); + control_ui->spin_box = manage (new ArdourSpinner (mcontrol, adj)); } adj->set_value (mcontrol->internal_to_interface(value)); @@ -777,7 +781,7 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter& param, } if (use_knob) { - set_size_request_to_display_given_text (control_ui->automate_button, "M", 2, 2); + control_ui->automate_button.set_sizing_text("M"); control_ui->label.set_alignment (0.5, 0.5); control_ui->knobtable = manage (new Table()); @@ -793,7 +797,6 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter& param, } else if (control_ui->spin_box) { ArdourKnob* knob = dynamic_cast(control_ui->controller->widget ()); knob->set_tooltip_prefix (desc.label + ": "); - knob->set_printer (insert); Alignment *align = manage (new Alignment (.5, .5, 0, 0)); align->add (*control_ui->controller); control_ui->knobtable->attach (*align, 0, 1, 0, 1, EXPAND, SHRINK, 1, 2); @@ -844,7 +847,7 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter& param, input_controls_with_automation.push_back (control_ui); } - if (desc.toggled) { + if (desc.toggled && !control_ui->combo) { control_ui->button = true; ArdourButton* but = dynamic_cast(control_ui->controller->widget ()); assert (but); @@ -875,7 +878,10 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter& param, control_ui->vbox = manage (new VBox); control_ui->vbox->set_spacing(3); - if (desc.integer_step || desc.enumeration) { + if (desc.unit == ParameterDescriptor::MIDI_NOTE) { + control_ui->vbox->pack_end (*control_ui->display, false, false); + control_ui->vbox->pack_end (control_ui->label, false, false); + } else if (desc.integer_step || desc.enumeration) { control_ui->vbox->pack_end (*control_ui->display, false, false); control_ui->vbox->pack_end (control_ui->label, false, false); } else { @@ -935,6 +941,15 @@ GenericPluginUI::build_control_ui (const Evoral::Parameter& param, return control_ui; } +void +GenericPluginUI::knob_size_request(Gtk::Requisition* req, ControlUI* cui) { + Gtk::Requisition astate_req (cui->automate_button.size_request()); + const int size = (int) (astate_req.height * 1.5); + req->width = max(req->width, size); + req->height = max(req->height, size); +} + + bool GenericPluginUI::astate_button_event (GdkEventButton* ev, ControlUI* cui) { @@ -972,9 +987,7 @@ void GenericPluginUI::set_all_automation (AutoState as) { for (vector::iterator i = input_controls_with_automation.begin(); i != input_controls_with_automation.end(); ++i) { - if ((*i)->controller || (*i)->button) { - set_automation_state (as, (*i)); - } + set_automation_state (as, (*i)); } } @@ -1075,7 +1088,10 @@ GenericPluginUI::output_update () for (vector::iterator i = output_controls.begin(); i != output_controls.end(); ++i) { float val = plugin->get_parameter ((*i)->parameter().id()); char buf[32]; - snprintf (buf, sizeof(buf), "%.2f", val); + boost::shared_ptr c = insert->control_output ((*i)->parameter().id()); + const std::string& str = ARDOUR::value_as_string(c->desc(), Variant(val)); + size_t len = str.copy(buf, 31); + buf[len] = '\0'; (*i)->display_label->set_text (buf); /* autoscaling for the meter */