diff options
author | Robin Gareus <robin@gareus.org> | 2016-02-22 23:10:55 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-02-23 15:42:26 +0100 |
commit | 341758674b1c6b6e38bfe9e59e04062a70adca86 (patch) | |
tree | ec9e46f02ee1b8c8612b06b67ca2a40da1adb7eb /gtk2_ardour | |
parent | 6b940afa36104e9d9d6c46828abb1182100689e3 (diff) |
Add GUI to instantiate session-scripts
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour.menus.in | 5 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 85 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_ed.cc | 11 |
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); |