mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 11:35:22 +09:00
192 lines
5.5 KiB
Lua
192 lines
5.5 KiB
Lua
--- @class ExpGui
|
|
local ExpGui = require("modules/exp_gui")
|
|
|
|
--- @class ExpGui.elements
|
|
local elements = {}
|
|
ExpGui.elements = elements
|
|
|
|
--- A flow which aligns its content as specified
|
|
elements.aligned_flow = ExpGui.element("aligned_flow")
|
|
:draw{
|
|
type = "flow",
|
|
name = ExpGui.property_from_arg("name"),
|
|
}
|
|
:style(function(def, element, parent, opts)
|
|
opts = opts or {}
|
|
local vertical_align = opts.vertical_align or "center"
|
|
local horizontal_align = opts.horizontal_align or "right"
|
|
return {
|
|
padding = { 1, 2 },
|
|
vertical_align = vertical_align,
|
|
horizontal_align = horizontal_align,
|
|
vertically_stretchable = vertical_align ~= "center",
|
|
horizontally_stretchable = horizontal_align ~= "center",
|
|
}
|
|
end)
|
|
|
|
--- A solid horizontal white bar element
|
|
elements.bar = ExpGui.element("bar")
|
|
:draw{
|
|
type = "progressbar",
|
|
value = 1,
|
|
}
|
|
:style(function(def, element, parent, width)
|
|
local style = element.style
|
|
style.color = { r = 255, g = 255, b = 255 }
|
|
style.height = 4
|
|
if width then
|
|
style.width = width
|
|
else
|
|
style.horizontally_stretchable = true
|
|
end
|
|
end)
|
|
|
|
--- A label which is centered
|
|
elements.centered_label = ExpGui.element("centered_label")
|
|
:draw{
|
|
type = "label",
|
|
caption = ExpGui.property_from_arg(2),
|
|
tooltip = ExpGui.property_from_arg(3),
|
|
}
|
|
:style{
|
|
horizontal_align = "center",
|
|
single_line = false,
|
|
width = ExpGui.property_from_arg(1),
|
|
}
|
|
|
|
--- A label which has two white bars on either side of it
|
|
elements.title_label = ExpGui.element("title_label")
|
|
:draw(function(def, parent, width, caption, tooltip)
|
|
local flow =
|
|
parent.add{
|
|
type = "flow"
|
|
}
|
|
|
|
flow.style.vertical_align = "center"
|
|
elements.bar(flow, width)
|
|
|
|
local label =
|
|
flow.add{
|
|
type = "label",
|
|
style = "frame_title",
|
|
caption = caption,
|
|
tooltip = tooltip,
|
|
}
|
|
|
|
elements.bar(flow)
|
|
|
|
return label
|
|
end)
|
|
|
|
--- A fixed size vertical scroll pane
|
|
elements.scroll_pane = ExpGui.element("scroll_pane")
|
|
:draw{
|
|
type = "scroll-pane",
|
|
name = ExpGui.property_from_arg(2),
|
|
direction = "vertical",
|
|
horizontal_scroll_policy = "never",
|
|
vertical_scroll_policy = "auto",
|
|
style = "scroll_pane_under_subheader",
|
|
}
|
|
:style{
|
|
padding = { 1, 3 },
|
|
maximal_height = ExpGui.property_from_arg(1),
|
|
horizontally_stretchable = true,
|
|
}
|
|
|
|
--- A fixed size vertical scroll pane containing a table
|
|
elements.scroll_table = ExpGui.element("scroll_table")
|
|
:draw(function(def, parent, height, column_count, scroll_name)
|
|
local scroll_pane = elements.scroll_pane(parent, height, scroll_name)
|
|
|
|
return scroll_pane.add{
|
|
type = "table",
|
|
name = "table",
|
|
column_count = column_count,
|
|
}
|
|
end)
|
|
:style{
|
|
padding = 0,
|
|
cell_padding = 0,
|
|
vertical_align = "center",
|
|
horizontally_stretchable = true,
|
|
}
|
|
|
|
--- A container frame
|
|
elements.container = ExpGui.element("container")
|
|
:draw(function(def, parent, width, container_name)
|
|
local container =
|
|
parent.add{
|
|
type = "frame",
|
|
name = container_name,
|
|
}
|
|
|
|
local style = container.style
|
|
style.horizontally_stretchable = false
|
|
style.minimal_width = width
|
|
style.padding = 2
|
|
|
|
return container.add{
|
|
type = "frame",
|
|
name = "frame",
|
|
direction = "vertical",
|
|
style = "inside_shallow_frame_packed",
|
|
}
|
|
end)
|
|
:style{
|
|
vertically_stretchable = false,
|
|
}
|
|
|
|
--- A frame within a container
|
|
elements.subframe_base = ExpGui.element("container_subframe")
|
|
:draw{
|
|
type = "frame",
|
|
name = ExpGui.property_from_arg(2),
|
|
style = ExpGui.property_from_arg(1),
|
|
}
|
|
:style{
|
|
padding = { 2, 4 },
|
|
use_header_filler = false,
|
|
horizontally_stretchable = true,
|
|
}
|
|
|
|
--- A header frame within a container
|
|
elements.header = ExpGui.element("container_header")
|
|
:draw(function(def, parent, opts)
|
|
opts = opts or {}
|
|
local subframe = elements.subframe_base(parent, "subheader_frame", opts.name)
|
|
|
|
if opts.caption then
|
|
subframe.add{
|
|
type = "label",
|
|
name = opts.label_name,
|
|
caption = opts.caption,
|
|
tooltip = opts.tooltip,
|
|
style = "frame_title",
|
|
}
|
|
end
|
|
|
|
return elements.aligned_flow(subframe, { name = "flow" })
|
|
end)
|
|
|
|
--- A footer frame within a container
|
|
elements.footer = ExpGui.element("container_footer")
|
|
:draw(function(def, parent, opts)
|
|
opts = opts or {}
|
|
local subframe = elements.subframe_base(parent, "subfooter_frame", opts.name)
|
|
|
|
if opts.caption then
|
|
subframe.add{
|
|
type = "label",
|
|
name = opts.label_name,
|
|
caption = opts.caption,
|
|
tooltip = opts.tooltip,
|
|
style = "frame_title",
|
|
}
|
|
end
|
|
|
|
return elements.aligned_flow(subframe, { name = "flow" })
|
|
end)
|
|
|
|
return elements
|