]> git.lizzy.rs Git - dragonfireclient.git/blob - games/devtest/mods/testformspec/formspec.lua
FormSpec: Add list spacing, slot size, and noclip (#10083)
[dragonfireclient.git] / games / devtest / mods / testformspec / formspec.lua
1 local color = minetest.colorize
2
3 local clip_fs = [[
4         style_type[label,button,image_button,item_image_button,
5                         tabheader,scrollbar,table,animated_image
6                         ,field,textarea,checkbox,dropdown;noclip=%c]
7
8         label[0,0;A clipping test]
9         button[0,1;3,0.8;clip_button;A clipping test]
10         image_button[0,2;3,0.8;testformspec_button_image.png;clip_image_button;A clipping test]
11         item_image_button[0,3;3,0.8;testformspec:item;clip_item_image_button;A clipping test]
12         tabheader[0,4.7;3,0.63;clip_tabheader;Clip,Test,Text,Tabs;1;false;false]
13         field[0,5;3,0.8;clip_field;Title;]
14         textarea[0,6;3,1;clip_textarea;Title;]
15         checkbox[0,7.5;clip_checkbox;This is a test;true]
16         dropdown[0,8;3,0.8;clip_dropdown;Select An Item,One,Two,Three,Four,Five;1]
17         scrollbar[0,9;3,0.8;horizontal;clip_scrollbar;3]
18         tablecolumns[text;text]
19         table[0,10;3,1;clip_table;one,two,three,four;1]
20         animated_image[-0.5,11;4.5,1;clip_animated_image;testformspec_animation.png;4;100]
21 ]]
22
23 local tabheaders_fs = [[
24         tabheader[0,0;10,0.63;tabs_opaque;Opaque,Without,Border;1;false;false]
25         tabheader[0,1;10,0.63;tabs_opaque_border;Opaque,With,Border;1;false;true]
26         tabheader[0,2;10,0.63;tabs_transparent;Transparent,Without,Border;1;true;false]
27         tabheader[0,3;10,0.63;tabs_transparent_border;Transparent,With,Border;1;true;true]
28         tabheader[0,4;tabs_default;Default,Tabs;1]
29         tabheader[0,6;10,0.5;tabs_size1;Height=0.5;1;false;false]
30         tabheader[2,6;10,0.75;tabs_size1;Height=0.75;1;false;false]
31         tabheader[4,6;10,1;tabs_size2;Height=1;1;false;false]
32         tabheader[6,6;10,1.25;tabs_size2;Height=1.25;1;false;false]
33         tabheader[8,6;10,1.5;tabs_size2;Height=1.5;1;false;false]
34 ]]
35
36 local inv_style_fs = [[
37         style_type[list;noclip=true]
38         list[current_player;main;-1.125,-1.125;2,2]
39         style_type[list;spacing=.25,.125;size=.75,.875]
40         list[current_player;main;3,.5;3,3]
41         style_type[list;spacing=0;size=1]
42         list[current_player;main;.5,4;8,4]
43 ]]
44
45 local hypertext_basic = [[
46 <bigger>Normal test</bigger>
47 This is a normal text.
48
49 <bigger><mono>style</mono> test</bigger>
50 <style color=#FFFF00>Yellow text.</style> <style color=#FF0000>Red text.</style>
51 <style size=24>Size 24.</style> <style size=16>Size 16</style>. <style size=12>Size 12.</style>
52 <style font=normal>Normal font.</style> <style font=mono>Mono font.</style>
53
54 <bigger>Tag test</bigger>
55 <normal>normal</normal>
56 <mono>mono</mono>
57 <b>bold</b>
58 <i>italic</i>
59 <u>underlined</u>
60 <big>big</big>
61 <bigger>bigger</bigger>
62 <left>left</left>
63 <center>center</center>
64 <right>right</right>
65 <justify>justify. Here comes a blind text: Lorem testum dolor sit amet consecutor celeron fiftifahivus e shadoninia e smalus jokus anrus relsocutoti rubenwardus. Erasputinus hara holisti dominus wusi. Grumarinsti erltusmuate ol fortitusti fla flo, blani burki e sfani fahif. Ultae ratii, e megus gigae don anonimus. Grinus dimondus krockus e nore. Endus finalus nowus comus endus o blindus tekstus.</justify>
66
67 <bigger>Custom tag test</bigger>
68 <tag name=t_green color=green>
69 <tag name=t_hover hovercolor=yellow>
70 <tag name=t_size size=24>
71 <tag name=t_mono font=mono>
72 <tag name=t_multi color=green font=mono size=24>
73 <t_green>color=green</t_green>
74 Action: <action name=color><t_green>color=green</t_green></action>
75 Action: <action name=hovercolor><t_hover>hovercolor=yellow</t_hover></action>
76 <t_size>size=24</t_size>
77 <t_mono>font=mono</t_mono>
78 <t_multi>color=green font=mono size=24</t_multi>
79
80 <bigger><mono>action</mono> test</bigger>
81 <action name=action_test>action</action>
82
83 <bigger><mono>img</mono> test</bigger>
84 Normal:
85 <img name=testformspec_item.png>
86 <mono>width=48 height=48</mono>:
87 <img name=testformspec_item.png width=48 height=48>
88 <mono>float=left</mono>:
89 <img name=testformspec_item.png float=left>
90 <mono>float=right</mono>:
91 <img name=testformspec_item.png float=right>
92
93 <bigger><mono>item</mono> test</bigger>
94 Normal:
95 <item name=testformspec:node>
96 <mono>width=48 height=48</mono>
97 <item name=testformspec:node width=48 height=48>
98 <mono>angle=30,0,0</mono>:
99 <item name=testformspec:node angle=30,0,0>
100 <mono>angle=0,30,0</mono>:
101 <item name=testformspec:node angle=0,30,0>
102 <mono>angle=0,0,30</mono>:
103 <item name=testformspec:node angle=0,0,30>
104 <mono>rotate=yes</mono>:
105 <item name=testformspec:node rotate=yes>
106 <mono>rotate=100,0,0</mono>:
107 <item name=testformspec:node rotate=100,0,0>
108 <mono>rotate=0,100,0</mono>:
109 <item name=testformspec:node rotate=0,100,0>
110 <mono>rotate=0,0,100</mono>:
111 <item name=testformspec:node rotate=0,0,100>
112 <mono>rotate=50,75,100</mono>:
113 <item name=testformspec:node rotate=50,75,100>
114 <mono>angle=-30,-45,90 rotate=100,150,-50</mono>:
115 <item name=testformspec:node angle=-30,-45,90 rotate=100,150,-50>]]
116
117 local hypertext_global = [[
118 <global background=gray margin=20 valign=bottom halign=right color=pink hovercolor=purple size=12 font=mono>
119 This is a test of the global tag. The parameters are:
120 background=gray margin=20 valign=bottom halign=right color=pink hovercolor=purple size=12 font=mono
121 <action name=global>action</action>]]
122
123 local hypertext_fs = "hypertext[0,0;11,9;hypertext;"..minetest.formspec_escape(hypertext_basic).."]"..
124         "hypertext[0,9.5;11,2.5;hypertext;"..minetest.formspec_escape(hypertext_global).."]"
125
126 local style_fs = [[
127         style[one_btn1;bgcolor=red;textcolor=yellow;bgcolor_hovered=orange;
128                 bgcolor_pressed=purple]
129         button[0,0;2.5,0.8;one_btn1;Button]
130
131         style[one_btn2;border=false;textcolor=cyan] ]]..
132         "button[0,1.05;2.5,0.8;one_btn2;Text " .. color("#FF0", "Yellow") .. [[]
133
134         style[one_btn3;bgimg=testformspec_button_image.png;bgimg_hovered=testformspec_hovered.png;
135                 bgimg_pressed=testformspec_pressed.png]
136         button[0,2.1;1,1;one_btn3;Border]
137
138         style[one_btn4;bgimg=testformspec_button_image.png;bgimg_hovered=testformspec_hovered.png;
139                 bgimg_pressed=testformspec_pressed.png;border=false]
140         button[1.25,2.1;1,1;one_btn4;NoBor]
141
142         style[one_btn5;bgimg=testformspec_button_image.png;bgimg_hovered=testformspec_hovered.png;
143                 bgimg_pressed=testformspec_pressed.png;border=false;alpha=false]
144         button[0,3.35;1,1;one_btn5;Alph]
145
146         style[one_btn6;border=true]
147         image_button[0,4.6;1,1;testformspec_button_image.png;one_btn6;Border]
148
149         style[one_btn7;border=false]
150         image_button[1.25,4.6;1,1;testformspec_button_image.png;one_btn7;NoBor]
151
152         style[one_btn8;border=false]
153         image_button[0,5.85;1,1;testformspec_button_image.png;one_btn8;Border;false;true;testformspec_pressed.png]
154
155         style[one_btn9;border=true]
156         image_button[1.25,5.85;1,1;testformspec_button_image.png;one_btn9;NoBor;false;false;testformspec_pressed.png]
157
158         style[one_btn10;alpha=false]
159         image_button[0,7.1;1,1;testformspec_button_image.png;one_btn10;NoAlpha]
160
161         style[one_btn11;alpha=true]
162         image_button[1.25,7.1;1,1;testformspec_button_image.png;one_btn11;Alpha]
163
164         style[one_btn12;border=true]
165         item_image_button[0,8.35;1,1;testformspec:item;one_btn12;Border]
166
167         style[one_btn13;border=false]
168         item_image_button[1.25,8.35;1,1;testformspec:item;one_btn13;NoBor]
169
170         style[one_btn14;border=false;bgimg=testformspec_bg.png;fgimg=testformspec_button_image.png]
171         style[one_btn14:hovered;bgimg=testformspec_bg_hovered.png;fgimg=testformspec_hovered.png;textcolor=yellow]
172         style[one_btn14:pressed;bgimg=testformspec_bg_pressed.png;fgimg=testformspec_pressed.png;textcolor=blue]
173         style[one_btn14:hovered+pressed;textcolor=purple]
174         image_button[0,9.6;1,1;testformspec_button_image.png;one_btn14;Bg]
175
176         style[one_btn15;border=false;bgcolor=#1cc;bgimg=testformspec_bg.png;bgimg_hovered=testformspec_bg_hovered.png;bgimg_pressed=testformspec_bg_pressed.png]
177         item_image_button[1.25,9.6;1,1;testformspec:item;one_btn15;Bg]
178
179         style[one_btn16;border=false;bgimg=testformspec_bg_9slice.png;bgimg_hovered=testformspec_bg_9slice_hovered.png;bgimg_pressed=testformspec_bg_9slice_pressed.png;bgimg_middle=4,6]
180         button[2.5,9.6;2,1;one_btn16;9-Slice Bg]
181
182
183
184         container[2.75,0]
185
186         style[one_tb1;textcolor=Yellow]
187         tabheader[0,3;2.5,0.63;one_tb1;Yellow,Text,Tabs;1;false;false]
188
189         style[one_f1;textcolor=yellow]
190         field[0,4.25;2.5,0.8;one_f1;Field One;Yellow Text]
191
192         style[one_f2;border=false;textcolor=cyan]
193         field[0,5.75;2.5,0.8;one_f2;Field Two;Borderless Cyan Text]
194
195         style[one_f3;textcolor=yellow]
196         textarea[0,7.025;2.5,0.8;one_f3;Label;]] ..
197                 minetest.formspec_escape("Yellow Text\nLine two") .. [[ ]
198
199         style[one_f4;border=false;textcolor=cyan]
200         textarea[0,8.324999999999999;2.5,0.8;one_f4;Label;]] ..
201                 minetest.formspec_escape("Borderless Cyan Text\nLine two") .. [[ ]
202
203         container_end[]
204 ]]
205
206 local scroll_fs =
207         "button[8.5,1;4,1;outside;Outside of container]"..
208         "box[1,1;8,6;#00aa]"..
209         "scroll_container[1,1;8,6;scrbar;vertical]"..
210                 "button[0,1;1,1;lorem;Lorem]"..
211                 "button[0,10;1,1;ipsum;Ipsum]"..
212                 "pwdfield[2,2;1,1;lorem2;Lorem]"..
213                 "list[current_player;main;4,4;1,5;]"..
214                 "box[2,5;3,2;#ffff00]"..
215                 "image[1,10;3,2;testformspec_item.png]"..
216                 "image[3,1;testformspec_item.png]"..
217                 "item_image[2,6;3,2;testformspec:node]"..
218                 "label[2,15;bla Bli\nfoo bar]"..
219                 "item_image_button[2,3;1,1;testformspec:node;itemimagebutton;ItemImageButton]"..
220                 "tooltip[0,11;3,2;Buz;#f00;#000]"..
221                 "box[0,11;3,2;#00ff00]"..
222                 "hypertext[3,13;3,3;;" .. hypertext_basic .. "]" ..
223                 "container[0,18]"..
224                         "box[1,2;3,2;#0a0a]"..
225                         "scroll_container[1,2;3,2;scrbar2;horizontal;0.06]"..
226                                 "button[0,0;6,1;butnest;Nest]"..
227                                 "label[10,0.5;nest]"..
228                         "scroll_container_end[]"..
229                         "scrollbar[1,0;3.5,0.3;horizontal;scrbar2;0]"..
230                 "container_end[]"..
231                 "dropdown[0,6;2;hmdrpdwn;apple,bulb;1]"..
232                 "image_button[0,4;2,2;testformspec_button_image.png;imagebutton;bbbbtt;false;true;testformspec_pressed.png]"..
233                 "box[1,22.5;4,1;#a00a]"..
234         "scroll_container_end[]"..
235         "scrollbaroptions[max=170]".. -- lowest seen pos is: 0.1*170+6=23 (factor*max+height)
236         "scrollbar[7.5,0;0.3,4;vertical;scrbar;0]"..
237         "scrollbar[8,0;0.3,4;vertical;scrbarhmmm;0]"..
238         "dropdown[0,6;2;hmdrpdwnnn;Outside,of,container;1]"
239
240 --style_type[label;textcolor=green]
241 --label[0,0;Green]
242 --style_type[label;textcolor=blue]
243 --label[0,1;Blue]
244 --style_type[label;textcolor=;border=true]
245 --label[1.2,0;Border]
246 --style_type[label;border=true;bgcolor=red]
247 --label[1.2,1;Background]
248 --style_type[label;border=;bgcolor=]
249 --label[0.75,2;Reset]
250
251
252 local pages = {
253         -- Real Coordinates
254         [[
255                 formspec_version[3]
256                 size[12,13]
257                 image_button[0,0;1,1;logo.png;rc_image_button_1x1;1x1]
258                 image_button[1,0;2,2;logo.png;rc_image_button_2x2;2x2]
259                 button[0,2;1,1;rc_button_1x1;1x1]
260                 button[1,2;2,2;rc_button_2x2;2x2]
261                 item_image[0,4;1,1;air]
262                 item_image[1,4;2,2;air]
263                 item_image_button[0,6;1,1;testformspec:node;rc_item_image_button_1x1;1x1]
264                 item_image_button[1,6;2,2;testformspec:node;rc_item_image_button_2x2;2x2]
265                 field[3,.5;3,.5;rc_field;Field;text]
266                 pwdfield[6,.5;3,1;rc_pwdfield;Password Field]
267                 field[3,1;3,1;;Read-Only Field;text]
268                 textarea[3,2;3,.5;rc_textarea_small;Textarea;text]
269                 textarea[6,2;3,2;rc_textarea_big;Textarea;text\nmore text]
270                 textarea[3,3;3,1;;Read-Only Textarea;text\nmore text]
271                 textlist[3,4;3,2;rc_textlist;Textlist,Perfect Coordinates;1;false]
272                 tableoptions[highlight=#ABCDEF75;background=#00000055;border=false]
273                 table[6,4;3,2;rc_table;Table,Cool Stuff,Foo,Bar;2]
274                 dropdown[3,6;3,1;rc_dropdown_small;This,is,a,dropdown;1]
275                 dropdown[6,6;3,2;rc_dropdown_big;I,am,a,bigger,dropdown;5]
276                 image[0,8;3,2;ignore.png]
277                 box[3,7;3,1;#00A3FF]
278                 checkbox[3,8;rc_checkbox_1;Check me!;false]
279                 checkbox[3,9;rc_checkbox_2;Uncheck me now!;true]
280                 scrollbar[0,11.5;11.5,.5;horizontal;rc_scrollbar_horizontal;500]
281                 scrollbar[11.5,0;.5,11.5;vertical;rc_scrollbar_vertical;0]
282                 list[current_player;main;6,8;3,2;1]
283                 button[9,0;2.5,1;rc_empty_button_1;]
284                 button[9,1;2.5,1;rc_empty_button_2;]
285                 button[9,2;2.5,1;rc_empty_button_3;] ]]..
286                 "label[9,0.5;This is a label.\nLine\nLine\nLine\nEnd]"..
287                 [[button[9,3;1,1;rc_empty_button_4;]
288                 vertlabel[9,4;VERT]
289                 label[10,3;HORIZ]
290                 tabheader[8,0;6,0.65;rc_tabheader;Tab 1,Tab 2,Tab 3,Secrets;1;false;false]
291         ]],
292         -- Style
293
294                 "formspec_version[3]size[12,13]" ..
295                 ("label[0.375,0.375;Styled - %s %s]"):format(
296                         color("#F00", "red text"),
297                         color("#77FF00CC", "green text")) ..
298                 "label[6.375,0.375;Unstyled]" ..
299                 "box[0,0.75;12,0.1;#999]" ..
300                 "box[6,0.85;0.1,11.15;#999]" ..
301                 "container[0.375,1.225]" ..
302                 style_fs ..
303                 "container_end[]container[6.375,1.225]" ..
304                 style_fs:gsub("one_", "two_"):gsub("style%[[^%]]+%]", ""):gsub("style_type%[[^%]]+%]", "") ..
305                 "container_end[]",
306
307         -- Noclip
308                 "formspec_version[3]size[12,13]" ..
309                 "label[0.1,0.5;Clip]" ..
310                 "container[-2.5,1]" .. clip_fs:gsub("%%c", "false") .. "container_end[]" ..
311                 "label[11,0.5;Noclip]" ..
312                 "container[11.5,1]" .. clip_fs:gsub("%%c", "true") .. "container_end[]",
313
314         -- Hypertext
315                 "size[12,13]real_coordinates[true]" ..
316                 "container[0.5,0.5]" .. hypertext_fs .. "container_end[]",
317
318         -- Tabheaders
319                 "size[12,13]real_coordinates[true]" ..
320                 "container[0.5,1.5]" .. tabheaders_fs .. "container_end[]",
321
322                 -- Inv
323                 "size[12,13]real_coordinates[true]" ..
324                 "container[0.5,1.5]" .. inv_style_fs .. "container_end[]",
325
326         -- Animation
327                 [[
328                         formspec_version[3]
329                         size[12,13]
330                         animated_image[0.5,0.5;1,1;;testformspec_animation.png;4;100]
331                         animated_image[0.5,1.75;1,1;;testformspec_animation.jpg;4;100]
332                         animated_image[1.75,0.5;1,1;;testformspec_animation.png;100;100]
333                         animated_image[3,0.5;1,1;ani_img_1;testformspec_animation.png;4;1000]
334                         button[4.25,0.5;1,1;ani_btn_1;Current
335 Number]
336                         animated_image[3,1.75;1,1;ani_img_2;testformspec_animation.png;4;1000;2]
337                         button[4.25,1.75;1,1;ani_btn_2;Current
338 Number]
339                         animated_image[3,3;1,1;;testformspec_animation.png;4;0]
340                         animated_image[3,4.25;1,1;;testformspec_animation.png;4;0;3]
341                         animated_image[5.5,0.5;5,2;;testformspec_animation.png;4;100]
342                         animated_image[5.5,2.75;5,2;;testformspec_animation.jpg;4;100]
343
344                         style[m1;bgcolor=black]
345                         model[0.5,6;4,4;m1;testformspec_character.b3d;testformspec_character.png]
346                         model[5,6;4,4;m2;testformspec_chest.obj;default_chest_top.png,default_chest_top.png,default_chest_side.png,default_chest_side.png,default_chest_front.png,default_chest_inside.png;30,1;true;true]
347                 ]],
348
349         -- Scroll containers
350                 "formspec_version[3]size[12,13]" ..
351                 scroll_fs,
352 }
353
354 local function show_test_formspec(pname, page_id)
355         page_id = page_id or 2
356
357         local fs = pages[page_id] .. "tabheader[0,0;8,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Anim,ScrollC;" .. page_id .. ";false;false]"
358
359         minetest.show_formspec(pname, "testformspec:formspec", fs)
360 end
361
362 minetest.register_on_player_receive_fields(function(player, formname, fields)
363         if formname ~= "testformspec:formspec" then
364                 return false
365         end
366
367
368         if fields.maintabs then
369                 show_test_formspec(player:get_player_name(), tonumber(fields.maintabs))
370                 return true
371         end
372
373         if fields.ani_img_1 and fields.ani_btn_1 then
374                 minetest.chat_send_player(player:get_player_name(), "ani_img_1 = " .. tostring(fields.ani_img_1))
375                 return true
376         elseif fields.ani_img_2 and fields.ani_btn_2 then
377                 minetest.chat_send_player(player:get_player_name(), "ani_img_2 = " .. tostring(fields.ani_img_2))
378                 return true
379         end
380
381         if fields.hypertext then
382                 minetest.chat_send_player(player:get_player_name(), "Hypertext action received: " .. tostring(fields.hypertext))
383                 return true
384         end
385 end)
386
387 minetest.register_chatcommand("test_formspec", {
388         params = "",
389         description = "Open the test formspec",
390         func = function(name)
391                 if not minetest.get_player_by_name(name) then
392                         return false, "You need to be online!"
393                 end
394
395                 show_test_formspec(name)
396                 return true
397         end,
398 })