1 #ifndef __gtkardour_luainstance_h__
2 #define __gtkardour_luainstance_h__
7 #include "pbd/signals.h"
10 #include "ardour/luascripting.h"
11 #include "ardour/lua_script_params.h"
12 #include "ardour/luabindings.h"
13 #include "ardour/session_handle.h"
15 #include "lua/luastate.h"
16 #include "LuaBridge/LuaBridge.h"
18 #include "luasignal.h"
20 typedef std::bitset<LuaSignal::LAST_SIGNAL> ActionHook;
22 class LuaCallback : public ARDOUR::SessionHandlePtr, public sigc::trackable
25 LuaCallback (ARDOUR::Session*, const std::string&, const std::string&, const ActionHook&, const ARDOUR::LuaScriptParamList&);
26 LuaCallback (ARDOUR::Session*, XMLNode & node);
29 XMLNode& get_state (void);
30 void set_session (ARDOUR::Session *);
32 const PBD::ID& id () const { return _id; }
33 const std::string& name () const { return _name; }
34 ActionHook signals () const { return _signals; }
35 bool lua_slot (std::string&, std::string&, ActionHook&, ARDOUR::LuaScriptParamList&);
36 PBD::Signal0<void> drop_callback;
39 void session_going_away ();
49 template <class T> void reconnect_object (T);
52 luabridge::LuaRef * _lua_add;
53 luabridge::LuaRef * _lua_get;
54 luabridge::LuaRef * _lua_call;
55 luabridge::LuaRef * _lua_save;
56 luabridge::LuaRef * _lua_load;
58 PBD::ScopedConnectionList _connections;
60 template <typename T, typename S> void connect_0 (enum LuaSignal::LuaSignal, T, S*);
61 template <typename T> void proxy_0 (enum LuaSignal::LuaSignal, T);
63 template <typename T, typename C1> void connect_1 (enum LuaSignal::LuaSignal, T, PBD::Signal1<void, C1>*);
64 template <typename T, typename C1> void proxy_1 (enum LuaSignal::LuaSignal, T, C1);
66 template <typename T, typename C1, typename C2> void connect_2 (enum LuaSignal::LuaSignal, T, PBD::Signal2<void, C1, C2>*);
67 template <typename T, typename C1, typename C2> void proxy_2 (enum LuaSignal::LuaSignal, T, C1, C2);
70 typedef boost::shared_ptr<LuaCallback> LuaCallbackPtr;
71 typedef std::map<PBD::ID, LuaCallbackPtr> LuaCallbackMap;
75 class LuaInstance : public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr
78 static LuaInstance* instance();
81 static void register_classes (lua_State* L);
82 static void register_hooks (lua_State* L);
83 static void bind_cairo (lua_State* L);
85 void set_session (ARDOUR::Session* s);
87 int set_state (const XMLNode&);
88 XMLNode& get_action_state (void);
89 XMLNode& get_hook_state (void);
91 bool interactive_add (ARDOUR::LuaScriptInfo::ScriptType, int);
94 void call_action (const int);
96 bool set_lua_action (const int, const std::string&, const std::string&, const ARDOUR::LuaScriptParamList&);
97 bool remove_lua_action (const int);
98 bool lua_action_name (const int, std::string&);
99 std::vector<std::string> lua_action_names ();
100 bool lua_action (const int, std::string&, std::string&, ARDOUR::LuaScriptParamList&);
101 sigc::signal<void,int,std::string> ActionChanged;
104 bool register_lua_slot (const std::string&, const std::string&, const ARDOUR::LuaScriptParamList&);
105 bool unregister_lua_slot (const PBD::ID&);
106 std::vector<PBD::ID> lua_slots () const;
107 bool lua_slot_name (const PBD::ID&, std::string&) const;
108 std::vector<std::string> lua_slot_names () const;
109 bool lua_slot (const PBD::ID&, std::string&, std::string&, ActionHook&, ARDOUR::LuaScriptParamList&);
110 sigc::signal<void,PBD::ID,std::string,ActionHook> SlotChanged;
114 static LuaInstance* _instance;
117 void session_going_away ();
121 luabridge::LuaRef * _lua_call_action;
122 luabridge::LuaRef * _lua_add_action;
123 luabridge::LuaRef * _lua_del_action;
124 luabridge::LuaRef * _lua_get_action;
126 luabridge::LuaRef * _lua_load;
127 luabridge::LuaRef * _lua_save;
128 luabridge::LuaRef * _lua_clear;
130 LuaCallbackMap _callbacks;
131 PBD::ScopedConnectionList _slotcon;