13
0
livetrax/share/scripts/collapse_playlists.lua

65 lines
2.1 KiB
Lua

ardour { ["type"] = "EditorAction", name = "Collapse Playlists",
license = "MIT",
author = "Ardour Team",
description = [[Add regions of all playlists to the current playlist of each selected track]]
}
function factory (params) return function ()
-- http://manual.ardour.org/lua-scripting/class_reference/#ArdourUI:Selection
local sel = Editor:get_selection ()
-- prepare undo operation
-- see http://manual.ardour.org/lua-scripting/class_reference/#ARDOUR:Session
Session:begin_reversible_command ("Collapse Playlists")
local add_undo = false -- keep track if something has changed
-- Track/Bus Selection -- iterate over all Editor-GUI selected tracks
-- http://manual.ardour.org/lua-scripting/class_reference/#ArdourUI:TrackSelection
for route in sel.tracks:routelist():iter() do
-- each of the items 'route' is-a
-- http://manual.ardour.org/lua-scripting/class_reference/#ARDOUR:Route
local track = route:to_track() -- see if it's a track
if track:isnil() then
-- if not, skip it
goto continue
end
-- get track's current playlist
-- http://manual.ardour.org/lua-scripting/class_reference/#ARDOUR:Playlist
local playlist = track:playlist()
-- clear existing changes, prepare "diff" of state for undo
playlist:to_stateful():clear_changes()
-- get and iterate over all playlists for the current track
for p in Session:playlists():playlists_for_track (track):iter() do
-- skip current active playlist
if (p ~= playlist) then
-- for each region of the playlist
for r in p:region_list():iter() do
-- add it to the current playlist
playlist:add_region (r, r:position(), 1, false, 0, 0, false)
end
end
end
-- collect undo data
if not Session:add_stateful_diff_command (playlist:to_statefuldestructible()):empty() then
-- is something has changed, we need to save it at the end.
add_undo = true
end
::continue::
end
-- all done, commit the combined Undo Operation
if add_undo then
-- the 'nil' Command here mean to use the collected diffs added above
Session:commit_reversible_command (nil)
else
Session:abort_reversible_command ()
end
end end