Update Lua VAMP scripts to show a progress dialog
[ardour.git] / scripts / mixer_settings_store.lua
index 4b0d7ca46f45f4230a1afb1b308a92cfca882598..699b92105f7d72384f97976048325aeb1e588d60 100644 (file)
@@ -30,6 +30,19 @@ function factory () return function ()
                end return ok, err
        end
 
+       function whoami()
+               if not pcall(function() local first_check = Session:get_mixbus(0) end) then
+                       return "Ardour"
+               else
+                       local second_check = Session:get_mixbus(11)
+                       if second_check:isnil() then
+                               return "Mixbus"
+                       else
+                               return "32C"
+                       end
+               end
+       end
+
        function isdir(path)
                return exists(path.."/")
        end
@@ -40,10 +53,6 @@ function factory () return function ()
                if not(isdir(global_path)) then
                        global_ok, _, _ = os.execute('mkdir '.. global_path)
                        if global_ok == 0 then
-                               local default_file = ARDOUR.LuaAPI.build_filename(global_path, 'factory_default.lua')
-                               local file = io.open(default_file, "w")
-                               file:write("")
-                               file:close()
                                global_ok = true
                        end
                else
@@ -52,10 +61,6 @@ function factory () return function ()
                if not(isdir(local_path)) then
                        local_ok, _, _ = os.execute('mkdir '.. local_path)
                        if local_ok == 0 then
-                               local stub_file = ARDOUR.LuaAPI.build_filename(local_path, 'stub')
-                               local file = io.open(stub_file, "w")
-                               file:write("")
-                               file:close()
                                local_ok = true
                        end
                else
@@ -77,13 +82,6 @@ function factory () return function ()
                        until proc:isnil()
                end
 
-       function new_plugin(name)
-               for x = 0, 6 do
-                       local plugin = ARDOUR.LuaAPI.new_plugin(Session, name, x, "")
-                       if not(plugin:isnil()) then return plugin end
-               end
-       end
-
        function group_by_id(id)
                local id  = tonumber(id)
                for g in Session:route_groups():iter() do
@@ -117,6 +115,7 @@ function factory () return function ()
 
        function empty_last_store(path)  --empty current file from last run
                local file = io.open(path, "w")
+               --file:write(string.format("instance = { whoami = '%s' }", whoami())
                file:write("")
                file:close()
        end
@@ -128,15 +127,16 @@ function factory () return function ()
                local route_string = [[instance = {
                         route_id = %d,
                         route_name = '%s',
-                        gain_control = %f,
-                        trim_control = %f,
+                        gain_control = %s,
+                        trim_control = %s,
                         pan_control = %s,
                         muted = %s,
                         soloed = %s,
                         order = {%s},
                         cache = {%s},
                         group = %s,
-                        group_name = '%s'
+                        group_name = '%s',
+                        pi_order = %d
                }]]
 
                local group_string = [[instance = {
@@ -147,6 +147,7 @@ function factory () return function ()
 
                local processor_string = [[instance = {
                         plugin_id = %d,
+                        type = %d,
                         display_name = '%s',
                         owned_by_route_name = '%s',
                         owned_by_route_id = %d,
@@ -156,8 +157,8 @@ function factory () return function ()
 
                local group_route_string = " [%d] = %s,"
                local proc_order_string  = " [%d] = %d,"
-               local proc_cache_string  = " [%d] = '%s',"
-               local params_string      = " [%d] = %f,"
+               local proc_cache_string  = " [%d] = {'%s', %d},"
+               local params_string      = " [%d] = %s,"
 
                --ensure easy-to-read formatting doesn't make it through
                local route_string     = string.gsub(route_string, "[\n\t]", "")
@@ -168,7 +169,7 @@ function factory () return function ()
                local groups_to_write = {}
                local i = 0
 
-               local tracks = Session:get_routes()
+               local tracks = Session:get_stripables()
 
                if selected then tracks = sel.tracks:routelist() end
 
@@ -206,8 +207,9 @@ function factory () return function ()
                end
 
                for r in tracks:iter() do
-                       if r:is_monitor () or r:is_auditioner () then goto nextroute end -- skip special routes
-
+                       if r:is_monitor () or r:is_auditioner () or not(r:to_vca():isnil()) then goto nextroute end -- skip special routes
+                       r = r:to_route()
+                       if r:isnil() then goto nextroute end
                        local order = ARDOUR.ProcessorList()
                        local x = 0
                        repeat
@@ -218,6 +220,7 @@ function factory () return function ()
                                x = x + 1
                        until proc:isnil()
 
+
                        local route_group = route_group_interrogate(r)
                        if route_group then route_group = route_group:name() else route_group = "" end
                        local rid = r:to_stateful():id():to_s()
@@ -227,10 +230,16 @@ function factory () return function ()
                        local order_nmbr = 0
                        local tmp_order_str, tmp_cache_str = "", ""
                        for p in order:iter() do
+                               local ptype
+                               if not(p:to_insert():isnil()) then
+                                       ptype = p:to_insert():plugin(0):get_info().type
+                               else
+                                       ptype = 99
+                               end
                                local pid = p:to_stateful():id():to_s()
                                if not(string.find(p:display_name(), "latcomp")) then
                                        tmp_order_str = tmp_order_str .. string.format(proc_order_string, order_nmbr, pid)
-                                       tmp_cache_str = tmp_cache_str .. string.format(proc_cache_string, pid, p:display_name())
+                                       tmp_cache_str = tmp_cache_str .. string.format(proc_cache_string, pid, p:display_name(), ptype)
                                end
                                order_nmbr = order_nmbr + 1
                        end
@@ -239,15 +248,16 @@ function factory () return function ()
                                        route_string,
                                        rid,
                                        r:name(),
-                                       r:gain_control():get_value(),
-                                       r:trim_control():get_value(),
+                                       ARDOUR.LuaAPI.ascii_dtostr(r:gain_control():get_value()),
+                                       ARDOUR.LuaAPI.ascii_dtostr(r:trim_control():get_value()),
                                        tostring(pan),
                                        r:muted(),
                                        r:soloed(),
                                        tmp_order_str,
                                        tmp_cache_str,
                                        route_groupid_interrogate(r),
-                                       route_group
+                                       route_group,
+                                       r:presentation_info_ptr():order()
                                )
 
                        file = io.open(path, "a")
@@ -262,15 +272,16 @@ function factory () return function ()
                                local active = proc:active()
                                local id = proc:to_stateful():id():to_s()
                                local plug = proc:to_insert ():plugin (0)
+                               local ptype = proc:to_insert():plugin(0):get_info().type
                                local n = 0 -- count control-ports
                                for j = 0, plug:parameter_count () - 1 do -- iterate over all plugin parameters
                                        if plug:parameter_is_control (j) then
                                                local label = plug:parameter_label (j)
                                                if plug:parameter_is_input (j) and label ~= "hidden" and label:sub (1,1) ~= "#" then
-                                                       local _, _, pd = ARDOUR.LuaAPI.plugin_automation(proc, n)
+                                                       --local _, _, pd = ARDOUR.LuaAPI.plugin_automation(proc, n)
                                                        local val = ARDOUR.LuaAPI.get_processor_param(proc, j, true)
-                                                       --print(r:name(), "->", proc:display_name(), label, val)
-                                                       params[n] = val
+                                                       print(r:name(), "->", proc:display_name(), label, val)
+                                                       params[j] = val
                                                end
                                                n = n + 1
                                        end
@@ -279,12 +290,13 @@ function factory () return function ()
 
                                local tmp_params_str = ""
                                for k, v in pairs(params) do
-                                       tmp_params_str = tmp_params_str .. string.format(params_string, k, v)
+                                       tmp_params_str = tmp_params_str .. string.format(params_string, k, ARDOUR.LuaAPI.ascii_dtostr(v))
                                end
 
                                local proc_str = string.format(
                                                processor_string,
                                                id,
+                                               ptype,
                                                proc:display_name(),
                                                r:name(),
                                                r:to_stateful():id():to_s(),
@@ -300,19 +312,19 @@ function factory () return function ()
        end
 
        local store_options = {
-               { type = "label",    col=0, colspan=1, align="left", title = "Settings name:" },
-               { type = "entry",    col=1, colspan=1, align="right" , key = "filename", default = Session:name(), title=""},
-               { type = "label",    col=0, colspan=1, align="left", title = "Selected Tracks Only:" },
-               { type = "checkbox", col=1, colspan=1, align="right",  key = "selected", default = false, title = ""},
-               { type = "hseparator", title="", col=0, colspan = 3},
-               { type = "label",    col=0, colspan=1, align="left", title = "Store Settings:" },
+               { type = "label",    col=0, colspan=1, align="right", title = "Name:" },
+               { type = "entry",    col=1, colspan=1, align="left" , key = "filename", default = Session:name(), title=""},
+               { type = "label",    col=0, colspan=1, align="right", title = "Location:" },
                {
-                       type = "radio",  col=1, colspan=3, align="right", key = "store-dir", title = "", values =
+                       type = "radio",  col=1, colspan=3, align="left", key = "store-dir", title = "", values =
                        {
-                               ['Global (accessible from any session)'] = 1, ['Locally (this session only)'] = 2
+                               ['Global (accessible from any session)'] = 1, ['Local (this session only)'] = 2
                        },
                        default = 'Locally (this session only)'
                },
+               { type = "hseparator", title="", col=0, colspan = 3},
+               { type = "label",    col=0, colspan=1, align="right", title = "Selected Tracks Only:" },
+               { type = "checkbox", col=1, colspan=1, align="left",  key = "selected", default = false, title = ""},
                --{ type = "label", col=0, colspan=2, align="left", title = ''},
                --{ type = "label", col=0, colspan=2, align="left", title = "Global Path: " .. global_path},
                --{ type = "label", col=0, colspan=2, align="left", title = "Local Path: "  .. local_path},
@@ -327,13 +339,13 @@ function factory () return function ()
 
                local filename = rv['filename']
                if rv['store-dir'] == 1 then
-                       local store_path = ARDOUR.LuaAPI.build_filename(global_path, filename .. '.lua')
+                       local store_path = ARDOUR.LuaAPI.build_filename(global_path, string.format("%s-%s.lua", filename, whoami()))
                        local selected = rv['selected']
                        mark_tracks(selected, store_path)
                end
 
                if rv['store-dir'] == 2 then
-                       local store_path = ARDOUR.LuaAPI.build_filename(local_path, filename .. '.lua')
+                       local store_path = ARDOUR.LuaAPI.build_filename(local_path, string.format("%s-%s.lua", filename, whoami()))
                        print(store_path)
                        local selected = rv['selected']
                        mark_tracks(selected, store_path)