diff options
author | Robin Gareus <robin@gareus.org> | 2016-01-25 21:38:26 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-02-23 15:41:41 +0100 |
commit | 28017b4751cb5b4a8806f74b269730e8d2e37e8c (patch) | |
tree | 0869375c168bf981240291694b908d5947a95a96 /gtk2_ardour/processor_box.cc | |
parent | e54c77e642edeed4a9e5f760cfff110ee3012585 (diff) |
Add GUI to instantiate Lua DSP Processors
Diffstat (limited to 'gtk2_ardour/processor_box.cc')
-rw-r--r-- | gtk2_ardour/processor_box.cc | 60 |
1 files changed, 58 insertions, 2 deletions
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 95b21c826c..64a69b7856 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -30,6 +30,7 @@ #include "pbd/convert.h" #include <glibmm/miscutils.h> +#include <glibmm/fileutils.h> #include <gtkmm/messagedialog.h> @@ -45,6 +46,8 @@ #include "ardour/audioengine.h" #include "ardour/internal_return.h" #include "ardour/internal_send.h" +#include "ardour/luaproc.h" +#include "ardour/luascripting.h" #include "ardour/meter.h" #include "ardour/panner_shell.h" #include "ardour/plugin_insert.h" @@ -72,6 +75,7 @@ #include "public_editor.h" #include "return_ui.h" #include "route_processor_selection.h" +#include "script_selector.h" #include "send_ui.h" #include "timers.h" #include "tooltips.h" @@ -136,7 +140,7 @@ ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr<Processo } { boost::shared_ptr<PluginInsert> pi = boost::dynamic_pointer_cast<PluginInsert> (_processor); - if (pi && pi->plugin()) { + if (pi && pi->plugin() && pi->plugin()->get_info()->type != ARDOUR::Lua) { _plugin_preset_pointer = PluginPresetPtr (new PluginPreset (pi->plugin()->get_info())); } } @@ -1738,6 +1742,48 @@ ProcessorBox::choose_plugin () /** @return true if an error occurred, otherwise false */ bool +ProcessorBox::choose_lua () +{ + LuaScriptInfoPtr spi; + + ScriptSelector ss (_("Add Lua DSP Processor"), LuaScriptInfo::DSP); + switch (ss.run ()) { + case Gtk::RESPONSE_ACCEPT: + spi = ss.script(); + break; + default: + return true; + } + + PluginPtr p; + try { + LuaPluginInfoPtr lpi (new LuaPluginInfo(spi)); + p = (lpi->load (*_session)); + } catch (...) { + string msg = _( + "Failed to instantiate Lua DSP Processor,\n" + "probably because the script is invalid (no dsp function)."); + MessageDialog am (msg); + am.run (); + return true; + } + + boost::shared_ptr<Processor> processor (new PluginInsert (*_session, p)); + + Route::ProcessorStreams err_streams; + if (_route->add_processor_by_index (processor, _placement, &err_streams, Config->get_new_plugins_active ())) { + string msg = _( + "Failed to add Lua DSP Processor at the given position,\n" + "probably because the I/O configuration of the plugins\n" + "could not match the configuration of this track."); + MessageDialog am (msg); + am.run (); + } + return false; +} + +/** @return true if an error occurred, otherwise false */ +bool ProcessorBox::use_plugins (const SelectedPlugins& plugins) { for (SelectedPlugins::const_iterator p = plugins.begin(); p != plugins.end(); ++p) { @@ -2515,7 +2561,6 @@ ProcessorBox::paste_processor_state (const XMLNodeList& nlist, boost::shared_ptr } p.reset (pi); - } else { /* XXX its a bit limiting to assume that everything else is a plugin. @@ -2802,6 +2847,8 @@ ProcessorBox::register_actions () processor_box_actions.register_action (popup_act_grp, X_("newplugin"), _("New Plugin"), sigc::ptr_fun (ProcessorBox::rb_choose_plugin)); + act = processor_box_actions.register_action (popup_act_grp, X_("newlua"), _("New Lua Proc"), + sigc::ptr_fun (ProcessorBox::rb_choose_lua)); act = processor_box_actions.register_action (popup_act_grp, X_("newinsert"), _("New Insert"), sigc::ptr_fun (ProcessorBox::rb_choose_insert)); ActionManager::engine_sensitive_actions.push_back (act); @@ -2892,6 +2939,15 @@ ProcessorBox::rb_choose_plugin () } void +ProcessorBox::rb_choose_lua () +{ + if (_current_processor_box == 0) { + return; + } + _current_processor_box->choose_lua (); +} + +void ProcessorBox::rb_choose_insert () { if (_current_processor_box == 0) { |