Fix thinkos in cubasish theme
[ardour.git] / gtk2_ardour / luainstance.cc
index 49b794823dc626087b1882af62db5a80e96986d5..c08f28df8a5da41034cf5216c3a5aecb02dd3ef0 100644 (file)
@@ -56,6 +56,7 @@
 #include "selection.h"
 #include "script_selector.h"
 #include "timers.h"
+#include "ui_config.h"
 #include "utils_videotl.h"
 
 #include "pbd/i18n.h"
@@ -210,7 +211,7 @@ class PangoLayout {
                 * @param width The desired width in Pango units, or -1 to indicate that no
                 * wrapping or ellipsization should be performed.
                 */
-               void set_width (int width) {
+               void set_width (float width) {
                        _layout->set_width (width * PANGO_SCALE);
                }
 
@@ -402,6 +403,12 @@ static void mixer_screenshot (const std::string& fn) {
        Mixer_UI::instance()->screenshot (fn);
 }
 
+/** Access libardour global configuration */
+static UIConfiguration* _ui_config () {
+       return &UIConfiguration::instance();
+}
+
+
 ////////////////////////////////////////////////////////////////////////////////
 
 static PBD::ScopedConnectionList _luaexecs;
@@ -572,6 +579,7 @@ LuaInstance::bind_cairo (lua_State* L)
         */
        luabridge::getGlobalNamespace (L)
                .beginNamespace ("C")
+               .registerArray <double> ("DoubleArray")
                .beginStdVector <double> ("DoubleVector")
                .endClass ()
                .endNamespace ();
@@ -1067,6 +1075,21 @@ LuaInstance::register_classes (lua_State* L)
 
                .addCFunction ("actionlist", &lua_actionlist)
 
+
+               .beginClass <UIConfiguration> ("UIConfiguration")
+#undef  UI_CONFIG_VARIABLE
+#define UI_CONFIG_VARIABLE(Type,var,name,value) \
+               .addFunction ("get_" # var, &UIConfiguration::get_##var) \
+               .addFunction ("set_" # var, &UIConfiguration::set_##var) \
+               .addProperty (#var, &UIConfiguration::get_##var, &UIConfiguration::set_##var)
+
+#include "ui_config_vars.h"
+
+#undef UI_CONFIG_VARIABLE
+               .endClass()
+
+               .addFunction ("config", &_ui_config)
+
                .endNamespace () // end ArdourUI
 
                .beginNamespace ("os")
@@ -1319,6 +1342,7 @@ LuaInstance::load_state ()
 {
        std::string uiscripts;
        if (!find_file (ardour_config_search_path(), ui_scripts_file_name, uiscripts)) {
+               pre_seed_scripts ();
                return -1;
        }
        XMLTree tree;
@@ -1408,7 +1432,7 @@ LuaInstance::session_going_away ()
 
        lua_State* L = lua.getState();
        LuaBindings::set_session (L, _session);
-       lua.do_command ("collectgarbage();");
+       lua.collect_garbage ();
 }
 
 void
@@ -1465,6 +1489,24 @@ LuaInstance::set_state (const XMLNode& node)
        return 0;
 }
 
+void
+LuaInstance::pre_seed_scripts ()
+{
+       LuaScriptInfoPtr spi = LuaScripting::instance ().by_name ("Mixer Screenshot", LuaScriptInfo::EditorAction);
+       int id = 0;
+       if (spi) {
+               try {
+                       std::string script = Glib::file_get_contents (spi->path);
+                       LuaState ls;
+                       register_classes (ls.getState ());
+                       LuaScriptParamList lsp = LuaScriptParams::script_params (ls, spi->path, "action_params");
+                       LuaScriptParamPtr lspp (new LuaScriptParam("x-script-origin", "", spi->path, false, true));
+                       lsp.push_back (lspp);
+                       set_lua_action (id++, "Mixer Screenshot", script, lsp);
+               } catch (...) { }
+       }
+}
+
 bool
 LuaInstance::interactive_add (LuaScriptInfo::ScriptType type, int id)
 {