Add plugin presets to processor-box context menu
This commit is contained in:
@@ -787,6 +787,7 @@
|
||||
<separator/>
|
||||
<menuitem action='controls'/>
|
||||
<menuitem action='send_options'/>
|
||||
<menuitem action='presets'/>
|
||||
<separator/>
|
||||
#ifndef MIXBUS
|
||||
<menu action="disk-io-menu">
|
||||
|
||||
@@ -821,6 +821,40 @@ ProcessorEntry::build_controls_menu ()
|
||||
return menu;
|
||||
}
|
||||
|
||||
void
|
||||
ProcessorEntry::plugin_preset_selected (ARDOUR::Plugin::PresetRecord preset)
|
||||
{
|
||||
boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (_processor);
|
||||
assert (pi);
|
||||
if (!preset.label.empty()) {
|
||||
_pi->load_preset (preset);
|
||||
} else {
|
||||
pi->plugin->clear_preset();
|
||||
}
|
||||
}
|
||||
|
||||
Menu*
|
||||
ProcessorEntry::build_presets_menu ()
|
||||
{
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (_processor);
|
||||
if (!pi) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
vector<ARDOUR::Plugin::PresetRecord> presets = pi->plugin()->get_presets();
|
||||
|
||||
Menu* menu = manage (new Menu);
|
||||
MenuList& items = menu->items ();
|
||||
|
||||
for (auto const& p : presets) {
|
||||
items.push_back (MenuElem (p.label, sigc::bind (sigc::mem_fun (*this, &ProcessorEntry::plugin_preset_selected), p)));
|
||||
}
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
void
|
||||
ProcessorEntry::toggle_inline_display_visibility ()
|
||||
{
|
||||
@@ -2328,7 +2362,6 @@ ProcessorBox::show_processor_menu (int arg)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Gtk::MenuItem* send_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/ProcessorMenu/send_options"));
|
||||
if (send_menu_item) {
|
||||
if (single_selection && !_route->is_monitor()) {
|
||||
@@ -2346,6 +2379,23 @@ ProcessorBox::show_processor_menu (int arg)
|
||||
}
|
||||
}
|
||||
|
||||
Gtk::MenuItem* presets_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/ProcessorMenu/presets"));
|
||||
if (presets_menu_item) {
|
||||
if (single_selection) {
|
||||
Menu* m = single_selection->build_presets_menu ();
|
||||
if (m && !m->items().empty()) {
|
||||
presets_menu_item->set_submenu (*m);
|
||||
presets_menu_item->set_sensitive (true);
|
||||
} else {
|
||||
delete m;
|
||||
gtk_menu_item_set_submenu (presets_menu_item->gobj(), 0);
|
||||
presets_menu_item->set_sensitive (false);
|
||||
}
|
||||
} else {
|
||||
presets_menu_item->set_sensitive (false);
|
||||
}
|
||||
}
|
||||
|
||||
/* Sensitise actions as approprioate */
|
||||
|
||||
const bool sensitive = !processor_display.selection().empty() && ! stub_processor_selected ();
|
||||
@@ -3981,6 +4031,7 @@ ProcessorBox::register_actions ()
|
||||
|
||||
ActionManager::register_action (processor_box_actions, X_("controls"), _("Controls"));
|
||||
ActionManager::register_action (processor_box_actions, X_("send_options"), _("Send Options"));
|
||||
ActionManager::register_action (processor_box_actions, X_("presets"), _("Presets"));
|
||||
|
||||
ActionManager::register_action (processor_box_actions, X_("clear"), _("Clear (all)"),
|
||||
sigc::ptr_fun (ProcessorBox::rb_clear));
|
||||
|
||||
@@ -174,6 +174,7 @@ public:
|
||||
std::string state_id () const;
|
||||
Gtk::Menu* build_controls_menu ();
|
||||
Gtk::Menu* build_send_options_menu ();
|
||||
Gtk::Menu* build_presets_menu ();
|
||||
|
||||
protected:
|
||||
ArdourWidgets::ArdourButton _button;
|
||||
@@ -256,6 +257,7 @@ private:
|
||||
|
||||
void toggle_panner_link ();
|
||||
void toggle_allow_feedback ();
|
||||
void plugin_preset_selected (ARDOUR::Plugin::PresetRecord);
|
||||
|
||||
class PluginInlineDisplay : public PluginDisplay {
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user