X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fluainstance.cc;h=490790233f04a653db2b3b7a49456a71246899af;hb=9971e718fed4a1126d97bad69f2608638d5a5464;hp=f184368f1d07adf05a6d42a54e91106d0129fa90;hpb=abb09570284a5fbd7358a42ee94b34134ee583ba;p=ardour.git diff --git a/gtk2_ardour/luainstance.cc b/gtk2_ardour/luainstance.cc index f184368f1d..490790233f 100644 --- a/gtk2_ardour/luainstance.cc +++ b/gtk2_ardour/luainstance.cc @@ -20,6 +20,7 @@ #include #include +#include "pbd/file_utils.h" #include "pbd/strsplit.h" #include "gtkmm2ext/bindings.h" @@ -28,6 +29,7 @@ #include "ardour/audioengine.h" #include "ardour/disk_reader.h" #include "ardour/disk_writer.h" +#include "ardour/filesystem_paths.h" #include "ardour/plugin_manager.h" #include "ardour/route.h" #include "ardour/session.h" @@ -54,6 +56,8 @@ #include "pbd/i18n.h" +static const char* ui_scripts_file_name = "ui_scripts"; + namespace LuaCairo { /** wrap RefPtr< Cairo::ImageSurface > * @@ -1092,7 +1096,7 @@ LuaInstance::LuaInstance () lua.Print.connect (&_lua_print); init (); - LuaScriptParamList args; + load_state (); } LuaInstance::~LuaInstance () @@ -1266,6 +1270,61 @@ LuaInstance::init () lua_setglobal (L, "Editor"); } +int +LuaInstance::load_state () +{ + std::string uiscripts; + if (!find_file (ardour_config_search_path(), ui_scripts_file_name, uiscripts)) { + return -1; + } + XMLTree tree; + + info << string_compose (_("Loading user ui scripts file %1"), uiscripts) << endmsg; + + if (!tree.read (uiscripts)) { + error << string_compose(_("cannot read ui scripts file \"%1\""), uiscripts) << endmsg; + return -1; + } + + if (set_state (*tree.root())) { + error << string_compose(_("user ui scripts file \"%1\" not loaded successfully."), uiscripts) << endmsg; + return -1; + } + + return 0; +} + +int +LuaInstance::save_state () +{ + if (!_session) { + /* action scripts are un-registered with the session */ + return -1; + } + + std::string uiscripts = Glib::build_filename (user_config_directory(), ui_scripts_file_name); + + XMLNode* node = new XMLNode (X_("UIScripts")); + node->add_child_nocopy (get_action_state ()); + node->add_child_nocopy (get_hook_state ()); + + XMLTree tree; + tree.set_root (node); + + if (!tree.write (uiscripts.c_str())){ + error << string_compose (_("UI script file %1 not saved"), uiscripts) << endmsg; + return -1; + } + return 0; +} + +void +LuaInstance::set_dirty () +{ + save_state (); + _session->set_dirty (); // XXX is this reasonable? +} + void LuaInstance::set_session (Session* s) { SessionHandlePtr::set_session (s); @@ -1273,6 +1332,8 @@ void LuaInstance::set_session (Session* s) return; } + load_state (); + lua_State* L = lua.getState(); LuaBindings::set_session (L, _session); @@ -1537,7 +1598,7 @@ LuaInstance::set_lua_action ( } catch (...) { return false; } - _session->set_dirty (); + set_dirty (); return true; } @@ -1553,7 +1614,7 @@ LuaInstance::remove_lua_action (const int id) return false; } ActionChanged (id, ""); /* EMIT SIGNAL */ - _session->set_dirty (); + set_dirty (); return true; } @@ -1678,7 +1739,7 @@ LuaInstance::register_lua_slot (const std::string& name, const std::string& scri } catch (luabridge::LuaException const& e) { cerr << "LuaException:" << e.what () << endl; } catch (...) { } - _session->set_dirty (); + set_dirty (); return false; } @@ -1691,7 +1752,7 @@ LuaInstance::unregister_lua_slot (const PBD::ID& id) _callbacks.erase (i); return true; } - _session->set_dirty (); + set_dirty (); return false; }