From b3c95e8946b9f631752571e60eef99961bb62814 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 21 Sep 2022 22:19:32 +0200 Subject: [PATCH] Allow to create presets from processor context-menu --- gtk2_ardour/processor_box.cc | 35 +++++++++++++++++++++++++++++++++++ gtk2_ardour/processor_box.h | 1 + 2 files changed, 36 insertions(+) diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index b4600d5978..ecc9012af5 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -833,6 +833,35 @@ ProcessorEntry::plugin_preset_selected (ARDOUR::Plugin::PresetRecord preset) } } +void +ProcessorEntry::plugin_preset_add () +{ + /* compare to PlugUIBase::add_plugin_setting */ + boost::shared_ptr pi = boost::dynamic_pointer_cast (_processor); + boost::shared_ptr plugin = pi->plugin (); + + NewPluginPresetDialog d (plugin, _("New Preset")); + + Gtk::Window* tlw = dynamic_cast (_parent->get_toplevel ()); + d.set_keep_above (true); + if (tlw) { + d.set_transient_for (*tlw); + } + + switch (d.run ()) { + case Gtk::RESPONSE_ACCEPT: + if (d.name().empty()) { + break; + } + + Plugin::PresetRecord const r = plugin->save_preset (d.name()); + if (!r.uri.empty ()) { + plugin->Plugin::load_preset (r); + } + break; + } +} + Menu* ProcessorEntry::build_presets_menu () { @@ -847,6 +876,12 @@ ProcessorEntry::build_presets_menu () Menu* menu = manage (new Menu); MenuList& items = menu->items (); + if (pi->ui_elements () & PlugInsertBase::PluginPreset) { + items.push_back (MenuElem (_("New Preset..."), sigc::mem_fun (*this, &ProcessorEntry::plugin_preset_add))); + if (!presets.empty ()) { + items.push_back (SeparatorElem ()); + } + } for (auto const& p : presets) { items.push_back (MenuElem (p.label, sigc::bind (sigc::mem_fun (*this, &ProcessorEntry::plugin_preset_selected), p))); diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 7b27b11525..7189eb4950 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -258,6 +258,7 @@ private: void toggle_panner_link (); void toggle_allow_feedback (); void plugin_preset_selected (ARDOUR::Plugin::PresetRecord); + void plugin_preset_add (); class PluginInlineDisplay : public PluginDisplay { public: