summaryrefslogtreecommitdiff
path: root/scripts/jump_to_marker.lua
blob: c39c7f215ff6352049daa866eb253fd861aa8816 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
ardour { ["type"] = "EditorAction", name = "Jump to Marker",
	license     = "MIT",
	author      = "Ardour Team",
	description = [[Jump to the first marker matching a given pattern]]
}

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
			Session:request_locate (l:start())
			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