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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
local sformat = string.format
local fsescape = minetest.formspec_escape
local function make_list(entries)
local t = {}
for k, v in ipairs(entries) do
t[k] = fsescape(v)
end
return table.concat(t, ",")
end
local function S_wrapper(f, i0)
return function(...)
local args = {...}
args[i0] = attrans(unpack(args,i0))
return f(unpack(args,1,i0))
end
end
local function f_button(x, y, w, id, text)
return sformat("button[%f,%f;%f,0.75;%s;%s]", x, y, w, id, text)
end
local function f_checkbox(x, y, name, selected, label)
return sformat("checkbox[%f,%f;%s;%s;%s]", x, y+0.25, name, label, selected and "true" or "false")
end
local function f_button_exit(x, y, w, id, text)
return sformat("button_exit[%f,%f;%f,0.75;%s;%s]", x, y, w, id, text)
end
local function f_dropdown(x, y, w, id, entries, sel, indexed)
return sformat("dropdown[%f,%f;%f,0.75;%s;%s;%d%s]",
x, y, w, id, make_list(entries),
sel or 1,
indexed and ";true" or "")
end
local function f_image_button(x, y, w, h, texture, id, label, noclip, drawborder, pressed)
local st = {string.format("%f,%f;%f,%f;%s;%s;%s", x, y, w, h, fsescape(texture), fsescape(id), fsescape(label))}
if pressed then
st[#st+1] = tostring(noclip or false)
st[#st+1] = tostring(drawborder or false)
st[#st+1] = fsescape(pressed)
end
return sformat("image_button[%s]", table.concat(st, ";"))
end
local function f_image_button_exit(x, y, w, h, texture, id, label)
local st = {string.format("%f,%f;%f,%f;%s;%s;%s", x, y, w, h, fsescape(texture), fsescape(id), fsescape(label))}
return sformat("image_button_exit[%s]", table.concat(st, ";"))
end
local function f_label(x, y, text)
return sformat("label[%f,%f;%s]", x, y+0.25, fsescape(text))
end
local function f_field_aux(x, y, w, id, default)
return sformat("field[%f,%f;%f,0.75;%s;;%s]", x, y, w, id, default)
end
local function f_field(x, y, w, id, label, default)
return f_label(x, y-0.5, label) .. f_field_aux(x, y, w, id, default)
end
local function f_tabheader(x, y, w, h, id, entries, sel, transparent, border)
local st = {string.format("%f,%f",x, y)}
if h then
if w then
st[#st+1] = string.format("%f,%f", w, h)
else
st[#st+1] = tostring(h)
end
end
st[#st+1] = tostring(id)
st[#st+1] = make_list(entries)
st[#st+1] = tostring(sel)
if transparent ~= nil then
st[#st+1] = tostring(transparent)
if border ~= nil then
st[#st+1] = tostring(border)
end
end
return string.format("tabheader[%s]", table.concat(st, ";"))
end
local function f_textlist(x, y, w, h, id, entries, sel, transparent)
local st = {string.format("%f,%f;%f,%f;%s;%s", x, y, w, h, id, make_list(entries))}
if sel then
st[#st+1] = tostring(sel)
st[#st+1] = tostring(transparent or false)
end
return string.format("textlist[%s]", table.concat(st, ";"))
end
return {
button = f_button,
S_button = S_wrapper(f_button, 5),
checkbox = f_checkbox,
S_checkbox = S_wrapper(f_checkbox, 5),
button_exit = f_button_exit,
S_button_exit = S_wrapper(f_button_exit, 5),
dropdown = f_dropdown,
field = f_field,
image_button = f_image_button,
image_button_exit = f_image_button_exit,
label = f_label,
S_label = S_wrapper(f_label, 3),
tabheader = f_tabheader,
textlist = f_textlist,
}
|