mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 23:05:04 +01:00
Lua scripting: add convenience function Editor::trigger_script_by_name().
This commit is contained in:
parent
efc858dc81
commit
dade19310d
2 changed files with 59 additions and 0 deletions
|
|
@ -658,6 +658,7 @@ private:
|
||||||
gint really_remove_marker (ARDOUR::Location* loc);
|
gint really_remove_marker (ARDOUR::Location* loc);
|
||||||
void goto_nth_marker (int nth);
|
void goto_nth_marker (int nth);
|
||||||
void trigger_script (int nth);
|
void trigger_script (int nth);
|
||||||
|
void trigger_script_by_name ( const std::string script_name );
|
||||||
void toggle_marker_lines ();
|
void toggle_marker_lines ();
|
||||||
void set_marker_line_visibility (bool);
|
void set_marker_line_visibility (bool);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,11 +33,14 @@
|
||||||
#include "canvas/canvas.h"
|
#include "canvas/canvas.h"
|
||||||
#include "canvas/pixbuf.h"
|
#include "canvas/pixbuf.h"
|
||||||
|
|
||||||
|
#include "LuaBridge/LuaBridge.h"
|
||||||
|
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
#include "ardour_ui.h"
|
#include "ardour_ui.h"
|
||||||
#include "editing.h"
|
#include "editing.h"
|
||||||
#include "editor.h"
|
#include "editor.h"
|
||||||
#include "gui_thread.h"
|
#include "gui_thread.h"
|
||||||
|
#include "luainstance.h"
|
||||||
#include "main_clock.h"
|
#include "main_clock.h"
|
||||||
#include "time_axis_view.h"
|
#include "time_axis_view.h"
|
||||||
#include "ui_config.h"
|
#include "ui_config.h"
|
||||||
|
|
@ -746,6 +749,61 @@ Editor::register_actions ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _lua_print (std::string s) {
|
||||||
|
#ifndef NDEBUG
|
||||||
|
std::cout << "LuaInstance: " << s << "\n";
|
||||||
|
#endif
|
||||||
|
PBD::info << "LuaInstance: " << s << endmsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::trigger_script_by_name ( const std::string script_name )
|
||||||
|
{
|
||||||
|
string script_path;
|
||||||
|
ARDOUR::LuaScriptList scr = LuaScripting::instance ().scripts(LuaScriptInfo::EditorAction);
|
||||||
|
for (ARDOUR::LuaScriptList::const_iterator s = scr.begin(); s != scr.end(); ++s) {
|
||||||
|
|
||||||
|
if ( (*s)->name == script_name ) {
|
||||||
|
script_path = (*s)->path;
|
||||||
|
|
||||||
|
if (!Glib::file_test (script_path, Glib::FILE_TEST_EXISTS | Glib::FILE_TEST_IS_REGULAR)) {
|
||||||
|
cerr << "Lua Script action: path to " << script_path << " does not appear to be valid" << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LuaState lua;
|
||||||
|
lua.Print.connect (&_lua_print); //ToDo
|
||||||
|
lua.sandbox (true);
|
||||||
|
lua_State* L = lua.getState();
|
||||||
|
LuaInstance::register_classes (L);
|
||||||
|
LuaBindings::set_session (L, _session);
|
||||||
|
luabridge::push <PublicEditor *> (L, &PublicEditor::instance());
|
||||||
|
lua_setglobal (L, "Editor");
|
||||||
|
lua.do_command ("function ardour () end");
|
||||||
|
lua.do_file (script_path);
|
||||||
|
luabridge::LuaRef args (luabridge::newTable (L));
|
||||||
|
|
||||||
|
//ToDo: args?
|
||||||
|
// args["how_many"] = count;
|
||||||
|
|
||||||
|
try {
|
||||||
|
luabridge::LuaRef fn = luabridge::getGlobal (L, "factory");
|
||||||
|
if (fn.isFunction()) {
|
||||||
|
fn (args)();
|
||||||
|
}
|
||||||
|
} catch (luabridge::LuaException const& e) {
|
||||||
|
cerr << "LuaException:" << e.what () << endl;
|
||||||
|
} catch (...) {
|
||||||
|
cerr << "Lua script failed: " << script_path << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue; //script found; we're done
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cerr << "Lua script was not found: " << script_name << endl;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::load_bindings ()
|
Editor::load_bindings ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue