X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fluainstance.cc;h=d8c602b09a5e159d246c80eaa5143eb18e4189c0;hb=bc79fc07ce6b6849ac83fb13d3c1896c7e5268e4;hp=ab9b0128923e28b472c7e624f7463847f0c85674;hpb=a450024c56a6a023a985adea4c542f9cc02dd6f3;p=ardour.git diff --git a/gtk2_ardour/luainstance.cc b/gtk2_ardour/luainstance.cc index ab9b012892..d8c602b09a 100644 --- a/gtk2_ardour/luainstance.cc +++ b/gtk2_ardour/luainstance.cc @@ -37,9 +37,11 @@ #include "luainstance.h" #include "luasignal.h" #include "marker.h" +#include "processor_box.h" #include "time_axis_view.h" #include "selection.h" #include "script_selector.h" +#include "timers.h" #include "utils_videotl.h" #include "pbd/i18n.h" @@ -348,6 +350,16 @@ const char *luasignalstr[] = { }; // namespace +/** special cases for Ardour's Mixer UI */ +namespace LuaMixer { + + ProcessorBox::ProcSelection + processor_selection () { + return ProcessorBox::current_processor_selection (); + } + +}; + //////////////////////////////////////////////////////////////////////////////// #define xstr(s) stringify(s) @@ -355,6 +367,8 @@ const char *luasignalstr[] = { using namespace ARDOUR; +PBD::Signal0 LuaInstance::LuaTimerDS; + void LuaInstance::register_hooks (lua_State* L) { @@ -542,6 +556,8 @@ LuaInstance::register_classes (lua_State* L) .addFunction ("http_get", (std::string (*)(const std::string&))&ArdourCurl::http_get) + .addFunction ("processor_selection", &LuaMixer::processor_selection) + .beginStdList ("ArdourMarkerList") .endClass () @@ -798,11 +814,12 @@ using namespace ARDOUR_UI_UTILS; using namespace PBD; using namespace std; -#ifndef NDEBUG static void _lua_print (std::string s) { +#ifndef NDEBUG std::cout << "LuaInstance: " << s << "\n"; -} #endif + PBD::info << "LuaInstance: " << s << endmsg; +} LuaInstance* LuaInstance::_instance = 0; @@ -816,11 +833,16 @@ LuaInstance::instance () return _instance; } +void +LuaInstance::destroy_instance () +{ + delete _instance; + _instance = 0; +} + LuaInstance::LuaInstance () { -#ifndef NDEBUG lua.Print.connect (&_lua_print); -#endif init (); LuaScriptParamList args; @@ -986,12 +1008,15 @@ void LuaInstance::set_session (Session* s) for (LuaCallbackMap::iterator i = _callbacks.begin(); i != _callbacks.end(); ++i) { i->second->set_session (s); } + point_one_second_connection = Timers::rapid_connect (sigc::mem_fun(*this, & LuaInstance::every_point_one_seconds)); } void LuaInstance::session_going_away () { ENSURE_GUI_THREAD (*this, &LuaInstance::session_going_away); + point_one_second_connection.disconnect (); + (*_lua_clear)(); for (int i = 0; i < 9; ++i) { ActionChanged (i, ""); /* EMIT SIGNAL */ @@ -1004,6 +1029,12 @@ LuaInstance::session_going_away () lua.do_command ("collectgarbage();"); } +void +LuaInstance::every_point_one_seconds () +{ + LuaTimerDS (); // emit signal +} + int LuaInstance::set_state (const XMLNode& node) { @@ -1268,9 +1299,7 @@ LuaInstance::register_lua_slot (const std::string& name, const std::string& scri ActionHook ah; try { LuaState l; -#ifndef NDEBUG l.Print.connect (&_lua_print); -#endif lua_State* L = l.getState(); register_hooks (L); l.do_command ("function ardour () end"); @@ -1466,9 +1495,7 @@ LuaCallback::get_state (void) void LuaCallback::init (void) { -#ifndef NDEBUG lua.Print.connect (&_lua_print); -#endif lua.do_command ( "function ScriptManager ()" @@ -1634,11 +1661,13 @@ LuaCallback::set_session (ARDOUR::Session *s) { SessionHandlePtr::set_session (s); - if (_session) { - lua_State* L = lua.getState(); - LuaBindings::set_session (L, _session); + if (!_session) { + return; } + lua_State* L = lua.getState(); + LuaBindings::set_session (L, _session); + reconnect(); }