forward Lua print() to Ardour's Log.
[ardour.git] / gtk2_ardour / luainstance.cc
index 48a10b2e84846992da0bb8ab1961e87e385250d7..0dd4731f277033b3f6db6434096d3ad6e4704b9a 100644 (file)
 
 #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 >
@@ -176,16 +180,6 @@ class PangoLayout {
                        _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.
@@ -355,6 +349,17 @@ const char *luasignalstr[] = {
 #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)
@@ -362,6 +367,8 @@ const char *luasignalstr[] = {
 
 using namespace ARDOUR;
 
+PBD::Signal0<void> LuaInstance::LuaTimerDS;
+
 void
 LuaInstance::register_hooks (lua_State* L)
 {
@@ -475,7 +482,7 @@ LuaInstance::bind_cairo (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")
@@ -484,7 +491,6 @@ LuaInstance::bind_cairo (lua_State* L)
                .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)
@@ -548,6 +554,10 @@ LuaInstance::register_classes (lua_State* L)
        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 ()
 
@@ -804,11 +814,12 @@ using namespace ARDOUR_UI_UTILS;
 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;
 
@@ -824,9 +835,7 @@ LuaInstance::instance ()
 
 LuaInstance::LuaInstance ()
 {
-#ifndef NDEBUG
        lua.Print.connect (&_lua_print);
-#endif
        init ();
 
        LuaScriptParamList args;
@@ -992,12 +1001,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 */
@@ -1010,6 +1022,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)
 {
@@ -1153,6 +1171,7 @@ LuaInstance::call_action (const int id)
 {
        try {
                (*_lua_call_action)(id + 1);
+               lua.collect_garbage_step ();
        } catch (luabridge::LuaException const& e) {
                cerr << "LuaException:" << e.what () << endl;
        }
@@ -1273,9 +1292,7 @@ LuaInstance::register_lua_slot (const std::string& name, const std::string& scri
        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");
@@ -1471,9 +1488,7 @@ LuaCallback::get_state (void)
 void
 LuaCallback::init (void)
 {
-#ifndef NDEBUG
        lua.Print.connect (&_lua_print);
-#endif
 
        lua.do_command (
                        "function ScriptManager ()"
@@ -1639,11 +1654,13 @@ LuaCallback::set_session (ARDOUR::Session *s)
 {
        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();
 }
 
@@ -1657,6 +1674,10 @@ LuaCallback::session_going_away ()
        _session = 0;
 
        drop_callback (); /* EMIT SIGNAL */
+
+       lua_State* L = lua.getState();
+       LuaBindings::set_session (L, 0);
+       lua.do_command ("collectgarbage();");
 }
 
 void