1c8b91ed86
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.
71 lines
2.0 KiB
Lua
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
|