Examples
Here you can find a few examples of GUIBuilder windows.
Simple Example
This is a simple example window with two tabs, an text info tab, and a config tab. The config tab has one of each element type.
local Tinkr = ... local Builder = Tinkr.Util.GUIBuilder:New { config = "example_simple"} local TabGroup = Builder:TabGroup { key = 'tab_group', tabs = { Builder:Tab { title = "Info", content = { Builder:Text "This is an example GUI Builder window. It allows for easy creation of complex GUIs. All values, selected tabs, groups, positions, etc. are persisted and stored as JSON.", Builder:Spacer { }, Builder:Text "All elements emit events that can be listened to. Bindings are two way as well, which means you can also update the GUI from outside sources.", Builder:Spacer { }, Builder:Text "We hope you find this utility helpfull and wait to see what awesome things the community can make using it.", } }, Builder:Tab { title = "Config", content = { Builder:Checkbox { key = "checkbox_a", label = "Checkbox A", description = "Description for Checkbox A." }, Builder:Spacer { }, Builder:Checkbox { tristate = true, key = "tribox_a", label = "Tri State A", default = "yes" }, Builder:Spacer { }, Builder:Radio { key = "radio_a", values = { option_a = "Option A", option_b = "Option B", option_c = "Option C", option_d = "Option D" } }, Builder:Spacer { }, Builder:EditBox { key = "editbox_c", label = "Edit Box C", placeholder = "Placeholder Value", description = "This input requires you to click " .. OKAY, button = true }, Builder:Spacer { }, Builder:Dropdown { key = 'dropdown_a', label = "Example Dropdown A", values = { option_a = "Option A", option_b = "Option B", option_c = "Option C", option_d = "Option D", option_e = "Option E", } }, Builder:Spacer { }, Builder:Slider { key = 'slider_a', label = "Example Slider A", description = "This slider ranges from 0% (0) to 100% (1).", }, Builder:Spacer { }, Builder:ColorPicker { key = 'color_a', label = "Example Color Picker A", description = "This does not include an alpha value." }, } } }} local Window = Builder:Window { key = "gui_example", title = "GUI Example", width = 350, height = 500, content = { TabGroup }} Builder:Build(Window)
Complete Example
This example showcases every available element and configuration option. Use this as a reference if you work best from examples.
local Tinkr = ... local Builder = Tinkr.Util.GUIBuilder:New { config = "example_builder"} local SimpleCheckboxes = Builder:Group { title = "Simple Checkboxes", content = { Builder:Text "Checkboxes allow you to have 2 states (yes and no) which can be used for enabling or disabling functionality.", Builder:Spacer { }, Builder:Checkbox { key = "checkbox_a", label = "Checkbox A", description = "Description for Checkbox A." }, Builder:Checkbox { key = "checkbox_b", label = "Checkbox B", description = "Description for Checkbox B." }, Builder:Checkbox { key = "checkbox_c", label = "Checkbox C" } }} local TriStateCheckboxes = Builder:Group { title = "Tri State Checkboxes", content = { Builder:Text "Tri State checkboxes allow you to have 3 states (yes, no and half) which can be useful for showing that something is partially enabled.", Builder:Spacer { }, Builder:Checkbox { tristate = true, key = "tribox_a", label = "Tri State A", default = "yes" }, Builder:Checkbox { tristate = true, key = "tribox_b", label = "Tri State B", default = "half" }, Builder:Checkbox { tristate = true, key = "tribox_c", label = "Tri State C", default = "no" } }} local RadioCheckboxes = Builder:Group { title = "Radio Checkboxes", content = { Builder:Text "Radios allow you to select between a set of options, much like a dropdown but presented in a different way.", Builder:Spacer { }, Builder:Radio { key = "radio_a", values = { option_a = "Option A", option_b = "Option B", option_c = "Option C", option_d = "Option D" } }, Builder:Spacer { }, Builder:Text "You can also force radios to be stacked instead of displayed inline.", Builder:Spacer { height = 14 }, Builder:Radio { key = "radio_b", stacked = true, values = { option_a = "Option A", option_b = "Option B", option_c = "Option C", option_d = "Option D" } } }} local SingleLineEditBoxGroup = Builder:Group { title = "Single Line EditBoxes", content = { Builder:EditBox { key = "editbox_a", label = "Edit Box A", description = "This editbox has a description with it." }, Builder:EditBox { key = "editbox_b", label = "Edit Box B", placeholder = "This editbox has a placeholder value" }, Builder:EditBox { key = "editbox_c", label = "Edit Box C", placeholder = "Placeholder Value", description = "This input requires you to click " .. OKAY, button = true } }} local MultiLineEditBoxGroup = Builder:Group { title = "Multi-Line EditBoxes", content = { Builder:Rows { Builder:Columns { Builder:EditBox { key = "multi_editbox_a", label = "Edit Box A", multiline = true, lines = 6, placeholder = "Placeholder value", description = "This is a multi-line edit box.", button = true, }, Builder:EditBox { key = "multi_editbox_b", label = "Edit Box B", multiline = true, lines = 6, placeholder = "Placeholder value", description = "This is a multi-line edit box.", } } } }} local DropdownGroup = Builder:Group { title = "Standard Dropdowns", content = { Builder:Rows { Builder:Columns { Builder:Dropdown { key = 'dropdown_a', label = "Example Dropdown A", values = { option_a = "Option A", option_b = "Option B", option_c = "Option C", option_d = "Option D", option_e = "Option E", } }, Builder:Dropdown { key = 'dropdown_b', label = "Example Dropdown B", multi = true, description = "This dropdown allows selecting multiple values.", values = { option_a = "Option A", option_b = "Option B", option_c = "Option C", option_d = "Option D", option_e = "Option E", } } } } }} local SliderGroup = Builder:Group { title = "Sliders", content = { Builder:Rows { Builder:Columns { Builder:Slider { key = 'slider_a', label = "Example Slider A", description = "This slider ranges from 0% (0) to 100% (1).", }, Builder:Slider { key = 'slider_b', label = "Example Slider B", description = "This slider ranges from 25 to 75.", min = 25, max = 75, step = 1, default = 50, percent = false } } } }} local ColorPickerGroup = Builder:Group { title = "Color Pickers", content = { Builder:Rows { Builder:Columns { Builder:ColorPicker { key = 'color_a', label = "Example Color Picker A", description = "This does not include an alpha value." }, Builder:ColorPicker { key = 'color_b', label = "Example Color Picker B", description = "This includes an alpha value.", alpha = true, default = "#cafebabe" }, } } }} local TabGroup = Builder:TabGroup { key = "input_tabs", tabs = { Builder:Tab { title = "Checkboxes", content = { SimpleCheckboxes, TriStateCheckboxes, RadioCheckboxes } }, Builder:Tab { title = "Input Boxes", content = { SingleLineEditBoxGroup, MultiLineEditBoxGroup } }, Builder:Tab { title = "Dropdowns", content = { DropdownGroup } }, Builder:Tab { title = "Sliders", content = { SliderGroup } }, Builder:Tab { title = "Color Pickers", content = { ColorPickerGroup } } }} local HTMLTypographyGroup = Builder:SimpleGroup { Builder:HTML [[ <br/> <img src="Interface\Glues\PROMOTIONS\enUS-SBC-Logo" align="center" width="256" height="128" /> <br/> <h1>This is an H1 element</h1> <p>This is a paragraph element. It contains text.</p> <br/> <h2>This is an H2 element</h2> <p>This is yes another paragraph element. It contains even more text.</p> <br/> <h3>Here is an H3 element</h3> <p>This is <a href="https://tinkr.site/">a link</a>, clicking it will open the URL in your browser.</p> <br/> ]]} local TypographyTabGroup = Builder:TabGroup { key = "typography_tabs", tabs = { Builder:Tab { title = "Formatting", content = { Builder:Padding { padding = 5, content = { Builder:Rows { Builder:Text [[ This is a simple block of text, you can write words here. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ]], Builder:Spacer {}, Builder:Text "Ut enim ad minim veniam, quis nostrud ... in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", Builder:Spacer {}, Builder:Columns { Builder:Image { image = "Interface\\Glues\\PROMOTIONS\\enUS-SBC-Logo", width = 256, height = 128, fit = true }, Builder:Padding { padding = 5, content = { Builder:Text "Ut enim ad minim veniam, quis nostrud exercitation ullamco ... in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." } } }, Builder:Columns { Builder:Text { text = "You can change the font and size of the text using options. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", size = 14, font = "Fonts\\MORPHEUS.TTF" }, Builder:Text { text = "Color can be applied by passing a hex value. This is optional and text will be white by default.", size = 14, font = "Fonts\\FRIZQT__.TTF", color = "3489eb", } }, }, } } } }, Builder:Tab { title = "HTML", content = { HTMLTypographyGroup } } }} local TreeGroup = Builder:TreeGroup { key = "example_tree", branches = { Builder:TreeBranch { title = "Input", icon = 134063, content = { TabGroup } }, Builder:TreeBranch { title = "Typography", icon = 134332, content = { TypographyTabGroup } } }} local Window = Builder:Window { key = "example_window", title = "GUI Builder Kitchen Sink", width = 800, height = 480, content = { TreeGroup }} Builder:Build(Window)