add a lua timer callback signal
authorRobin Gareus <robin@gareus.org>
Fri, 22 Jul 2016 12:42:38 +0000 (14:42 +0200)
committerRobin Gareus <robin@gareus.org>
Sun, 24 Jul 2016 11:00:15 +0000 (13:00 +0200)
gtk2_ardour/luainstance.cc
gtk2_ardour/luainstance.h
gtk2_ardour/luasignal_syms.h
libs/ardour/luabindings.cc

index ab9b0128923e28b472c7e624f7463847f0c85674..7c4898056fc530d5bda9b085a8be13649008bb24 100644 (file)
@@ -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<void> 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)
 {
index b81c0716aee8fd5348b3e7c9924ccd522aae1d3a..42917320974a5608efbd226bb5433e1b3a2f3e31 100644 (file)
@@ -112,6 +112,8 @@ public:
        bool lua_slot (const PBD::ID&, std::string&, std::string&, ActionHook&, ARDOUR::LuaScriptParamList&);
        sigc::signal<void,PBD::ID,std::string,ActionHook> SlotChanged;
 
+       static PBD::Signal0<void> 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
index af7fab1139df91f847782410f26cb4bef7d9c5d0..9cd1af7fdeaccc2a4752adf7c23b0f6099dcb4b3 100644 (file)
@@ -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
index b38df496fa55b5b0214ee07e5be2e43062460d95..9f249578abafb5e828b4c3b960ebc9fe163c998c 100644 (file)
@@ -155,7 +155,7 @@ namespace Cairo {
 CLASSKEYS(Cairo::Context);
 CLASSKEYS(std::vector<double>);
 CLASSKEYS(std::list<ArdourMarker*>);
-CLASSKEYS(std::bitset<46ul>); // LuaSignal::LAST_SIGNAL
+CLASSKEYS(std::bitset<47ul>); // LuaSignal::LAST_SIGNAL
 CLASSKEYS(ArdourMarker*);
 CLASSKEYS(ARDOUR::RouteGroup);
 CLASSKEYS(ARDOUR::LuaProc);