cont'd work on Pin Dialog Display
[ardour.git] / gtk2_ardour / luainstance.cc
index e26a712aff8db361e6d4dbe6be6d78a435c52005..188c2c8a935370c5f0dce94434bc3ef865724320 100644 (file)
@@ -199,7 +199,7 @@ LuaInstance::register_classes (lua_State* L)
        register_hooks (L);
 
        luabridge::getGlobalNamespace (L)
-               .beginNamespace ("ARDOUR")
+               .beginNamespace ("ArdourUI")
                .beginClass <RegionSelection> ("RegionSelection")
                .addFunction ("clear_all", &RegionSelection::clear_all)
                .addFunction ("start", &RegionSelection::start)
@@ -250,8 +250,8 @@ LuaInstance::register_classes (lua_State* L)
 
                .addFunction ("effective_mouse_mode", &PublicEditor::effective_mouse_mode)
 
-               .addFunction ("do_import", &PublicEditor::do_import)
-               .addFunction ("do_embed", &PublicEditor::do_embed)
+               .addRefFunction ("do_import", &PublicEditor::do_import)
+               .addRefFunction ("do_embed", &PublicEditor::do_embed)
 
                .addFunction ("export_audio", &PublicEditor::export_audio)
                .addFunction ("stem_export", &PublicEditor::stem_export)
@@ -309,10 +309,10 @@ LuaInstance::register_classes (lua_State* L)
                //.addFunction ("get_preferred_edit_position", &PublicEditor::get_preferred_edit_position)
                //.addFunction ("split_regions_at", &PublicEditor::split_regions_at)
 
-               .addFunction ("get_nudge_distance", &PublicEditor::get_nudge_distance)
+               .addRefFunction ("get_nudge_distance", &PublicEditor::get_nudge_distance)
                .addFunction ("get_paste_offset", &PublicEditor::get_paste_offset)
                .addFunction ("get_grid_beat_divisions", &PublicEditor::get_grid_beat_divisions)
-               .addFunction ("get_grid_type_as_beats", &PublicEditor::get_grid_type_as_beats)
+               .addRefFunction ("get_grid_type_as_beats", &PublicEditor::get_grid_type_as_beats)
 
                .addFunction ("toggle_ruler_video", &PublicEditor::toggle_ruler_video)
                .addFunction ("toggle_xjadeo_proc", &PublicEditor::toggle_xjadeo_proc)
@@ -332,9 +332,9 @@ LuaInstance::register_classes (lua_State* L)
                .addFunction ("center_screen", &PublicEditor::center_screen)
 
                .addFunction ("get_smart_mode", &PublicEditor::get_smart_mode)
-               .addFunction ("get_pointer_position", &PublicEditor::get_pointer_position)
+               .addRefFunction ("get_pointer_position", &PublicEditor::get_pointer_position)
 
-               .addFunction ("find_location_from_marker", &PublicEditor::find_location_from_marker)
+               .addRefFunction ("find_location_from_marker", &PublicEditor::find_location_from_marker)
                .addFunction ("find_marker_from_location_id", &PublicEditor::find_marker_from_location_id)
                .addFunction ("mouse_add_new_marker", &PublicEditor::mouse_add_new_marker)
 #if 0
@@ -665,6 +665,7 @@ LuaInstance::interactive_add (LuaScriptInfo::ScriptType type, int id)
                default:
                        return false;
        }
+       ss.hide ();
 
        std::string script = "";
 
@@ -677,7 +678,7 @@ LuaInstance::interactive_add (LuaScriptInfo::ScriptType type, int id)
                return false;
        }
 
-       LuaScriptParamList lsp = LuaScripting::script_params (spi, "action_params");
+       LuaScriptParamList lsp = LuaScriptParams::script_params (spi, "action_params");
 
        ScriptParameterDialog spd (_("Set Script Parameters"), spi, reg, lsp);
        switch (spd.run ()) {
@@ -839,18 +840,9 @@ LuaInstance::lua_action (const int id, std::string& name, std::string& script, L
                if (!lsi) {
                        return false;
                }
-               args = LuaScripting::script_params (lsi, "action_params");
-               for (luabridge::Iterator i (static_cast<luabridge::LuaRef>(ref["args"])); !i.isNil (); ++i) {
-                       if (!i.key ().isString ()) { assert(0); continue; }
-                       std::string name = i.key ().cast<std::string> ();
-                       std::string value = i.value ().cast<std::string> ();
-                       for (LuaScriptParamList::const_iterator ii = args.begin(); ii != args.end(); ++ii) {
-                               if ((*ii)->name == name) {
-                                       (*ii)->value = value;
-                                       break;
-                               }
-                       }
-               }
+               args = LuaScriptParams::script_params (lsi, "action_params");
+               luabridge::LuaRef rargs (ref["args"]);
+               LuaScriptParams::ref_to_params (args, &rargs);
                return true;
        } catch (luabridge::LuaException const& e) {
                cerr << "LuaException:" << e.what () << endl;
@@ -1216,18 +1208,9 @@ LuaCallback::lua_slot (std::string& name, std::string& script, ActionHook& ah, A
                if (!lsi) {
                        return false;
                }
-               args = LuaScripting::script_params (lsi, "action_params");
-               for (luabridge::Iterator i (static_cast<luabridge::LuaRef>(ref["args"])); !i.isNil (); ++i) {
-                       if (!i.key ().isString ()) { assert(0); continue; }
-                       std::string name = i.key ().cast<std::string> ();
-                       std::string value = i.value ().cast<std::string> ();
-                       for (LuaScriptParamList::const_iterator ii = args.begin(); ii != args.end(); ++ii) {
-                               if ((*ii)->name == name) {
-                                       (*ii)->value = value;
-                                       break;
-                               }
-                       }
-               }
+               args = LuaScriptParams::script_params (lsi, "action_params");
+               luabridge::LuaRef rargs (ref["args"]);
+               LuaScriptParams::ref_to_params (args, &rargs);
                return true;
        } catch (luabridge::LuaException const& e) {
                cerr << "LuaException:" << e.what () << endl;
@@ -1336,18 +1319,43 @@ LuaCallback::connect_2 (enum LuaSignal::LuaSignal ls, T ref, PBD::Signal2<void,
 
 template <typename T> void
 LuaCallback::proxy_0 (enum LuaSignal::LuaSignal ls, T ref) {
-       luabridge::LuaRef rv ((*_lua_call)((int)ls, ref));
-       if (! rv.cast<bool> ()) { drop_callback (); /* EMIT SIGNAL */}
+       bool ok = true;
+       {
+               const luabridge::LuaRef& rv ((*_lua_call)((int)ls, ref));
+               if (! rv.cast<bool> ()) {
+                       ok = false;
+               }
+       }
+       /* destroy LuaRef ^^ first before calling drop_callback() */
+       if (!ok) {
+               drop_callback (); /* EMIT SIGNAL */
+       }
 }
 
 template <typename T, typename C1> void
 LuaCallback::proxy_1 (enum LuaSignal::LuaSignal ls, T ref, C1 a1) {
-       luabridge::LuaRef rv ((*_lua_call)((int)ls, ref, a1));
-       if (! rv.cast<bool> ()) { drop_callback (); /* EMIT SIGNAL */}
+       bool ok = true;
+       {
+               const luabridge::LuaRef& rv ((*_lua_call)((int)ls, ref, a1));
+               if (! rv.cast<bool> ()) {
+                       ok = false;
+               }
+       }
+       if (!ok) {
+               drop_callback (); /* EMIT SIGNAL */
+       }
 }
 
 template <typename T, typename C1, typename C2> void
 LuaCallback::proxy_2 (enum LuaSignal::LuaSignal ls, T ref, C1 a1, C2 a2) {
-       luabridge::LuaRef rv ((*_lua_call)((int)ls, ref, a1, a2));
-       if (! rv.cast<bool> ()) { drop_callback (); /* EMIT SIGNAL */}
+       bool ok = true;
+       {
+               const luabridge::LuaRef& rv ((*_lua_call)((int)ls, ref, a1, a2));
+               if (! rv.cast<bool> ()) {
+                       ok = false;
+               }
+       }
+       if (!ok) {
+               drop_callback (); /* EMIT SIGNAL */
+       }
 }