diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index 3b103e1cf1..b05989fe7a 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -607,6 +607,7 @@
+
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
+#include
#include
@@ -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 pi = boost::dynamic_pointer_cast (_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()));
}
}
@@ -1736,6 +1740,48 @@ ProcessorBox::choose_plugin ()
_get_plugin_selector()->set_interested_object (*this);
}
+/** @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 (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)
@@ -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);
@@ -2891,6 +2938,15 @@ ProcessorBox::rb_choose_plugin ()
_current_processor_box->choose_plugin ();
}
+void
+ProcessorBox::rb_choose_lua ()
+{
+ if (_current_processor_box == 0) {
+ return;
+ }
+ _current_processor_box->choose_lua ();
+}
+
void
ProcessorBox::rb_choose_insert ()
{
diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h
index 1a8bae315a..953bed2141 100644
--- a/gtk2_ardour/processor_box.h
+++ b/gtk2_ardour/processor_box.h
@@ -375,6 +375,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD
void return_io_finished (IOSelector::Result, boost::weak_ptr, IOSelectorWindow*);
void choose_insert ();
void choose_plugin ();
+ bool choose_lua ();
bool use_plugins (const SelectedPlugins&);
bool no_processor_redisplay;
@@ -438,6 +439,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD
static void rb_choose_aux (boost::weak_ptr);
static void rb_choose_plugin ();
static void rb_choose_insert ();
+ static void rb_choose_lua ();
static void rb_choose_send ();
static void rb_clear ();
static void rb_clear_pre ();