summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-02-22 23:10:55 +0100
committerRobin Gareus <robin@gareus.org>2016-02-23 15:42:26 +0100
commit341758674b1c6b6e38bfe9e59e04062a70adca86 (patch)
treeec9e46f02ee1b8c8612b06b67ca2a40da1adb7eb /gtk2_ardour
parent6b940afa36104e9d9d6c46828abb1182100689e3 (diff)
Add GUI to instantiate session-scripts
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour.menus.in5
-rw-r--r--gtk2_ardour/ardour_ui.cc85
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc11
3 files changed, 101 insertions, 0 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index bf79009b56..1eab195b76 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -27,6 +27,11 @@
#endif
<!--menuitem action='importFromSession'/-->
+ <menu name='Scripting' action='Scripting'>
+ <menuitem action='AddLuaScript'/>
+ <menuitem action='RemoveLuaScript'/>
+ </menu>
+
<menuitem action='OpenVideo'/>
<menuitem action='CloseVideo'/>
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index da2323b80a..a40d192e72 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -91,6 +91,8 @@
#include "ardour/slave.h"
#include "ardour/system_exec.h"
+#include "LuaBridge/LuaBridge.h"
+
#ifdef WINDOWS_VST_SUPPORT
#include <fst.h>
#endif
@@ -141,6 +143,7 @@ typedef uint64_t microseconds_t;
#include "route_time_axis.h"
#include "route_params_ui.h"
#include "save_as_dialog.h"
+#include "script_selector.h"
#include "session_dialog.h"
#include "session_metadata_dialog.h"
#include "session_option_editor.h"
@@ -3931,6 +3934,88 @@ ARDOUR_UI::add_route (Gtk::Window* /* ignored */)
}
void
+ARDOUR_UI::add_lua_script ()
+{
+ if (!_session) {
+ return;
+ }
+
+ LuaScriptInfoPtr spi;
+ ScriptSelector ss ("Add Lua Session Script", LuaScriptInfo::Session);
+ switch (ss.run ()) {
+ case Gtk::RESPONSE_ACCEPT:
+ spi = ss.script();
+ break;
+ default:
+ return;
+ }
+
+ std::string script = "";
+
+ try {
+ script = Glib::file_get_contents (spi->path);
+ } catch (Glib::FileError e) {
+ string msg = string_compose (_("Cannot read session script '%1': %2"), spi->path, e.what());
+ MessageDialog am (msg);
+ am.run ();
+ return;
+ }
+
+ LuaScriptParamList lsp = LuaScripting::session_script_params (spi);
+ std::vector<std::string> reg = _session->registered_lua_functions ();
+
+ ScriptParameterDialog spd (_("Set Script Parameters"), spi, reg, lsp);
+ switch (spd.run ()) {
+ case Gtk::RESPONSE_ACCEPT:
+ break;
+ default:
+ return;
+ }
+
+ try {
+ _session->register_lua_function (spd.name(), script, lsp);
+ } catch (luabridge::LuaException const& e) {
+ string msg = string_compose (_("Session script '%1' instantiation failed: %2"), spd.name(), e.what ());
+ MessageDialog am (msg);
+ am.run ();
+ } catch (SessionException e) {
+ string msg = string_compose (_("Loading Session script '%1' failed: %2"), spd.name(), e.what ());
+ MessageDialog am (msg);
+ am.run ();
+ }
+}
+
+void
+ARDOUR_UI::remove_lua_script ()
+{
+ if (!_session) {
+ return;
+ }
+ if (_session->registered_lua_function_count () == 0) {
+ string msg = _("There are no active Lua session scripts present in this session.");
+ MessageDialog am (msg);
+ am.run ();
+ return;
+ }
+
+ std::vector<std::string> reg = _session->registered_lua_functions ();
+ SessionScriptManager sm ("Remove Lua Session Script", reg);
+ switch (sm.run ()) {
+ case Gtk::RESPONSE_ACCEPT:
+ break;
+ default:
+ return;
+ }
+ try {
+ _session->unregister_lua_function (sm.name());
+ } catch (luabridge::LuaException const& e) {
+ string msg = string_compose (_("Session script '%1' removal failed: %2"), sm.name(), e.what ());
+ MessageDialog am (msg);
+ am.run ();
+ }
+}
+
+void
ARDOUR_UI::stop_video_server (bool ask_confirm)
{
if (!video_server_process && ask_confirm) {
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index d5e6968f89..03ad92e183 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -163,6 +163,17 @@ ARDOUR_UI::install_actions ()
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::write_sensitive_actions.push_back (act);
+ act = global_actions.register_action (main_actions, X_("Scripting"), S_("Session|Scripting"));
+ ActionManager::session_sensitive_actions.push_back (act);
+
+ act = global_actions.register_action (main_actions, X_("AddLuaScript"), _("Add Lua Script"),
+ sigc::mem_fun (*this, &ARDOUR_UI::add_lua_script));
+ ActionManager::session_sensitive_actions.push_back (act);
+
+ act = global_actions.register_action (main_actions, X_("RemoveLuaScript"), _("Remove Lua Script"),
+ sigc::mem_fun (*this, &ARDOUR_UI::remove_lua_script));
+ ActionManager::session_sensitive_actions.push_back (act);
+
act = global_actions.register_action (main_actions, X_("OpenVideo"), _("Open Video"),
sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::add_video), (Gtk::Window*) 0));
ActionManager::session_sensitive_actions.push_back (act);