2020-04-23 23:47:02 -04:00
|
|
|
ardour { ["type"] = "EditorAction", name = "Search and Jump to Marker",
|
2018-01-31 20:18:40 -05:00
|
|
|
license = "MIT",
|
|
|
|
author = "Ardour Team",
|
2020-04-23 23:47:02 -04:00
|
|
|
description = [[Jump to the first marker that matches a given name pattern]]
|
2018-01-31 20:18:40 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
function factory () return function ()
|
|
|
|
local keep = false
|
|
|
|
|
|
|
|
::restart::
|
|
|
|
|
|
|
|
local dlg = LuaDialog.Dialog ("Search and Jump to Marker",
|
|
|
|
{
|
|
|
|
{ type = "entry", key = "marker", default = '', title = "Marker Prefix" },
|
|
|
|
{ type = "checkbox", key = "keep", default = keep, title = "Keep Dialog Open" },
|
|
|
|
})
|
|
|
|
|
|
|
|
local rv = dlg:run()
|
|
|
|
if not rv then return end
|
|
|
|
|
|
|
|
keep = rv['keep']
|
|
|
|
|
|
|
|
if (rv['marker'] == "") then
|
|
|
|
if keep then goto restart end
|
|
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|
|
for l in Session:locations():list():iter() do
|
|
|
|
if l:is_mark() and string.find (l:name(), "^" .. rv['marker'] .. ".*$") then
|
2022-05-27 20:49:35 -04:00
|
|
|
Session:request_locate (l:start (), false, ARDOUR.LocateTransportDisposition.RollIfAppropriate, ARDOUR.TransportRequestSource.TRS_UI)
|
2018-01-31 20:18:40 -05:00
|
|
|
if keep then goto restart end
|
|
|
|
return
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
LuaDialog.Message ("Jump to Marker", "No marker matching the given pattern was found.", LuaDialog.MessageType.Warning, LuaDialog.ButtonType.Close):run ()
|
|
|
|
|
|
|
|
if keep then goto restart end
|
|
|
|
end end
|
|
|
|
|
|
|
|
|
|
|
|
function icon (params) return function (ctx, width, height, fg)
|
|
|
|
local mh = height - 3.5;
|
|
|
|
local m3 = width / 3;
|
|
|
|
local m6 = width / 6;
|
|
|
|
|
|
|
|
ctx:set_line_width (.5)
|
|
|
|
|
|
|
|
-- compare to gtk2_ardour/marker.cc "Marker"
|
|
|
|
ctx:set_source_rgba (.6, .6, .6, 1.0)
|
|
|
|
ctx:move_to (width / 2 - m6, 2)
|
|
|
|
ctx:rel_line_to (m3, 0)
|
|
|
|
ctx:rel_line_to (0, mh * 0.4)
|
|
|
|
ctx:rel_line_to (-m6, mh * 0.6)
|
|
|
|
ctx:rel_line_to (-m6, -mh * 0.6)
|
|
|
|
ctx:close_path ()
|
|
|
|
ctx:fill_preserve ()
|
|
|
|
ctx:set_source_rgba (.0, .0, .0, 1.0)
|
|
|
|
ctx:stroke ()
|
|
|
|
|
|
|
|
ctx:set_source_rgba (ARDOUR.LuaAPI.color_to_rgba (fg))
|
|
|
|
local txt = Cairo.PangoLayout (ctx, "ArdourMono ".. math.ceil(math.min (width, height) * .5) .. "px")
|
|
|
|
txt:set_text ("txt")
|
|
|
|
local tw, th = txt:get_pixel_size ()
|
|
|
|
ctx:move_to (.5 * (width - tw), .5 * (height - th))
|
|
|
|
txt:show_in_cairo_context (ctx)
|
|
|
|
end end
|