From 6dadac73ab08b119dd9ddf62a8ca07d98e2e72df Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 20 Mar 2023 23:14:06 +0100 Subject: [PATCH] Add context-menu options to disconnect plugin-pins --- gtk2_ardour/plugin_pin_dialog.cc | 23 ++++++++++++++++++++++- gtk2_ardour/plugin_pin_dialog.h | 8 ++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/gtk2_ardour/plugin_pin_dialog.cc b/gtk2_ardour/plugin_pin_dialog.cc index 1a00fd305f..736a6d943f 100644 --- a/gtk2_ardour/plugin_pin_dialog.cc +++ b/gtk2_ardour/plugin_pin_dialog.cc @@ -114,7 +114,11 @@ PluginPinWidget::PluginPinWidget (boost::shared_ptr pi) Menu_Helpers::MenuList& citems = reset_menu.items (); reset_menu.set_name ("ArdourContextMenu"); citems.clear (); - citems.push_back (Menu_Helpers::MenuElem (_("Reset"), sigc::mem_fun (*this, &PluginPinWidget::reset_mapping))); + citems.push_back (Menu_Helpers::MenuElem (_("Reset to default"), sigc::mem_fun (*this, &PluginPinWidget::reset_mapping))); + citems.push_back (Menu_Helpers::SeparatorElem ()); + citems.push_back (Menu_Helpers::MenuElem (_("Disconnect Inputs"), sigc::bind (sigc::mem_fun (*this, &PluginPinWidget::clear_mapping), DisconnectIn))); + citems.push_back (Menu_Helpers::MenuElem (_("Disconnect Outputs"), sigc::bind (sigc::mem_fun (*this, &PluginPinWidget::clear_mapping), DisconnectOut))); + citems.push_back (Menu_Helpers::MenuElem (_("Disconnect All"), sigc::bind (sigc::mem_fun (*this, &PluginPinWidget::clear_mapping), DisconnectAll))); _pm_size_group = SizeGroup::create (SIZE_GROUP_BOTH); _add_plugin.set_tweaks (ArdourButton::Square); @@ -1646,6 +1650,23 @@ PluginPinWidget::reset_mapping () _pi->reset_map (); } +void +PluginPinWidget::clear_mapping (ClearMode m) +{ + ChanMapping map; + for (uint32_t n = 0; n < _n_plugins; ++n) { + if (m & DisconnectIn) { + _pi->set_input_map (n, map); + } + if (m & DisconnectOut) { + _pi->set_output_map (n, map); + } + } + if (m == DisconnectAll) { + _pi->set_thru_map (map); + } +} + void PluginPinWidget::select_output_preset (uint32_t n_audio) { diff --git a/gtk2_ardour/plugin_pin_dialog.h b/gtk2_ardour/plugin_pin_dialog.h index bee3533262..b2310067ca 100644 --- a/gtk2_ardour/plugin_pin_dialog.h +++ b/gtk2_ardour/plugin_pin_dialog.h @@ -57,6 +57,13 @@ private: Output } CtrlType; + typedef enum { + DisconnectIn = 1, + DisconnectOut = 2, + DisconnectAll = 3, // includes thru + } ClearMode; + + struct _CtrlElem { _CtrlElem (CtrlType c, ARDOUR::DataType d, uint32_t i, uint32_t p, uint32_t b, bool s) : ct (c), dt (d), id (i), ip (p), bn (b), sc (s) {} @@ -153,6 +160,7 @@ private: static std::string port_label (const std::string&, bool); void reset_mapping (); + void clear_mapping (ClearMode); void reset_configuration (); void toggle_sidechain (); void connect_sidechain ();