From 79794650c10dc7ca027ea74153968dc829cd726e Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 5 Apr 2016 01:38:31 +0200 Subject: non-modal sidechain i/o selector --- gtk2_ardour/plugin_pin_dialog.cc | 32 +++++++++++++++++--------------- gtk2_ardour/plugin_pin_dialog.h | 10 ++-------- 2 files changed, 19 insertions(+), 23 deletions(-) (limited to 'gtk2_ardour') 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 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 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 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 (); -} diff --git a/gtk2_ardour/plugin_pin_dialog.h b/gtk2_ardour/plugin_pin_dialog.h index 003441aac2..f959a062fa 100644 --- a/gtk2_ardour/plugin_pin_dialog.h +++ b/gtk2_ardour/plugin_pin_dialog.h @@ -29,7 +29,7 @@ #include "ardour_button.h" #include "ardour_window.h" -#include "ardour_dialog.h" +#include "io_selector.h" class PluginPinDialog : public ArdourWindow { @@ -131,13 +131,7 @@ private: bool _position_valid; bool _ignore_updates; ARDOUR::Route* _route () { return static_cast (_pi->owner ()); } + IOSelectorWindow *_sidechain_selector; }; -class SideChainUI: public ArdourDialog -{ - public: - SideChainUI (Gtk::Window&, ARDOUR::Session*, boost::shared_ptr); -}; - - #endif -- cgit v1.2.3