Start converting GUI modules

This commit is contained in:
Cooldude2606
2025-01-15 22:32:49 +00:00
parent 88a47e3edc
commit bd6781b3a0
14 changed files with 88 additions and 144 deletions

View File

@@ -1,10 +1,11 @@
--- Makes trees which are marked for decon "decay" quickly to allow faster building
-- @addon Tree-Decon
local Event = require("modules/exp_legacy/utils/event") --- @dep utils.event
local Storage = require("modules/exp_util/storage")
local Gui = require("modules/exp_gui")
local Event = require("modules/exp_legacy/utils/event") --- @dep utils.event
local Roles = require("modules.exp_legacy.expcore.roles") --- @dep expcore.roles
local Gui = require("modules.exp_legacy.expcore.gui") --- @dep expcore.gui
local PlayerData = require("modules.exp_legacy.expcore.player_data") --- @dep expcore.player_data
-- Storage queue used to store trees that need to be removed, also cache for player roles
@@ -34,13 +35,20 @@ end
local HasEnabledDecon = PlayerData.Settings:combine("HasEnabledDecon")
HasEnabledDecon:set_default(false)
Gui.toolbar_toggle_button("entity/tree-01", { "tree-decon.main-tooltip" }, function(player)
return Roles.player_allowed(player, "fast-tree-decon")
Gui.create_toolbar_button{
name = "toggle-tree-decon",
sprite = "entity/tree-01",
tooltip = { "tree-decon.main-tooltip" },
auto_toggle = true,
visible = function(player, _)
return Roles.player_allowed(player, "fast-tree-decon")
end
}:on_event(Gui.on_toolbar_button_toggled, function(def, event)
--- @cast event EventData.on_toolbar_button_toggled
local player = Gui.get_player(event)
HasEnabledDecon:set(player, event.state)
player.print{ "tree-decon.toggle-msg", event.state and { "tree-decon.enabled" } or { "tree-decon.disabled" } }
end)
:on_event(Gui.events.on_toolbar_button_toggled, function(player, _, event)
HasEnabledDecon:set(player, event.state)
player.print{ "tree-decon.toggle-msg", event.state and { "tree-decon.enabled" } or { "tree-decon.disabled" } }
end)
-- Add trees to queue when marked, only allows simple entities and for players with role permission
Event.add(defines.events.on_marked_for_deconstruction, function(event)

View File

@@ -1,6 +1,7 @@
local Event = require("modules/exp_legacy/utils/event") --- @dep utils.event
local Storage = require("modules/exp_util/storage")
local Gui = require("modules.exp_legacy.expcore.gui") --- @dep expcore.gui
local Gui = require("modules/exp_gui")
local Event = require("modules/exp_legacy/utils/event") --- @dep utils.event
----- Locals -----
local follow_label -- Gui constructor
@@ -88,7 +89,7 @@ function Public.stop_follow(player)
Public.stop_spectate(player)
end
Gui.destroy_if_valid(player.gui.screen[follow_label.name])
Gui.destroy_if_valid(player.gui.screen.follow_label)
following[player.index] = nil
end
@@ -102,19 +103,18 @@ end
----- Gui -----
--- Label used to show that the player is following, also used to allow esc to stop following
-- @element follow_label
follow_label =
Gui.element(function(definition, parent, target)
Gui.destroy_if_valid(parent[definition.name])
follow_label = Gui.element("follow-label")
:draw(function(def, parent, target)
Gui.destroy_if_valid(parent.follow_label)
local label = parent.add{
type = "label",
name = "follow_label",
style = "frame_title",
caption = "Following " .. target.name .. ".\nClick here or press esc to stop following.",
name = definition.name,
}
local player = Gui.get_player_from_element(parent)
local player = Gui.get_player(parent)
local res = player.display_resolution
label.location = { 0, res.height - 150 }
label.style.width = res.width
@@ -123,12 +123,11 @@ follow_label =
return label
end)
:static_name(Gui.unique_static_name)
:on_click(Public.stop_follow)
:on_close(function(player)
:on_closed(function(def, event)
-- Don't call set_controller during on_close as it invalidates the controller
-- Setting an invalid position (as to not equal their current) will call stop_follow on the next tick
following[player.index][3] = {}
following[event.player_index][3] = {}
end)
----- Events -----

View File

@@ -1,4 +1,5 @@
local Event = require("modules/exp_legacy/utils/event")
local Storage = require("modules/exp_util/storage")
local Gui = require("modules.exp_legacy.utils.gui")
local Model = require("modules.exp_legacy.modules.gui.debug.model")
@@ -21,6 +22,11 @@ local checkbox_name = Gui.uid_name()
local filter_name = Gui.uid_name()
local clear_filter_name = Gui.uid_name()
local storage = {}
Storage.register(storage, function(tbl)
storage = tbl
end)
-- storage tables
local enabled = {}
local last_events = {}

View File

@@ -1,6 +1,7 @@
local Gui = require("modules.exp_legacy.utils.gui") --- @dep utils.gui
local ExpGui = require("modules.exp_legacy.expcore.gui")
local ExpElement = require("modules/exp_gui/prototype")
local Color = require("modules/exp_util/include/color")
local Gui = require("modules.exp_legacy.utils.gui") --- @dep utils.gui
local Model = require("modules.exp_legacy.modules.gui.debug.model") --- @dep modules.gui.debug.model
local dump = Model.dump
@@ -24,9 +25,10 @@ function Public.show(container)
local left_panel_style = left_panel.style
left_panel_style.width = 300
for element_id, file_path in pairs(ExpGui.file_paths) do
local header = left_panel.add{ type = "flow" }.add{ type = "label", name = header_name, caption = element_id .. " - " .. file_path }
Gui.set_data(header, element_id)
--- @diagnostic disable-next-line invisible
for element_name in pairs(ExpElement._elements) do
local header = left_panel.add{ type = "flow" }.add{ type = "label", name = header_name, caption = element_name }
Gui.set_data(header, element_name)
end
local right_flow = main_flow.add{ type = "flow", direction = "vertical" }
@@ -70,7 +72,7 @@ Gui.on_click(
header_name,
function(event)
local element = event.element
local element_id = Gui.get_data(element)
local element_name = Gui.get_data(element)
local left_panel = element.parent.parent
local data = Gui.get_data(left_panel)
@@ -85,10 +87,11 @@ Gui.on_click(
element.style.font_color = Color.orange
data.selected_header = element
input_text_box.text = concat{ "Gui.defines[", element_id, "]" }
input_text_box.text = concat{ "ExpElement._elements[", element_name, "]" }
input_text_box.style.font_color = Color.black
local content = dump(ExpGui.debug_info[element_id]) or "nil"
--- @diagnostic disable-next-line invisible
local content = dump(ExpElement._elements[element_name]) or "nil"
right_panel.text = content
end
)

View File

@@ -1,7 +1,6 @@
local Gui = require("modules.exp_legacy.utils.gui") --- @dep utils.gui
local ExpUtil = require("modules/exp_util")
local gui_names = Gui.names
local type = type
local concat = table.concat
local inspect = table.inspect
local pcall = pcall
@@ -10,76 +9,7 @@ local rawset = rawset
local Public = {}
local LuaObject = { "{", nil, ", name = '", nil, "'}" }
local LuaPlayer = { "{LuaPlayer, name = '", nil, "', index = ", nil, "}" }
local LuaEntity = { "{LuaEntity, name = '", nil, "', unit_number = ", nil, "}" }
local LuaGuiElement = { "{LuaGuiElement, name = '", nil, "'}" }
local function get(obj, prop)
return obj[prop]
end
local function get_name_safe(obj)
local s, r = pcall(get, obj, "name")
if not s then
return "nil"
else
return r or "nil"
end
end
local function get_lua_object_type_safe(obj)
local s, r = pcall(get, obj, "help")
if not s then
return
end
return r():match("Lua%a+")
end
local function inspect_process(item)
if type(item) ~= "table" or type(item.__self) ~= "userdata" then
return item
end
local suc, valid = pcall(get, item, "valid")
if not suc then
-- no 'valid' property
return get_lua_object_type_safe(item) or "{NoHelp LuaObject}"
end
if not valid then
return "{Invalid LuaObject}"
end
local obj_type = get_lua_object_type_safe(item)
if not obj_type then
return "{NoHelp LuaObject}"
end
if obj_type == "LuaPlayer" then
LuaPlayer[2] = item.name or "nil"
LuaPlayer[4] = item.index or "nil"
return concat(LuaPlayer)
elseif obj_type == "LuaEntity" then
LuaEntity[2] = item.name or "nil"
LuaEntity[4] = item.unit_number or "nil"
return concat(LuaEntity)
elseif obj_type == "LuaGuiElement" then
local name = item.name
LuaGuiElement[2] = gui_names and gui_names[name] or name or "nil"
return concat(LuaGuiElement)
else
LuaObject[2] = obj_type
LuaObject[4] = get_name_safe(item)
return concat(LuaObject)
end
end
local inspect_process = ExpUtil.safe_value
local inspect_options = { process = inspect_process }
function Public.dump(data)