mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 06:44:57 +01:00
pin connection GUI for variable I/O plugins
This commit is contained in:
parent
c30b47f0eb
commit
b3e12d6566
2 changed files with 78 additions and 20 deletions
|
|
@ -58,6 +58,10 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::PluginInsert> pi)
|
|||
, _tgl_sidechain (_("Side Chain"), ArdourButton::led_default_elements)
|
||||
, _add_plugin (_("+"))
|
||||
, _del_plugin (_("-"))
|
||||
, _add_input_audio (_("+"))
|
||||
, _del_input_audio (_("-"))
|
||||
, _add_input_midi (_("+"))
|
||||
, _del_input_midi (_("-"))
|
||||
, _add_output_audio (_("+"))
|
||||
, _del_output_audio (_("-"))
|
||||
, _add_output_midi (_("+"))
|
||||
|
|
@ -109,8 +113,15 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::PluginInsert> pi)
|
|||
_pm_size_group = SizeGroup::create (SIZE_GROUP_BOTH);
|
||||
_add_plugin.set_tweaks (ArdourButton::Square);
|
||||
_del_plugin.set_tweaks (ArdourButton::Square);
|
||||
_pm_size_group->add_widget (_add_plugin);
|
||||
_pm_size_group->add_widget (_del_plugin);
|
||||
if (_pi->plugin (0)->get_info()->reconfigurable_io ()) {
|
||||
_pm_size_group->add_widget (_add_input_audio);
|
||||
_pm_size_group->add_widget (_del_input_audio);
|
||||
_pm_size_group->add_widget (_add_input_midi);
|
||||
_pm_size_group->add_widget (_del_input_midi);
|
||||
} else {
|
||||
_pm_size_group->add_widget (_add_plugin);
|
||||
_pm_size_group->add_widget (_del_plugin);
|
||||
}
|
||||
_pm_size_group->add_widget (_add_output_audio);
|
||||
_pm_size_group->add_widget (_del_output_audio);
|
||||
_pm_size_group->add_widget (_add_output_midi);
|
||||
|
|
@ -130,14 +141,34 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::PluginInsert> pi)
|
|||
/* left side */
|
||||
tl->pack_start (_set_config, false, false);
|
||||
|
||||
box = manage (new HBox ());
|
||||
box->set_border_width (2);
|
||||
box->pack_start (_add_plugin, true, false);
|
||||
box->pack_start (_del_plugin, true, false);
|
||||
f = manage (new Frame ());
|
||||
f->set_label (_("Instances"));
|
||||
f->add (*box);
|
||||
tl->pack_start (*f, false, false);
|
||||
if (_pi->plugin (0)->get_info()->reconfigurable_io ()) {
|
||||
box = manage (new HBox ());
|
||||
box->set_border_width (2);
|
||||
box->pack_start (_add_input_audio, true, false);
|
||||
box->pack_start (_del_input_audio, true, false);
|
||||
f = manage (new Frame ());
|
||||
f->set_label (_("Audio Input Pins"));
|
||||
f->add (*box);
|
||||
tl->pack_start (*f, false, false);
|
||||
|
||||
box = manage (new HBox ());
|
||||
box->set_border_width (2);
|
||||
box->pack_start (_add_input_midi, true, false);
|
||||
box->pack_start (_del_input_midi, true, false);
|
||||
f = manage (new Frame ());
|
||||
f->set_label (_("MIDI Input Pins"));
|
||||
f->add (*box);
|
||||
tl->pack_start (*f, false, false);
|
||||
} else {
|
||||
box = manage (new HBox ());
|
||||
box->set_border_width (2);
|
||||
box->pack_start (_add_plugin, true, false);
|
||||
box->pack_start (_del_plugin, true, false);
|
||||
f = manage (new Frame ());
|
||||
f->set_label (_("Instances"));
|
||||
f->add (*box);
|
||||
tl->pack_start (*f, false, false);
|
||||
}
|
||||
|
||||
box = manage (new HBox ());
|
||||
box->set_border_width (2);
|
||||
|
|
@ -210,10 +241,16 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::PluginInsert> pi)
|
|||
_add_plugin.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_plugin_clicked), true));
|
||||
_del_plugin.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_plugin_clicked), false));
|
||||
|
||||
_add_input_audio.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_inpin_clicked), true, DataType::AUDIO));
|
||||
_del_input_audio.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_inpin_clicked), false, DataType::AUDIO));
|
||||
_add_input_midi.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_inpin_clicked), true, DataType::MIDI));
|
||||
_del_input_midi.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_inpin_clicked), false, DataType::MIDI));
|
||||
|
||||
_add_output_audio.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_port_clicked), true, DataType::AUDIO));
|
||||
_del_output_audio.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_port_clicked), false, DataType::AUDIO));
|
||||
_add_output_midi.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_port_clicked), true, DataType::MIDI));
|
||||
_del_output_midi.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_port_clicked), false, DataType::MIDI));
|
||||
|
||||
_add_sc_audio.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_sidechain_port), DataType::AUDIO));
|
||||
_add_sc_midi.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_sidechain_port), DataType::MIDI));
|
||||
|
||||
|
|
@ -287,30 +324,33 @@ PluginPinDialog::plugin_reconfigured ()
|
|||
if (_pi->custom_cfg ()) {
|
||||
_set_config.set_active (true);
|
||||
_add_plugin.set_sensitive (true);
|
||||
_del_plugin.set_sensitive (_n_plugins > 1);
|
||||
_add_output_audio.set_sensitive (true);
|
||||
_add_output_midi.set_sensitive (true);
|
||||
_del_plugin.set_sensitive (_n_plugins > 1);
|
||||
_del_output_audio.set_sensitive (_out.n_audio () > 0 && _out.n_total () > 1);
|
||||
_del_output_midi.set_sensitive (_out.n_midi () > 0 && _out.n_total () > 1);
|
||||
_add_input_audio.set_sensitive (true);
|
||||
_add_input_midi.set_sensitive (true);
|
||||
_del_input_audio.set_sensitive (_sinks.n_audio () > 0 && _sinks.n_total () > 1);
|
||||
_del_input_midi.set_sensitive (_sinks.n_midi () > 0 && _sinks.n_total () > 1);
|
||||
_out_presets.set_sensitive (false);
|
||||
_out_presets.set_text (_("Manual"));
|
||||
} else {
|
||||
_set_config.set_active (false);
|
||||
_add_plugin.set_sensitive (false);
|
||||
_del_plugin.set_sensitive (false);
|
||||
_add_input_audio.set_sensitive (false);
|
||||
_add_input_midi.set_sensitive (false);
|
||||
_del_input_audio.set_sensitive (false);
|
||||
_del_input_midi.set_sensitive (false);
|
||||
_add_output_audio.set_sensitive (false);
|
||||
_add_output_midi.set_sensitive (false);
|
||||
_del_plugin.set_sensitive (false);
|
||||
_del_output_audio.set_sensitive (false);
|
||||
_del_output_midi.set_sensitive (false);
|
||||
_out_presets.set_sensitive (true);
|
||||
refill_output_presets ();
|
||||
}
|
||||
|
||||
if (_pi->plugin (0)->get_info()->type == ARDOUR::AudioUnit) {
|
||||
_add_plugin.set_sensitive (false);
|
||||
_del_plugin.set_sensitive (false);
|
||||
}
|
||||
|
||||
if (!_pi->has_sidechain () && _sidechain_selector) {
|
||||
delete _sidechain_selector;
|
||||
_sidechain_selector = 0;
|
||||
|
|
@ -1563,7 +1603,7 @@ PluginPinDialog::reset_configuration ()
|
|||
if (_set_config.get_active ()) {
|
||||
_route ()->reset_plugin_insert (_pi);
|
||||
} else {
|
||||
_route ()->customize_plugin_insert (_pi, _n_plugins, _out);
|
||||
_route ()->customize_plugin_insert (_pi, _n_plugins, _out, _sinks);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1586,8 +1626,9 @@ PluginPinDialog::add_remove_plugin_clicked (bool add)
|
|||
{
|
||||
if (_session && _session->actively_recording ()) { return; }
|
||||
ChanCount out = _out;
|
||||
ChanCount sinks = _sinks;
|
||||
assert (add || _n_plugins > 0);
|
||||
_route ()->customize_plugin_insert (_pi, _n_plugins + (add ? 1 : -1), out);
|
||||
_route ()->customize_plugin_insert (_pi, _n_plugins + (add ? 1 : -1), out, sinks);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1595,9 +1636,21 @@ PluginPinDialog::add_remove_port_clicked (bool add, ARDOUR::DataType dt)
|
|||
{
|
||||
if (_session && _session->actively_recording ()) { return; }
|
||||
ChanCount out = _out;
|
||||
ChanCount sinks = _sinks;
|
||||
assert (add || out.get (dt) > 0);
|
||||
out.set (dt, out.get (dt) + (add ? 1 : -1));
|
||||
_route ()->customize_plugin_insert (_pi, _n_plugins, out);
|
||||
_route ()->customize_plugin_insert (_pi, _n_plugins, out, sinks);
|
||||
}
|
||||
|
||||
void
|
||||
PluginPinDialog::add_remove_inpin_clicked (bool add, ARDOUR::DataType dt)
|
||||
{
|
||||
if (_session && _session->actively_recording ()) { return; }
|
||||
ChanCount out = _out;
|
||||
ChanCount sinks = _sinks;
|
||||
assert (add || sinks.get (dt) > 0);
|
||||
sinks.set (dt, sinks.get (dt) + (add ? 1 : -1));
|
||||
_route ()->customize_plugin_insert (_pi, _n_plugins, out, sinks);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -96,6 +96,10 @@ private:
|
|||
ArdourButton _tgl_sidechain;
|
||||
ArdourButton _add_plugin;
|
||||
ArdourButton _del_plugin;
|
||||
ArdourButton _add_input_audio;
|
||||
ArdourButton _del_input_audio;
|
||||
ArdourButton _add_input_midi;
|
||||
ArdourButton _del_input_midi;
|
||||
ArdourButton _add_output_audio;
|
||||
ArdourButton _del_output_audio;
|
||||
ArdourButton _add_output_midi;
|
||||
|
|
@ -143,6 +147,7 @@ private:
|
|||
void connect_sidechain ();
|
||||
void add_remove_plugin_clicked (bool);
|
||||
void add_remove_port_clicked (bool, ARDOUR::DataType);
|
||||
void add_remove_inpin_clicked (bool, ARDOUR::DataType);
|
||||
void add_sidechain_port (ARDOUR::DataType);
|
||||
void select_output_preset (uint32_t n_audio);
|
||||
void handle_input_action (const CtrlElem &, const CtrlElem &);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue