mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 11:35:22 +09:00
Migrate gui modules
This commit is contained in:
@@ -27,6 +27,9 @@ local Gui = {
|
||||
__call = function(self, parent, ...)
|
||||
local element = self._draw(self, parent, ...)
|
||||
if self._style then self._style(element.style, element, ...) end
|
||||
if self.name and self.name ~= element.name then
|
||||
error("Static name \""..self.name.."\" expected but got: "..tostring(element.name))
|
||||
end
|
||||
return self:triggers_events(element)
|
||||
end,
|
||||
__index = function(self, key)
|
||||
@@ -170,19 +173,32 @@ function Gui._prototype_element:style(style_define)
|
||||
return self
|
||||
end
|
||||
|
||||
--[[-- Enforce the fact the element has a static name, this is required for the cases when a function define is used
|
||||
@tparam[opt] string element The element that will trigger calls to the event handlers
|
||||
@treturn table the element define is returned to allow for event handlers to be registered
|
||||
]]
|
||||
function Gui._prototype_element:static_name(name)
|
||||
if name == Gui.unique_static_name then
|
||||
self.name = "ExpGui_"..tostring(self.uid)
|
||||
else
|
||||
self.name = name
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--[[-- Used to link an element to an element define such that any event on the element will call the handlers on the element define
|
||||
@tparam LuaGuiElement element The element that will trigger calls to the event handlers
|
||||
@treturn LuaGuiElement The element passed as the argument to allow for cleaner returns
|
||||
]]
|
||||
function Gui._prototype_element:triggers_events(element)
|
||||
local event_triggers = element.tags.ExpGuiTriggers
|
||||
local event_triggers = element.tags.ExpGui_event_triggers
|
||||
if not event_triggers then
|
||||
event_triggers = { self.uid }
|
||||
else
|
||||
table.insert(event_triggers, self.uid)
|
||||
end
|
||||
-- To modify a set of tags, the whole table needs to be written back to the respective property.
|
||||
element.tags.ExpGuiTriggers = event_triggers
|
||||
element.tags.ExpGui_event_triggers = event_triggers
|
||||
end
|
||||
|
||||
--[[-- Set the handler which will be called for a custom event, only one handler can be used per event per element
|
||||
@@ -247,7 +263,7 @@ local function event_handler_factory(event_name)
|
||||
Event.add(event_name, function(event)
|
||||
local element = event.element
|
||||
if not element or not element.valid then return end
|
||||
local event_triggers = element.tags.ExpGuiTriggers
|
||||
local event_triggers = element.tags.ExpGui_event_triggers
|
||||
if not event_triggers then return end
|
||||
for _, uid in event_triggers do
|
||||
local element_define = Gui.defines[uid]
|
||||
|
||||
@@ -32,7 +32,8 @@ Gui.element{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/expand_dark',
|
||||
hovered_sprite = 'utility/expand',
|
||||
tooltip = {'autofill.toggle-section-tooltip'}
|
||||
tooltip = {'autofill.toggle-section-tooltip'},
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style(Gui.sprite_style(20))
|
||||
:on_click(function(_, element, _)
|
||||
@@ -50,14 +51,6 @@ Gui.element{
|
||||
end
|
||||
end)
|
||||
|
||||
--- Used to assign an event to the header label to trigger a toggle
|
||||
-- @element header_toggle
|
||||
local header_toggle = Gui.element()
|
||||
:on_click(function(_, element, event)
|
||||
event.element = element.parent.alignment[toggle_section.name]
|
||||
toggle_section:raise_custom_event(event)
|
||||
end)
|
||||
|
||||
--- Toggle enitity button, used for toggling autofill for the specific entity
|
||||
-- All entity autofill settings will be ignored if its disabled
|
||||
-- @element entity_toggle
|
||||
@@ -95,16 +88,18 @@ end)
|
||||
--- Draw a section header and main scroll
|
||||
-- @element autofill_section_container
|
||||
local section =
|
||||
Gui.element(function(_, parent, section_name, table_size)
|
||||
Gui.element(function(definition, parent, section_name, table_size)
|
||||
-- Draw the header for the section
|
||||
local header = Gui.header(
|
||||
parent,
|
||||
{'autofill.toggle-section-caption', rich_img('item', section_name), {'entity-name.'..section_name}},
|
||||
{'autofill.toggle-section-tooltip'},
|
||||
true,
|
||||
section_name..'-header',
|
||||
header_toggle.name
|
||||
section_name..'-header'
|
||||
)
|
||||
|
||||
definition:triggers_events(header.parent.header_label)
|
||||
|
||||
-- Right aligned button to toggle the section
|
||||
header.caption = section_name
|
||||
entity_toggle(header, section_name)
|
||||
@@ -120,13 +115,16 @@ Gui.element(function(_, parent, section_name, table_size)
|
||||
|
||||
return section_table
|
||||
end)
|
||||
:on_click(function(_, element, event)
|
||||
event.element = element.parent.alignment[toggle_section.name]
|
||||
toggle_section:raise_custom_event(event)
|
||||
end)
|
||||
|
||||
--- Toggle item button, used for toggling autofill for the specific item
|
||||
-- @element toggle_item_button
|
||||
local toggle_item_button =
|
||||
Gui.element(function(event_trigger, parent, item)
|
||||
Gui.element(function(_, parent, item)
|
||||
return parent.add{
|
||||
name = event_trigger,
|
||||
type = 'sprite-button',
|
||||
sprite = 'item/'..item.name,
|
||||
tooltip = {'autofill.toggle-tooltip', rich_img('item', item.name), item.category},
|
||||
@@ -161,9 +159,8 @@ end)
|
||||
--- Amount text field for a autofill item
|
||||
-- @element amount_textfield
|
||||
local amount_textfield =
|
||||
Gui.element(function(event_trigger, parent, item)
|
||||
Gui.element(function(_, parent, item)
|
||||
return parent.add{
|
||||
name = event_trigger,
|
||||
type = 'textfield',
|
||||
text = item.amount,
|
||||
tooltip = {'autofill.amount-tooltip', item.category },
|
||||
@@ -233,9 +230,9 @@ end)
|
||||
--- Main gui container for the left flow
|
||||
-- @element autofill_container
|
||||
autofill_container =
|
||||
Gui.element(function(event_trigger, parent)
|
||||
Gui.element(function(definition, parent)
|
||||
-- Draw the internal container
|
||||
local container = Gui.container(parent, event_trigger)
|
||||
local container = Gui.container(parent, definition.name)
|
||||
-- Draw the scroll container
|
||||
local scroll_table = Gui.scroll_table(container, 400, 1, 'autofill-scroll-table')
|
||||
-- Set the scroll panel to always show the scrollbar (not doing this will result in a changing gui size)
|
||||
@@ -293,6 +290,7 @@ Gui.element(function(event_trigger, parent)
|
||||
-- Return the external container
|
||||
return container.parent
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:add_to_left_flow()
|
||||
|
||||
--- Button on the top flow used to toggle autofill container
|
||||
|
||||
@@ -171,7 +171,6 @@ end
|
||||
|
||||
local button_apply =
|
||||
Gui.element{
|
||||
name = 'module_b',
|
||||
type = 'button',
|
||||
caption = 'Apply',
|
||||
style = 'button'
|
||||
@@ -184,8 +183,8 @@ Gui.element{
|
||||
end)
|
||||
|
||||
module_container =
|
||||
Gui.element(function(event_trigger, parent)
|
||||
local container = Gui.container(parent, event_trigger, (config.module_slot_max + 2) * 36)
|
||||
Gui.element(function(definition, parent)
|
||||
local container = Gui.container(parent, definition.name, (config.module_slot_max + 2) * 36)
|
||||
Gui.header(container, 'Module Inserter', '', true)
|
||||
|
||||
local scroll_table = Gui.scroll_table(container, (config.module_slot_max + 2) * 36, config.module_slot_max + 1)
|
||||
@@ -214,6 +213,7 @@ Gui.element(function(event_trigger, parent)
|
||||
|
||||
return container.parent
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:add_to_left_flow()
|
||||
|
||||
Gui.left_toolbar_button('item/productivity-module-3', {'module.main-tooltip'}, module_container, function(player)
|
||||
|
||||
@@ -29,7 +29,8 @@ Gui.element{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/expand_dots_white',
|
||||
tooltip = {'player-list.open-action-bar'},
|
||||
style = 'frame_button'
|
||||
style = 'frame_button',
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style{
|
||||
padding = -2,
|
||||
@@ -85,21 +86,21 @@ end)
|
||||
--- Set of elements that are used to make up a row of the player table
|
||||
-- @element add_player_base
|
||||
local add_player_base =
|
||||
Gui.element(function(event_trigger, parent, player_data)
|
||||
Gui.element(function(definition, parent, player_data)
|
||||
-- Add the button to open the action bar
|
||||
local toggle_action_bar_flow = parent.add{ type = 'flow', name = player_data.name }
|
||||
open_action_bar(toggle_action_bar_flow)
|
||||
|
||||
-- Add the player name
|
||||
local player_name_flow = parent.add{ type = 'flow', name = 'player-name-'..player_data.index }
|
||||
local player_name = player_name_flow.add{
|
||||
local player_name = parent.add{
|
||||
type = 'label',
|
||||
name = event_trigger,
|
||||
name = 'player-name-'..player_data.index,
|
||||
caption = player_data.name,
|
||||
tooltip = {'player-list.open-map', player_data.name, player_data.tag, player_data.role_name}
|
||||
}
|
||||
player_name.style.padding = {0, 2,0, 0}
|
||||
player_name.style.font_color = player_data.chat_color
|
||||
definition:triggers_events(player_name)
|
||||
|
||||
-- Add the time played label
|
||||
local alignment = Gui.alignment(parent, 'player-time-'..player_data.index)
|
||||
@@ -202,9 +203,9 @@ end
|
||||
--- Main player list container for the left flow
|
||||
-- @element player_list_container
|
||||
local player_list_container =
|
||||
Gui.element(function(event_trigger, parent)
|
||||
Gui.element(function(definition, parent)
|
||||
-- Draw the internal container
|
||||
local container = Gui.container(parent, event_trigger, 200)
|
||||
local container = Gui.container(parent, definition.name, 200)
|
||||
|
||||
-- Draw the scroll table for the players
|
||||
local scroll_table = Gui.scroll_table(container, 184, 3)
|
||||
@@ -255,6 +256,7 @@ Gui.element(function(event_trigger, parent)
|
||||
-- Return the exteral container
|
||||
return container.parent
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:add_to_left_flow(true)
|
||||
|
||||
--- Button on the top flow used to toggle the player list container
|
||||
|
||||
@@ -25,13 +25,11 @@ local scroll_height = 275 -- controls the height of the scrolls
|
||||
--- Sub content area used within the content areas
|
||||
-- @element sub_content
|
||||
local sub_content =
|
||||
Gui.element(function(_, parent)
|
||||
return parent.add{
|
||||
Gui.element{
|
||||
type = 'frame',
|
||||
direction = 'vertical',
|
||||
style = 'inside_deep_frame'
|
||||
}
|
||||
end)
|
||||
}
|
||||
:style{
|
||||
horizontally_stretchable = true,
|
||||
horizontal_align = 'center',
|
||||
@@ -77,17 +75,16 @@ Gui.element{
|
||||
--- Used to connect to servers in server list
|
||||
-- @element join_server
|
||||
local join_server =
|
||||
Gui.element(function(event_trigger, parent, server_id, wrong_version)
|
||||
Gui.element(function(definition, parent, server_id, wrong_version)
|
||||
local status = External.get_server_status(server_id) or 'Offline'
|
||||
if wrong_version then status = 'Version' end
|
||||
local flow = parent.add{ name = server_id, type = 'flow' }
|
||||
local button = flow.add{
|
||||
name = event_trigger,
|
||||
local button = definition:triggers_events(flow.add{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/circuit_network_panel_white', --- network panel white, warning white, download white
|
||||
hovered_sprite = 'utility/circuit_network_panel_black', --- network panel black, warning black, download black
|
||||
tooltip = {'readme.servers-connect-'..status, wrong_version}
|
||||
}
|
||||
})
|
||||
|
||||
if status == 'Offline' or status == 'Current' then
|
||||
button.enabled = false
|
||||
@@ -404,9 +401,9 @@ end))
|
||||
-- @element readme
|
||||
local readme_toggle
|
||||
local readme =
|
||||
Gui.element(function(event_trigger, parent)
|
||||
Gui.element(function(definition, parent)
|
||||
local container = parent.add{
|
||||
name = event_trigger,
|
||||
name = definition.name,
|
||||
type = 'frame',
|
||||
style = 'invisible_frame'
|
||||
}
|
||||
@@ -439,6 +436,7 @@ Gui.element(function(event_trigger, parent)
|
||||
|
||||
return container
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:on_open(function(player)
|
||||
local toggle_button = Gui.get_top_element(player, readme_toggle)
|
||||
Gui.toolbar_button_style(toggle_button, true)
|
||||
|
||||
@@ -55,8 +55,8 @@ for i=1, #config.milestone do
|
||||
end
|
||||
|
||||
local clock_container =
|
||||
Gui.element(function(event_trigger, parent)
|
||||
local container = Gui.container(parent, event_trigger, 200)
|
||||
Gui.element(function(definition, parent)
|
||||
local container = Gui.container(parent, definition.name, 200)
|
||||
local scroll_table = Gui.scroll_table(container, 400, 4)
|
||||
|
||||
scroll_table.add{
|
||||
@@ -143,6 +143,7 @@ Gui.element(function(event_trigger, parent)
|
||||
|
||||
return container.parent
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:add_to_left_flow()
|
||||
|
||||
Gui.left_toolbar_button('item/space-science-pack', {'expcom-res.main-tooltip'}, clock_container, function(player)
|
||||
|
||||
@@ -43,7 +43,8 @@ local toggle_launch =
|
||||
Gui.element{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/play',
|
||||
tooltip = {'rocket-info.toggle-rocket-tooltip'}
|
||||
tooltip = {'rocket-info.toggle-rocket-tooltip'},
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style(Gui.sprite_style(16))
|
||||
:on_click(function(_, element, _)
|
||||
@@ -66,7 +67,8 @@ local launch_rocket =
|
||||
Gui.element{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/center',
|
||||
tooltip = {'rocket-info.launch-tooltip'}
|
||||
tooltip = {'rocket-info.launch-tooltip'},
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style(Gui.sprite_style(16, -1))
|
||||
:on_click(function(player, element, _)
|
||||
@@ -82,10 +84,9 @@ end)
|
||||
--- XY cords that allow zoom to map when pressed
|
||||
-- @element silo_cords
|
||||
local silo_cords =
|
||||
Gui.element(function(event_trigger, parent, silo_data)
|
||||
Gui.element(function(definition, parent, silo_data)
|
||||
local silo_name = silo_data.silo_name
|
||||
local pos = silo_data.position
|
||||
local name = config.progress.allow_zoom_to_map and event_trigger or nil
|
||||
local tooltip = config.progress.allow_zoom_to_map and {'rocket-info.progress-label-tooltip'} or nil
|
||||
|
||||
-- Add the x cord flow
|
||||
@@ -97,9 +98,8 @@ Gui.element(function(event_trigger, parent, silo_data)
|
||||
flow_x.style.padding = {0, 2,0, 1}
|
||||
|
||||
-- Add the x cord label
|
||||
flow_x.add{
|
||||
local label_x = flow_x.add{
|
||||
type = 'label',
|
||||
name = name,
|
||||
caption = {'rocket-info.progress-x-pos', pos.x},
|
||||
tooltip = tooltip
|
||||
}
|
||||
@@ -113,13 +113,16 @@ Gui.element(function(event_trigger, parent, silo_data)
|
||||
flow_y.style.padding = {0, 2,0, 1}
|
||||
|
||||
-- Add the y cord label
|
||||
flow_y.add{
|
||||
local label_y = flow_y.add{
|
||||
type = 'label',
|
||||
name = name,
|
||||
caption = {'rocket-info.progress-y-pos', pos.y},
|
||||
tooltip = tooltip
|
||||
}
|
||||
|
||||
if config.progress.allow_zoom_to_map then
|
||||
definition:triggers_events(label_x)
|
||||
definition:triggers_events(label_y)
|
||||
end
|
||||
end)
|
||||
:on_click(function(player, element, _)
|
||||
local rocket_silo_name = element.parent.caption
|
||||
@@ -422,7 +425,8 @@ Gui.element{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/expand_dark',
|
||||
hovered_sprite = 'utility/expand',
|
||||
tooltip = {'rocket-info.toggle-section-tooltip'}
|
||||
tooltip = {'rocket-info.toggle-section-tooltip'},
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style(Gui.sprite_style(20))
|
||||
:on_click(function(_, element, _)
|
||||
@@ -440,27 +444,19 @@ Gui.element{
|
||||
end
|
||||
end)
|
||||
|
||||
-- Used to assign an event to the header label to trigger a toggle
|
||||
-- @element header_toggle
|
||||
local header_toggle = Gui.element()
|
||||
:on_click(function(_, element, event)
|
||||
event.element = element.parent.alignment[toggle_section.name]
|
||||
toggle_section:raise_custom_event(event)
|
||||
end)
|
||||
|
||||
-- Draw a section header and main scroll
|
||||
-- @element rocket_list_container
|
||||
local section =
|
||||
Gui.element(function(_, parent, section_name, table_size)
|
||||
Gui.element(function(definition, parent, section_name, table_size)
|
||||
-- Draw the header for the section
|
||||
local header = Gui.header(
|
||||
parent,
|
||||
{'rocket-info.section-caption-'..section_name},
|
||||
{'rocket-info.section-tooltip-'..section_name},
|
||||
true,
|
||||
section_name..'-header',
|
||||
header_toggle.name
|
||||
section_name..'-header'
|
||||
)
|
||||
definition:triggers_events(header.parent.header_label)
|
||||
|
||||
-- Right aligned button to toggle the section
|
||||
header.caption = section_name
|
||||
@@ -473,13 +469,17 @@ Gui.element(function(_, parent, section_name, table_size)
|
||||
-- Return the flow table
|
||||
return scroll_table
|
||||
end)
|
||||
:on_click(function(_, element, event)
|
||||
event.element = element.parent.alignment[toggle_section.name]
|
||||
toggle_section:raise_custom_event(event)
|
||||
end)
|
||||
|
||||
--- Main gui container for the left flow
|
||||
-- @element rocket_list_container
|
||||
local rocket_list_container =
|
||||
Gui.element(function(event_trigger, parent)
|
||||
Gui.element(function(definition, parent)
|
||||
-- Draw the internal container
|
||||
local container = Gui.container(parent, event_trigger, 200)
|
||||
local container = Gui.container(parent, definition.name, 200)
|
||||
|
||||
-- Set the container style
|
||||
local style = container.style
|
||||
@@ -516,6 +516,7 @@ Gui.element(function(event_trigger, parent)
|
||||
-- Return the exteral container
|
||||
return container.parent
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:add_to_left_flow(function(player)
|
||||
return player.force.rockets_launched > 0 and Roles.player_allowed(player, 'gui/rocket-info')
|
||||
end)
|
||||
|
||||
@@ -261,11 +261,11 @@ end
|
||||
--- Main task list container for the left flow
|
||||
-- @element task_list_container
|
||||
local science_info_container =
|
||||
Gui.element(function(event_trigger, parent)
|
||||
Gui.element(function(definition, parent)
|
||||
local player = Gui.get_player_from_element(parent)
|
||||
|
||||
-- Draw the internal container
|
||||
local container = Gui.container(parent, event_trigger, 200)
|
||||
local container = Gui.container(parent, definition.name, 200)
|
||||
|
||||
-- Draw the header
|
||||
Gui.header(container, {'science-info.main-caption'}, {'science-info.main-tooltip'})
|
||||
@@ -315,6 +315,7 @@ Gui.element(function(event_trigger, parent)
|
||||
-- Return the exteral container
|
||||
return container.parent
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:add_to_left_flow()
|
||||
|
||||
--- Button on the top flow used to toggle the task list container
|
||||
|
||||
@@ -23,7 +23,8 @@ UsesServerUps:set_metadata{
|
||||
local server_ups =
|
||||
Gui.element{
|
||||
type = 'label',
|
||||
caption = 'SUPS = 60.0'
|
||||
caption = 'SUPS = 60.0',
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style{
|
||||
font = 'default-game'
|
||||
|
||||
@@ -85,7 +85,8 @@ local add_new_task =
|
||||
type = "sprite-button",
|
||||
sprite = "utility/add",
|
||||
tooltip = {"task-list.add-tooltip"},
|
||||
style = "tool_button"
|
||||
style = "tool_button",
|
||||
name = Gui.unique_static_name
|
||||
}:style(Styles.sprite22):on_click(
|
||||
function(player, _, _)
|
||||
-- Disable editing
|
||||
@@ -164,20 +165,16 @@ local subfooter_label =
|
||||
--- Action flow that contains action buttons
|
||||
-- @element subfooter_actions
|
||||
local subfooter_actions =
|
||||
Gui.element(
|
||||
function(_, parent)
|
||||
return parent.add {
|
||||
Gui.element {
|
||||
type = "flow",
|
||||
name = "actions"
|
||||
}
|
||||
end
|
||||
)
|
||||
}
|
||||
|
||||
--- Button element with a flow around it to fix duplicate name inside of the scroll flow
|
||||
-- @element task_list_item
|
||||
local task_list_item =
|
||||
Gui.element(
|
||||
function(event_trigger, parent, task)
|
||||
function(definition, parent, task)
|
||||
local flow =
|
||||
parent.add {
|
||||
type = "flow",
|
||||
@@ -187,11 +184,12 @@ local task_list_item =
|
||||
flow.style.horizontally_stretchable = true
|
||||
local button =
|
||||
flow.add {
|
||||
name = event_trigger,
|
||||
name = definition.name,
|
||||
type = "button",
|
||||
style = "list_box_item",
|
||||
caption = task.title
|
||||
}
|
||||
definition:triggers_events(button)
|
||||
button.style.horizontally_stretchable = true
|
||||
button.style.horizontally_squashable = true
|
||||
return flow
|
||||
@@ -201,7 +199,7 @@ local task_list_item =
|
||||
local task_id = element.parent.caption
|
||||
PlayerSelected:set(player, task_id)
|
||||
end
|
||||
)
|
||||
):static_name(Gui.unique_static_name)
|
||||
|
||||
--- Scrollable list of all tasks
|
||||
-- @element task_list
|
||||
@@ -239,6 +237,7 @@ local task_list =
|
||||
local task_view_edit_button =
|
||||
Gui.element {
|
||||
type = "button",
|
||||
name = Gui.unique_static_name,
|
||||
caption = {"", "[img=utility/rename_icon_normal] ", {"task-list.edit"}},
|
||||
tooltip = {"task-list.edit-tooltip"},
|
||||
style = "shortcut_bar_button"
|
||||
@@ -271,6 +270,7 @@ Gui.element{
|
||||
local task_view_delete_button =
|
||||
Gui.element {
|
||||
type = "button",
|
||||
name = Gui.unique_static_name,
|
||||
caption = {"", "[img=utility/trash] ", {"task-list.delete"}},
|
||||
tooltip = {"task-list.delete-tooltip"},
|
||||
style = "shortcut_bar_button_red"
|
||||
@@ -342,6 +342,7 @@ local task_create_confirm_button
|
||||
-- @element task_message_textfield
|
||||
local task_message_textfield =
|
||||
Gui.element {
|
||||
name = Gui.unique_static_name,
|
||||
type = "text-box",
|
||||
text = ""
|
||||
}:style(
|
||||
@@ -370,6 +371,7 @@ local task_message_textfield =
|
||||
task_edit_confirm_button =
|
||||
Gui.element {
|
||||
type = "button",
|
||||
name = Gui.unique_static_name,
|
||||
caption = {"", "[img=utility/check_mark] ", {"task-list.confirm"}},
|
||||
tooltip = {"task-list.confirm-tooltip"},
|
||||
style = "shortcut_bar_button_green"
|
||||
@@ -424,6 +426,7 @@ local task_edit_footer =
|
||||
task_create_confirm_button =
|
||||
Gui.element {
|
||||
type = "button",
|
||||
name = Gui.unique_static_name,
|
||||
caption = {"", "[img=utility/check_mark] ", {"task-list.confirm"}},
|
||||
tooltip = {"task-list.confirm-tooltip"},
|
||||
style = "shortcut_bar_button_green",
|
||||
@@ -496,9 +499,9 @@ end
|
||||
-- @element task_list_container
|
||||
local task_list_container =
|
||||
Gui.element(
|
||||
function(event_trigger, parent)
|
||||
function(definition, parent)
|
||||
-- Draw the internal container
|
||||
local container = Gui.container(parent, event_trigger, 268)
|
||||
local container = Gui.container(parent, definition.name, 268)
|
||||
container.style.maximal_width = 268
|
||||
container.style.minimal_width = 268
|
||||
|
||||
@@ -526,7 +529,7 @@ local task_list_container =
|
||||
-- Return the external container
|
||||
return container.parent
|
||||
end
|
||||
):add_to_left_flow(
|
||||
):static_name(Gui.unique_static_name):add_to_left_flow(
|
||||
function(player)
|
||||
local task_ids = Tasks.get_force_task_ids(player.force.name)
|
||||
return #task_ids > 0
|
||||
|
||||
@@ -345,9 +345,9 @@ end)
|
||||
--- The main container for the vlayer gui
|
||||
-- @element vlayer_container
|
||||
local vlayer_container =
|
||||
Gui.element(function(event_trigger, parent)
|
||||
Gui.element(function(definition, parent)
|
||||
local player = Gui.get_player_from_element(parent)
|
||||
local container = Gui.container(parent, event_trigger, 320)
|
||||
local container = Gui.container(parent, definition.name, 320)
|
||||
|
||||
vlayer_display_set(container, 'vlayer_st_1')
|
||||
vlayer_control_set(container, 'vlayer_st_2')
|
||||
@@ -362,6 +362,7 @@ Gui.element(function(event_trigger, parent)
|
||||
table[vlayer_gui_control_remove.name].visible = visible
|
||||
return container.parent
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:add_to_left_flow()
|
||||
|
||||
--- Button on the top flow used to toggle the task list container
|
||||
|
||||
@@ -81,7 +81,8 @@ Gui.element{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/add',
|
||||
tooltip = {'warp-list.add-tooltip'},
|
||||
style = 'shortcut_bar_button'
|
||||
style = 'shortcut_bar_button',
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style(Styles.sprite22)
|
||||
:on_click(function(player, _)
|
||||
@@ -148,7 +149,7 @@ end)
|
||||
--- Warp icon button, this will trigger a warp when the player is able to
|
||||
-- @element warp_icon_button
|
||||
local warp_icon_button =
|
||||
Gui.element(function(event_trigger, parent, warp)
|
||||
Gui.element(function(definition, parent, warp)
|
||||
local warp_position = warp.position
|
||||
|
||||
-- The SpritePath type is not the same as the SignalID type
|
||||
@@ -158,15 +159,16 @@ Gui.element(function(event_trigger, parent, warp)
|
||||
end
|
||||
|
||||
-- Draw the element
|
||||
return parent.add{
|
||||
name = event_trigger,
|
||||
return definition:triggers_events(parent.add{
|
||||
type = 'sprite-button',
|
||||
sprite = sprite,
|
||||
name = definition.name,
|
||||
tooltip = {'warp-list.goto-tooltip', warp_position.x, warp_position.y},
|
||||
style = 'slot_button'
|
||||
}
|
||||
})
|
||||
end)
|
||||
:style(Styles.sprite32)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:on_click(function(player, element, _)
|
||||
if element.type == 'choose-elem-button' then return end
|
||||
local warp_id = element.parent.caption
|
||||
@@ -183,30 +185,31 @@ end)
|
||||
--- The button that is visible when the warp is in edit state
|
||||
-- @element warp_icon_editing
|
||||
local warp_icon_editing =
|
||||
Gui.element(function(event_trigger, parent, warp)
|
||||
return parent.add{
|
||||
name = event_trigger,
|
||||
Gui.element(function(definition, parent, warp)
|
||||
return definition:triggers_events(parent.add{
|
||||
name = definition.name,
|
||||
type = 'choose-elem-button',
|
||||
elem_type = 'signal',
|
||||
signal = {type = warp.icon.type, name = warp.icon.name},
|
||||
tooltip = {'warp-list.goto-edit'}
|
||||
}
|
||||
})
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:style(Styles.sprite32)
|
||||
|
||||
--- Warp label, visible if the player is not in edit state
|
||||
-- @element warp_label
|
||||
local warp_label =
|
||||
Gui.element(function(event_trigger, parent, warp)
|
||||
Gui.element(function(definition, parent, warp)
|
||||
local last_edit_name = warp.last_edit_name
|
||||
local last_edit_time = warp.last_edit_time
|
||||
-- Draw the element
|
||||
return parent.add{
|
||||
name = event_trigger,
|
||||
return definition:triggers_events(parent.add{
|
||||
type = 'label',
|
||||
caption = warp.name,
|
||||
tooltip = {'warp-list.last-edit', last_edit_name, format_time(last_edit_time)}
|
||||
}
|
||||
tooltip = {'warp-list.last-edit', last_edit_name, format_time(last_edit_time)},
|
||||
name = definition.name
|
||||
})
|
||||
end)
|
||||
:style{
|
||||
single_line = true,
|
||||
@@ -220,19 +223,17 @@ end)
|
||||
local position = warp.position
|
||||
player.zoom_to_world(position, 1.5)
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
|
||||
--- Warp status, visible if the player is not in edit state
|
||||
--- This will show if the warp is connected or not
|
||||
-- @element warp_status
|
||||
local warp_status =
|
||||
Gui.element(function(event_trigger, parent)
|
||||
-- Draw the element
|
||||
return parent.add{
|
||||
name = event_trigger,
|
||||
Gui.element{
|
||||
type = 'label',
|
||||
caption = '[img=utility/electricity_icon_unplugged]', -- Temporary icon
|
||||
}
|
||||
end)
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style{
|
||||
-- When editing mode because textbox is larger the icon would move up.
|
||||
top_padding = 1,
|
||||
@@ -242,14 +243,14 @@ end)
|
||||
--- Warp textfield, visible if the player is in edit state
|
||||
-- @element warp_textfield
|
||||
local warp_textfield =
|
||||
Gui.element(function(event_trigger, parent, warp)
|
||||
Gui.element(function(definition, parent, warp)
|
||||
-- Draw the element
|
||||
return parent.add{
|
||||
name = event_trigger,
|
||||
return definition:triggers_events(parent.add{
|
||||
type = 'textfield',
|
||||
text = warp.name,
|
||||
clear_and_focus_on_right_click = true
|
||||
}
|
||||
clear_and_focus_on_right_click = true,
|
||||
name = definition.name
|
||||
})
|
||||
end)
|
||||
:style{
|
||||
-- Required fields to make it squashable and strechable.
|
||||
@@ -270,6 +271,7 @@ end)
|
||||
Warps.set_editing(warp_id, player.name)
|
||||
Warps.update_warp(warp_id, warp_name, warp_icon, player.name)
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
|
||||
|
||||
--- Confirms the edit to name or icon of the warp
|
||||
@@ -279,7 +281,8 @@ Gui.element{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/confirm_slot',
|
||||
tooltip = {'warp-list.confirm-tooltip'},
|
||||
style = 'shortcut_bar_button_green'
|
||||
style = 'shortcut_bar_button_green',
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style(Styles.sprite22)
|
||||
:on_click(function(player, element)
|
||||
@@ -297,7 +300,8 @@ Gui.element{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/close_black',
|
||||
tooltip = {'warp-list.cancel-tooltip'},
|
||||
style = 'shortcut_bar_button_red'
|
||||
style = 'shortcut_bar_button_red',
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style(Styles.sprite22)
|
||||
:on_click(function(player, element)
|
||||
@@ -318,7 +322,8 @@ Gui.element{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/trash',
|
||||
tooltip = {'warp-list.remove-tooltip'},
|
||||
style = 'shortcut_bar_button_red'
|
||||
style = 'shortcut_bar_button_red',
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style(Styles.sprite22)
|
||||
:on_click(function(_, element)
|
||||
@@ -333,7 +338,8 @@ Gui.element{
|
||||
type = 'sprite-button',
|
||||
sprite = 'utility/rename_icon_normal',
|
||||
tooltip = {'warp-list.edit-tooltip-none'},
|
||||
style = 'shortcut_bar_button'
|
||||
style = 'shortcut_bar_button',
|
||||
name = Gui.unique_static_name
|
||||
}
|
||||
:style(Styles.sprite22)
|
||||
:on_click(function(player, element)
|
||||
@@ -402,6 +408,7 @@ end
|
||||
local warp_timer =
|
||||
Gui.element{
|
||||
type = 'progressbar',
|
||||
name = Gui.unique_static_name,
|
||||
tooltip = {'warp-list.timer-tooltip-zero', config.cooldown_duration},
|
||||
minimum_value = 0,
|
||||
maximum_value = config.cooldown_duration*config.update_smoothing
|
||||
@@ -626,13 +633,13 @@ end
|
||||
--- Main warp list container for the left flow
|
||||
-- @element warp_list_container
|
||||
warp_list_container =
|
||||
Gui.element(function(event_trigger, parent)
|
||||
Gui.element(function(definition, parent)
|
||||
local player = Gui.get_player_from_element(parent)
|
||||
-- Check if user has permission to add warps
|
||||
local allow_add_warp = check_player_permissions(player, 'allow_add_warp')
|
||||
|
||||
-- Draw the internal container
|
||||
local container = Gui.container(parent, event_trigger, allow_add_warp and 268 or 220)
|
||||
local container = Gui.container(parent, definition.name, allow_add_warp and 268 or 220)
|
||||
|
||||
-- Draw the header
|
||||
local header = Gui.header(
|
||||
@@ -685,6 +692,7 @@ Gui.element(function(event_trigger, parent)
|
||||
-- Return the external container
|
||||
return container.parent
|
||||
end)
|
||||
:static_name(Gui.unique_static_name)
|
||||
:add_to_left_flow()
|
||||
|
||||
--- Button on the top flow used to toggle the warp list container
|
||||
|
||||
@@ -13,7 +13,7 @@ Global.register(
|
||||
|
||||
function Gui.uid_name()
|
||||
local new_element = ExpGui.element()
|
||||
return new_element.name
|
||||
return tostring(new_element.uid)
|
||||
end
|
||||
|
||||
-- Associates data with the LuaGuiElement. If data is nil then removes the data
|
||||
@@ -70,7 +70,7 @@ end
|
||||
|
||||
local function handler_factory(event_name)
|
||||
return function(element_name, handler)
|
||||
local element = ExpGui.defines[element_name]
|
||||
local element = ExpGui.defines[tonumber(element_name)]
|
||||
if not element then return end
|
||||
element[event_name](element, function(_, _,event)
|
||||
handler(event)
|
||||
|
||||
Reference in New Issue
Block a user