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