diff options
author | Robin Gareus <robin@gareus.org> | 2016-05-10 20:11:08 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-05-10 20:54:11 +0200 |
commit | cc0abf4ef57a1211ea856e6ddd869d3953bef86d (patch) | |
tree | 218cf3c2db0758e95ce1ef4d4158749ab1005796 /gtk2_ardour/plugin_pin_dialog.cc | |
parent | d53d9b01abd5f2000554846c44c791b82f30dc00 (diff) |
add route-ui pin-manager
Diffstat (limited to 'gtk2_ardour/plugin_pin_dialog.cc')
-rw-r--r-- | gtk2_ardour/plugin_pin_dialog.cc | 70 |
1 files changed, 65 insertions, 5 deletions
diff --git a/gtk2_ardour/plugin_pin_dialog.cc b/gtk2_ardour/plugin_pin_dialog.cc index 4962c1aee4..070f6da064 100644 --- a/gtk2_ardour/plugin_pin_dialog.cc +++ b/gtk2_ardour/plugin_pin_dialog.cc @@ -21,7 +21,6 @@ #include <gtkmm/table.h> #include <gtkmm/frame.h> -#include <gtkmm/box.h> #include <gtkmm/label.h> #include "pbd/replace_all.h" @@ -1982,18 +1981,79 @@ PluginPinWidget::Control::control_changed () _ignore_ui_adjustment = false; } + + PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::PluginInsert> pi) : ArdourWindow (string_compose (_("Pin Configuration: %1"), pi->name ())) - , ppw (pi) { - add (ppw); + ppw.push_back (PluginPinWidgetPtr(new PluginPinWidget (pi))); + add (*ppw.back()); } -PluginPinDialog::~PluginPinDialog () { } +PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::Route> r) + : ArdourWindow (string_compose (_("Pin Configuration: %1"), r->name ())) + , _route (r) +{ + vbox = manage (new VBox ()); + add (*vbox); + vbox->show (); + + _route->foreach_processor (sigc::mem_fun (*this, &PluginPinDialog::add_processor)); + + _route->processors_changed.connect ( + _route_connections, invalidator (*this), boost::bind (&PluginPinDialog::route_processors_changed, this, _1), gui_context() + ); + + _route->DropReferences.connect ( + _route_connections, invalidator (*this), boost::bind (&PluginPinDialog::route_going_away, this), gui_context() + ); +} void PluginPinDialog::set_session (ARDOUR::Session *s) { SessionHandlePtr::set_session (s); - ppw.set_session (s); + for (PluginPinWidgetList::iterator i = ppw.begin(); i != ppw.end(); ++i) { + (*i)->set_session (s); + } +} + +void +PluginPinDialog::route_processors_changed (ARDOUR::RouteProcessorChange) +{ + ppw.clear (); + remove (); + vbox = manage (new VBox ()); + add (*vbox); + vbox->show (); + _route->foreach_processor (sigc::mem_fun (*this, &PluginPinDialog::add_processor)); +} + +void +PluginPinDialog::route_going_away () +{ + ppw.clear (); + _route.reset (); + remove (); +} + +void +PluginPinDialog::add_processor (boost::weak_ptr<Processor> p) +{ + boost::shared_ptr<Processor> proc = p.lock (); + if (!proc || !proc->display_to_user ()) { + return; + } + boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (proc); + if (pi) { + ppw.push_back (PluginPinWidgetPtr(new PluginPinWidget (pi))); + vbox->pack_start (*ppw.back()); + } else { + HBox* hbox = manage (new HBox ()); + hbox->pack_start (*manage (new HSeparator ())); + hbox->pack_start (*manage (new Label (proc->display_name ()))); + hbox->pack_start (*manage (new HSeparator ())); + vbox->pack_start (*hbox); + hbox->show_all (); + } } |