Add Lua script to collapse playlists
This commit is contained in:
parent
1321999aec
commit
b00baa8ac2
64
share/scripts/collapse_playlists.lua
Normal file
64
share/scripts/collapse_playlists.lua
Normal file
@ -0,0 +1,64 @@
|
||||
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
|
Loading…
Reference in New Issue
Block a user