#include <bitset>
+#include <cairo.h>
+
#include "pbd/id.h"
#include "pbd/signals.h"
#include "pbd/xml++.h"
#include "ardour/luascripting.h"
+#include "ardour/lua_script_params.h"
#include "ardour/luabindings.h"
#include "ardour/session_handle.h"
#include "lua/luastate.h"
-#include "LuaBridge/LuaBridge.h"
#include "luasignal.h"
+namespace luabridge {
+ class LuaRef;
+}
+
typedef std::bitset<LuaSignal::LAST_SIGNAL> ActionHook;
class LuaCallback : public ARDOUR::SessionHandlePtr, public sigc::trackable
{
public:
static LuaInstance* instance();
+ static void destroy_instance();
~LuaInstance();
static void register_classes (lua_State* L);
static void register_hooks (lua_State* L);
+ static void bind_cairo (lua_State* L);
+ static void bind_dialog (lua_State* L);
+
+ static void render_action_icon (cairo_t* cr, int w, int h, uint32_t c, void* i);
void set_session (ARDOUR::Session* s);
/* actions */
void call_action (const int);
+ void render_icon (int i, cairo_t*, int, int, uint32_t);
bool set_lua_action (const int, const std::string&, const std::string&, const ARDOUR::LuaScriptParamList&);
bool remove_lua_action (const int);
bool lua_action_name (const int, std::string&);
std::vector<std::string> lua_action_names ();
bool lua_action (const int, std::string&, std::string&, ARDOUR::LuaScriptParamList&);
+ bool lua_action_has_icon (const int);
sigc::signal<void,int,std::string> ActionChanged;
/* callbacks */
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)
+ static PBD::Signal0<void> SetSession; // emitted when a session is loaded
+
private:
LuaInstance();
static LuaInstance* _instance;
LuaState lua;
luabridge::LuaRef * _lua_call_action;
+ luabridge::LuaRef * _lua_render_icon;
luabridge::LuaRef * _lua_add_action;
luabridge::LuaRef * _lua_del_action;
luabridge::LuaRef * _lua_get_action;
LuaCallbackMap _callbacks;
PBD::ScopedConnectionList _slotcon;
+
+ void every_point_one_seconds ();
+ sigc::connection point_one_second_connection;
};
#endif