65 lines
2.1 KiB
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
|