#include "LuaBridge/LuaBridge.h"
+#include "ardour_http.h"
#include "ardour_ui.h"
#include "public_editor.h"
#include "region_selection.h"
#include "luainstance.h"
#include "luasignal.h"
#include "marker.h"
+#include "processor_box.h"
#include "time_axis_view.h"
#include "selection.h"
#include "script_selector.h"
+#include "timers.h"
+#include "utils_videotl.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
namespace LuaCairo {
/** wrap RefPtr< Cairo::ImageSurface >
_layout->set_text (text);
}
- /** Returns the number of Unicode characters in the
- * the text of @a layout.
- *
- * @return The number of Unicode characters
- * in the text of @a layout.
- */
- int get_character_count () const {
- return _layout->get_character_count ();
- }
-
/** Sets the layout text and attribute list from marked-up text (see markup format).
* Replaces the current text and attribute list.
* @param markup Some marked-up text.
#undef ENGINE
}; // namespace
+
+/** special cases for Ardour's Mixer UI */
+namespace LuaMixer {
+
+ ProcessorBox::ProcSelection
+ processor_selection (lua_State* L) {
+ return ProcessorBox::current_processor_selection ();
+ }
+
+};
+
////////////////////////////////////////////////////////////////////////////////
#define xstr(s) stringify(s)
using namespace ARDOUR;
+PBD::Signal0<void> LuaInstance::LuaTimerDS;
+
void
LuaInstance::register_hooks (lua_State* L)
{
.addFunction ("get_stride", &LuaCairo::ImageSurface::get_stride)
.addFunction ("get_width", &LuaCairo::ImageSurface::get_width)
.addFunction ("get_height", &LuaCairo::ImageSurface::get_height)
- .addFunction ("get_data", &LuaCairo::ImageSurface::get_data)
+ //.addFunction ("get_data", &LuaCairo::ImageSurface::get_data) // uint8_t* array is n/a
.endClass ()
.beginClass <LuaCairo::PangoLayout> ("PangoLayout")
.addFunction ("get_text", &LuaCairo::PangoLayout::get_text)
.addFunction ("set_text", &LuaCairo::PangoLayout::set_text)
.addFunction ("show_in_cairo_context", &LuaCairo::PangoLayout::show_in_cairo_context)
- .addFunction ("get_character_count", &LuaCairo::PangoLayout::get_character_count)
.addFunction ("set_markup", &LuaCairo::PangoLayout::set_markup)
.addFunction ("set_width", &LuaCairo::PangoLayout::set_width)
.addFunction ("set_ellipsize", &LuaCairo::PangoLayout::set_ellipsize)
luabridge::getGlobalNamespace (L)
.beginNamespace ("ArdourUI")
+ .addFunction ("http_get", (std::string (*)(const std::string&))&ArdourCurl::http_get)
+
+ .addFunction ("processor_selection", &LuaMixer::processor_selection)
+
.beginStdList <ArdourMarker*> ("ArdourMarkerList")
.endClass ()
using namespace PBD;
using namespace std;
-#ifndef NDEBUG
static void _lua_print (std::string s) {
+#ifndef NDEBUG
std::cout << "LuaInstance: " << s << "\n";
-}
#endif
+ PBD::info << "LuaInstance: " << s << endmsg;
+}
LuaInstance* LuaInstance::_instance = 0;
LuaInstance::LuaInstance ()
{
-#ifndef NDEBUG
lua.Print.connect (&_lua_print);
-#endif
init ();
LuaScriptParamList args;
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 */
lua.do_command ("collectgarbage();");
}
+void
+LuaInstance::every_point_one_seconds ()
+{
+ LuaTimerDS (); // emit signal
+}
+
int
LuaInstance::set_state (const XMLNode& node)
{
{
try {
(*_lua_call_action)(id + 1);
+ lua.collect_garbage_step ();
} catch (luabridge::LuaException const& e) {
cerr << "LuaException:" << e.what () << endl;
}
ActionHook ah;
try {
LuaState l;
-#ifndef NDEBUG
l.Print.connect (&_lua_print);
-#endif
lua_State* L = l.getState();
register_hooks (L);
l.do_command ("function ardour () end");
void
LuaCallback::init (void)
{
-#ifndef NDEBUG
lua.Print.connect (&_lua_print);
-#endif
lua.do_command (
"function ScriptManager ()"
{
SessionHandlePtr::set_session (s);
- if (_session) {
- lua_State* L = lua.getState();
- LuaBindings::set_session (L, _session);
+ if (!_session) {
+ return;
}
+ lua_State* L = lua.getState();
+ LuaBindings::set_session (L, _session);
+
reconnect();
}
_session = 0;
drop_callback (); /* EMIT SIGNAL */
+
+ lua_State* L = lua.getState();
+ LuaBindings::set_session (L, 0);
+ lua.do_command ("collectgarbage();");
}
void