From bcee4e151867dab8c54b38efe101f90e34b1b70e Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 22 Jul 2016 14:42:38 +0200 Subject: add a lua timer callback signal --- gtk2_ardour/luainstance.cc | 12 ++++++++++++ gtk2_ardour/luainstance.h | 5 +++++ gtk2_ardour/luasignal_syms.h | 3 +++ libs/ardour/luabindings.cc | 2 +- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/gtk2_ardour/luainstance.cc b/gtk2_ardour/luainstance.cc index ab9b012892..7c4898056f 100644 --- a/gtk2_ardour/luainstance.cc +++ b/gtk2_ardour/luainstance.cc @@ -40,6 +40,7 @@ #include "time_axis_view.h" #include "selection.h" #include "script_selector.h" +#include "timers.h" #include "utils_videotl.h" #include "pbd/i18n.h" @@ -355,6 +356,8 @@ const char *luasignalstr[] = { using namespace ARDOUR; +PBD::Signal0 LuaInstance::LuaTimerDS; + void LuaInstance::register_hooks (lua_State* L) { @@ -986,12 +989,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 +1010,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) { diff --git a/gtk2_ardour/luainstance.h b/gtk2_ardour/luainstance.h index b81c0716ae..4291732097 100644 --- a/gtk2_ardour/luainstance.h +++ b/gtk2_ardour/luainstance.h @@ -112,6 +112,8 @@ public: bool lua_slot (const PBD::ID&, std::string&, std::string&, ActionHook&, ARDOUR::LuaScriptParamList&); sigc::signal SlotChanged; + static PBD::Signal0 LuaTimerDS; // deci-seconds (Timer every .1s) + private: LuaInstance(); static LuaInstance* _instance; @@ -132,6 +134,9 @@ private: LuaCallbackMap _callbacks; PBD::ScopedConnectionList _slotcon; + + void every_point_one_seconds (); + sigc::connection point_one_second_connection; }; #endif diff --git a/gtk2_ardour/luasignal_syms.h b/gtk2_ardour/luasignal_syms.h index af7fab1139..9cd1af7fde 100644 --- a/gtk2_ardour/luasignal_syms.h +++ b/gtk2_ardour/luasignal_syms.h @@ -83,6 +83,9 @@ STATIC(DiskUnderrun, &ARDOUR::Diskstream::DiskUnderrun, 0) // Region static STATIC(RegionPropertyChanged, &ARDOUR::Region::RegionPropertyChanged, 2) +// Timers +STATIC(LuaTimerDS, &LuaInstance::LuaTimerDS, 0) + // TODO per track/route signals, // TODO per plugin actions / controllables // TODO per region actions diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc index b38df496fa..9f249578ab 100644 --- a/libs/ardour/luabindings.cc +++ b/libs/ardour/luabindings.cc @@ -155,7 +155,7 @@ namespace Cairo { CLASSKEYS(Cairo::Context); CLASSKEYS(std::vector); CLASSKEYS(std::list); -CLASSKEYS(std::bitset<46ul>); // LuaSignal::LAST_SIGNAL +CLASSKEYS(std::bitset<47ul>); // LuaSignal::LAST_SIGNAL CLASSKEYS(ArdourMarker*); CLASSKEYS(ARDOUR::RouteGroup); CLASSKEYS(ARDOUR::LuaProc); -- cgit v1.2.3