Add a 1Hz Lua Callback Signal
authorRobin Gareus <robin@gareus.org>
Fri, 16 Nov 2018 23:12:10 +0000 (00:12 +0100)
committerRobin Gareus <robin@gareus.org>
Fri, 16 Nov 2018 23:12:10 +0000 (00:12 +0100)
gtk2_ardour/luainstance.cc
gtk2_ardour/luainstance.h
gtk2_ardour/luasignal_syms.h

index 4303794bfe7c52c0150ea1bd4b6b8174e134d998..bc5c1b0e6d5066a92a990e13133faceaea3a9202 100644 (file)
@@ -512,6 +512,7 @@ lua_translate_order (RouteDialogs::InsertAt place)
 
 using namespace ARDOUR;
 
+PBD::Signal0<void> LuaInstance::LuaTimerS;
 PBD::Signal0<void> LuaInstance::LuaTimerDS;
 PBD::Signal0<void> LuaInstance::SetSession;
 
@@ -1341,6 +1342,7 @@ void LuaInstance::set_session (Session* s)
        for (LuaCallbackMap::iterator i = _callbacks.begin(); i != _callbacks.end(); ++i) {
                i->second->set_session (s);
        }
+       second_connection = Timers::rapid_connect (sigc::mem_fun(*this, & LuaInstance::every_second));
        point_one_second_connection = Timers::rapid_connect (sigc::mem_fun(*this, & LuaInstance::every_point_one_seconds));
        SetSession (); /* EMIT SIGNAL */
 }
@@ -1349,6 +1351,7 @@ void
 LuaInstance::session_going_away ()
 {
        ENSURE_GUI_THREAD (*this, &LuaInstance::session_going_away);
+       second_connection.disconnect ();
        point_one_second_connection.disconnect ();
 
        (*_lua_clear)();
@@ -1363,6 +1366,12 @@ LuaInstance::session_going_away ()
        lua.do_command ("collectgarbage();");
 }
 
+void
+LuaInstance::every_second ()
+{
+       LuaTimerS (); // emit signal
+}
+
 void
 LuaInstance::every_point_one_seconds ()
 {
index 8f5fb0ba874a9a0975579be84f4146e91f21c963..9915d6b3067e4a15f938fae93b81e7d2038e77da 100644 (file)
@@ -126,6 +126,7 @@ 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> LuaTimerS; // deci-seconds (Timer every 1s)
        static PBD::Signal0<void> LuaTimerDS; // deci-seconds (Timer every .1s)
        static PBD::Signal0<void> SetSession; // emitted when a session is loaded
 
@@ -152,6 +153,9 @@ private:
        LuaCallbackMap _callbacks;
        PBD::ScopedConnectionList _slotcon;
 
+       void every_second ();
+       sigc::connection second_connection;
+
        void every_point_one_seconds ();
        sigc::connection point_one_second_connection;
 };
index 352b653df252faceb76cc38a4bce486b810709c2..d68c23a1286a5df258ab29842812bb30c372456c 100644 (file)
@@ -21,7 +21,6 @@
 STATIC(SessionLoad, &, 0)
 STATIC(SessionClose, &, 0)
 #endif
-//STATIC(EverySecond, get_timers().second, 0) // XXX
 STATIC(ConfigChanged, &ARDOUR::Config->ParameterChanged, 1)
 
 // engine instance
@@ -85,6 +84,7 @@ STATIC(DiskUnderrun, &ARDOUR::DiskReader::Underrun, 0)
 STATIC(RegionPropertyChanged, &ARDOUR::Region::RegionPropertyChanged, 2)
 
 // Timers
+STATIC(LuaTimerS,  &LuaInstance::LuaTimerS, 0)
 STATIC(LuaTimerDS, &LuaInstance::LuaTimerDS, 0)
 
 // Session load