From a54a501ad693b28dbbe1cff4faea0799706a17a4 Mon Sep 17 00:00:00 2001 From: Nikolaus Gullotta Date: Tue, 17 Jul 2018 13:02:05 -0500 Subject: Move track_organizer Lua script to ardour --- scripts/track_organizer.lua | 106 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 scripts/track_organizer.lua (limited to 'scripts') diff --git a/scripts/track_organizer.lua b/scripts/track_organizer.lua new file mode 100644 index 0000000000..007b136356 --- /dev/null +++ b/scripts/track_organizer.lua @@ -0,0 +1,106 @@ +ardour { + ["type"] = "EditorAction", + name = "Track Organizer", + author = "Mixbus Lua Taskforce", + description = [[Easily modifiable session overview and track property editor]] +} + +function factory () return function () + + local rbow = { ["----"] = "", ["Red"] = 0xD10000FF, ["Orange"] = 0xFF6622FF, ["Yellow"] = 0xFFDA21FF, + ["Green"] = 0x33DD00FF, ["Blue"] = 0x1133CCFF, ["Indigo"] = 0x220066FF, ["Violet"] = 0x330044FF +} + + --now starting to build our dialog + local dialog_options = { + { type = "label", colspan="4", title = "Change your Track settings here:" }, + { type = "heading", title = "Track", col = 0, colspan = 1 }, + { type = "heading", title = "Group", col = 1, colspan = 1 }, + { type = "heading", title = "Comment", col = 2, colspan = 1 }, + { type = "heading", title = "Color", col = 3, colspan = 1 }, + } + + --group option payload + --@ToDo: Add 'fake' groups for people to select, create them if they want it + local pl = {["----"] = "", ["Drums"] = "Drums", ["Bass"] = "Bass", ["Guitars"] = "Guitars", + ["Keys"] = "Keys", ["Strings"] = "Strings", ["Vox"] = "Vox" +} + + for g in Session:route_groups():iter() do + pl[g:name()] = g + end + + --helper function to find default group option + function interrogate(t) + local v = "----" + for g in Session:route_groups():iter() do + for r in g:route_list():iter() do + if r:name() == t:name() then v = g:name() end + end + end return v + end + + function find_color(t) + local c = "----" + for k, v in pairs(rbow) do + if(t:presentation_info_ptr():color() == v) then c = k end + end return c + end + + --insert an entry into our dialog_options table for each track with appropriate info + for t in Session:get_tracks():iter() do + table.insert(dialog_options, { + type = "entry", key = t:name() .. ' n', col = 0, colspan = 1, default = t:name(), title = "" --@ToDo: Shorten Names so they can still see what track they're changing? + }) --name + table.insert(dialog_options, { + type = "dropdown", key = t:name() .. ' g', col = 1, colspan = 1, title = "", values = pl, default = interrogate(t) + }) --group + table.insert(dialog_options, { + type = "entry", key = t:name() .. ' cm', col = 2, colspan = 1, default = t:comment(), title = "" + }) --comment + table.insert(dialog_options, { + type = "dropdown", key = t:name() .. ' c', col = 3, colspan = 1, title = "", values = rbow, default = find_color(t) + }) --color + end + + table.insert(dialog_options, { + { type = "label", colspan="3", title = "" }, + { type = "label", colspan="3", title = "Note that this is a script which can be user-edited to match your needs." }, + { type = "label", colspan="3", title = "" }, + }) + + --run dialog_options + local rv = LuaDialog.Dialog("Track Organizer", dialog_options):run() + if not(rv) then goto script_end end + assert(rv, 'Dialog box was cancelled or is ' .. type(rv)) + + --begin track operation + for t in Session:get_tracks():iter() do + local cgrp = interrogate(t) + local name = rv[t:name() .. ' n' ] + local ngrp = rv[t:name() .. ' g' ] + local cmnt = rv[t:name() .. ' cm'] + local colr = rv[t:name() .. ' c' ] + + if t:name() ~= name then t:set_name(name) end + + if t:comment() ~= cmnt then t:set_comment(cmnt, nil) end + + if not(colr == "") then t:presentation_info_ptr():set_color(colr) end + + if type(ngrp) == "userdata" then + if cgrp ~= ngrp:name() then + ngrp:add(t) + end + end + + if type(ngrp) == "string" and not(ngrp == "") then + ngrp = Session:new_route_group(ngrp) + if cgrp ~= ngrp:name() then + ngrp:add(t) + end + end + end + + ::script_end:: +end end -- cgit v1.2.3