summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-07-22 14:42:38 +0200
committerRobin Gareus <robin@gareus.org>2016-07-24 13:00:15 +0200
commitbcee4e151867dab8c54b38efe101f90e34b1b70e (patch)
treed7ca7b6962a7d48a779daccf80aaa752f62bbf6d
parent299709cbbc26b2c0e0328dce4e12b4d5fdce8b21 (diff)
add a lua timer callback signal
-rw-r--r--gtk2_ardour/luainstance.cc12
-rw-r--r--gtk2_ardour/luainstance.h5
-rw-r--r--gtk2_ardour/luasignal_syms.h3
-rw-r--r--libs/ardour/luabindings.cc2
4 files changed, 21 insertions, 1 deletions
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<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)
{
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<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
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<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);