13
0
livetrax/scripts/select_every_2nd_region.lua

61 lines
1.7 KiB
Lua

ardour {
["type"] = "EditorAction",
name = "Region Select/2",
license = "MIT",
author = "Ardour Team",
description = [[select every 2nd region on all selected tracks]]
}
-- select every 2nd region on all selected tracks
function factory () return function ()
local sl = ArdourUI.SelectionList () -- empty selection list
local sel = Editor:get_selection () -- get current selection
-- for each selected track/bus..
for route in sel.tracks:routelist ():iter () do
-- consider only tracks
local track = route:to_track ()
if track:isnil() then
goto continue
end
local skip = false;
-- iterate over all regions of the given track
for region in track:playlist():region_list():iter() do
if skip then
-- skip every 2nd region
skip = false;
else
skip = true;
-- get RegionView (GUI object to be selected)
local rv = Editor:regionview_from_region (region)
-- add it to the list of Objects to be selected
sl:push_back (rv);
end
end
::continue::
end
-- set/replace current selection in the editor
Editor:set_selection (sl, ArdourUI.SelectionOp.Set);
end end
function icon (params) return function (ctx, width, height, fg)
local wh = math.min (width, height) * .5
ctx:set_line_width (1)
ctx:rectangle (wh * .25, wh * .75, wh * 1.5 , .5 * wh)
ctx:set_source_rgba (0, 0, 0, 1)
ctx:stroke_preserve ()
ctx:set_source_rgba (.9, .9, .9, 1)
ctx:fill ()
ctx:set_source_rgba (1, 0, 0, 1)
ctx:rectangle (.5 + math.ceil(wh * 0.25), .5 + math.ceil(wh * .75), math.floor(wh * .5) - 1, math.floor(.5 * wh) - 1)
ctx:stroke_preserve ()
ctx:rectangle (.5 + math.ceil(wh * 1.25), .5 + math.ceil(wh * .75), math.floor(wh * .5) - 1, math.floor(.5 * wh) - 1)
ctx:stroke_preserve ()
end end