ardour/share/scripts/jump_to_marker.lua
Maciej Bliziński 1c8b91ed86
Keep the search term in the dialog box.
When user wants to keep the dialog box open, it's probably with the intention to edit the search term rather than typing it from scratch again.
2023-09-09 21:48:21 +02:00

71 lines
2.0 KiB
Lua

ardour { ["type"] = "EditorAction", name = "Search and Jump to Marker",
license = "MIT",
author = "Ardour Team",
description = [[Jump to the first marker that matches a given name pattern]]
}
function factory () return function ()
local keep = false
local search_term = ''
::restart::
local dlg = LuaDialog.Dialog ("Search and Jump to Marker",
{
{ type = "entry", key = "marker", default = search_term, 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
else
search_term = rv['marker']
end
for l in Session:locations():list():iter() do
if l:is_mark() and string.find (l:name(), "^" .. rv['marker'] .. ".*$") then
Session:request_locate (l:start ():samples (), false, ARDOUR.LocateTransportDisposition.RollIfAppropriate, ARDOUR.TransportRequestSource.TRS_UI)
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