diff options
author | Robin Gareus <robin@gareus.org> | 2016-04-05 01:38:31 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-04-05 01:38:31 +0200 |
commit | 79794650c10dc7ca027ea74153968dc829cd726e (patch) | |
tree | c1852e9d0cb53d62ad410279a7735c034b4a86a2 /gtk2_ardour/plugin_pin_dialog.cc | |
parent | db2a55f88a1fe849d57ead54288a78501aa9bda1 (diff) |
non-modal sidechain i/o selector
Diffstat (limited to 'gtk2_ardour/plugin_pin_dialog.cc')
-rw-r--r-- | gtk2_ardour/plugin_pin_dialog.cc | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/gtk2_ardour/plugin_pin_dialog.cc b/gtk2_ardour/plugin_pin_dialog.cc index a802e9ecf2..2d89d125f8 100644 --- a/gtk2_ardour/plugin_pin_dialog.cc +++ b/gtk2_ardour/plugin_pin_dialog.cc @@ -26,7 +26,6 @@ #include "ardour/plugin.h" -#include "io_selector.h" #include "plugin_pin_dialog.h" #include "gui_thread.h" #include "ui_config.h" @@ -58,6 +57,7 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::PluginInsert> pi) , _min_width (300) , _position_valid (false) , _ignore_updates (false) + , _sidechain_selector (0) { assert (pi->owner ()); // Route @@ -180,6 +180,7 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::PluginInsert> pi) PluginPinDialog::~PluginPinDialog () { + delete _sidechain_selector; } void @@ -202,6 +203,11 @@ PluginPinDialog::plugin_reconfigured () _tgl_sidechain.set_active (_pi->has_sidechain ()); _edt_sidechain.set_sensitive (_pi->has_sidechain ()); // && _session + if (!_pi->has_sidechain () && _sidechain_selector) { + delete _sidechain_selector; + _sidechain_selector = 0; + } + // calc minimum width const uint32_t max_ports = std::max (_ins.n_total (), _out.n_total ()); const uint32_t max_pins = std::max ((_sinks * _n_plugins).n_total (), (_sources * _n_plugins).n_total ()); @@ -695,9 +701,16 @@ void PluginPinDialog::connect_sidechain () { if (!_session) { return; } - // TODO non-modal would be cooler ... :) - SideChainUI sc (*this, _session, _pi->sidechain_input ()); - sc.run (); + + if (_sidechain_selector == 0) { + _sidechain_selector = new IOSelectorWindow (_session, _pi->sidechain_input ()); + } + + if (_sidechain_selector->is_visible()) { + _sidechain_selector->get_toplevel()->get_window()->raise(); + } else { + _sidechain_selector->present (); + } } void @@ -728,14 +741,3 @@ PluginPinDialog::add_remove_port_clicked (bool add, ARDOUR::DataType dt) out.set (dt, out.get (dt) + (add ? 1 : -1)); _route ()->customize_plugin_insert (_pi, _n_plugins, out); } - -SideChainUI::SideChainUI (Gtk::Window& p, Session* session, boost::shared_ptr<IO> sc) - : ArdourDialog (p, string (_("Sidechain ")) + sc->name (), true) -{ - HBox* hbox = manage (new HBox); - IOSelector * io = Gtk::manage (new IOSelector (this, session, sc)); - hbox->pack_start (*io, true, true); - get_vbox ()->pack_start (*hbox, true, true); - io->show (); - hbox->show (); -} |