mirror of
https://github.com/Xevion/project-cybersyn.git
synced 2025-12-11 08:08:15 -06:00
merged gui
This commit is contained in:
227
cybersyn/scripts/gui/alerts.lua
Normal file
227
cybersyn/scripts/gui/alerts.lua
Normal file
@@ -0,0 +1,227 @@
|
||||
local gui = require("__flib__.gui")
|
||||
local misc = require("__flib__.misc")
|
||||
|
||||
local constants = require("constants")
|
||||
local util = require("scripts.util")
|
||||
|
||||
local templates = require("templates")
|
||||
|
||||
local alerts_tab = {}
|
||||
|
||||
function alerts_tab.build(widths)
|
||||
return {
|
||||
tab = {
|
||||
type = "tab",
|
||||
caption = { "gui.ltnm-alerts" },
|
||||
ref = { "alerts", "tab" },
|
||||
actions = {
|
||||
on_click = { gui = "main", action = "change_tab", tab = "alerts" },
|
||||
},
|
||||
},
|
||||
content = {
|
||||
type = "frame",
|
||||
style = "ltnm_main_content_frame",
|
||||
direction = "vertical",
|
||||
ref = { "alerts", "content_frame" },
|
||||
{
|
||||
type = "frame",
|
||||
style = "ltnm_table_toolbar_frame",
|
||||
style_mods = { right_padding = 4 },
|
||||
templates.sort_checkbox(widths, "alerts", "time", true, nil, true),
|
||||
templates.sort_checkbox(widths, "alerts", "train_id", false),
|
||||
templates.sort_checkbox(widths, "alerts", "route", false),
|
||||
templates.sort_checkbox(widths, "alerts", "network_id", false),
|
||||
templates.sort_checkbox(nil, "alerts", "type", false),
|
||||
{
|
||||
type = "sprite-button",
|
||||
style = "tool_button_red",
|
||||
sprite = "utility/trash",
|
||||
tooltip = { "gui.ltnm-delete-all-alerts" },
|
||||
ref = { "alerts", "delete_all_button" },
|
||||
actions = {
|
||||
on_click = { gui = "main", action = "delete_all_alerts" },
|
||||
},
|
||||
},
|
||||
},
|
||||
{ type = "scroll-pane", style = "ltnm_table_scroll_pane", ref = { "alerts", "scroll_pane" } },
|
||||
{
|
||||
type = "flow",
|
||||
style = "ltnm_warning_flow",
|
||||
visible = false,
|
||||
ref = { "alerts", "warning_flow" },
|
||||
{
|
||||
type = "label",
|
||||
style = "ltnm_semibold_label",
|
||||
caption = { "gui.ltnm-no-alerts" },
|
||||
ref = { "alerts", "warning_label" },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
function alerts_tab.update(self)
|
||||
local dictionaries = self.player_table.dictionaries
|
||||
|
||||
local state = self.state
|
||||
local refs = self.refs.alerts
|
||||
local widths = self.widths
|
||||
|
||||
local search_query = state.search_query
|
||||
local search_network_id = state.network_id
|
||||
local search_surface = state.surface
|
||||
|
||||
local ltn_alerts = state.ltn_data.alerts
|
||||
local alerts_to_delete = global.active_data.alerts_to_delete
|
||||
|
||||
local scroll_pane = refs.scroll_pane
|
||||
local children = scroll_pane.children
|
||||
|
||||
local sorts = state.sorts[state.active_tab]
|
||||
local active_sort = sorts._active
|
||||
local sorted_alerts = state.ltn_data.sorted_alerts[active_sort]
|
||||
|
||||
local table_index = 0
|
||||
|
||||
-- False = ascending (arrow down), True = descending (arrow up)
|
||||
local start, finish, step
|
||||
if sorts[active_sort] then
|
||||
start = #sorted_alerts
|
||||
finish = 1
|
||||
step = -1
|
||||
else
|
||||
start = 1
|
||||
finish = #sorted_alerts
|
||||
step = 1
|
||||
end
|
||||
|
||||
if not global.flags.deleted_all_alerts then
|
||||
for sorted_index = start, finish, step do
|
||||
local alert_id = sorted_alerts[sorted_index]
|
||||
local alerts_entry = ltn_alerts[alert_id]
|
||||
|
||||
if
|
||||
(search_surface == -1 or (alerts_entry.train.surface_index == search_surface))
|
||||
and bit32.btest(alerts_entry.train.network_id, search_network_id)
|
||||
and (#search_query == 0 or string.find(
|
||||
alerts_entry.search_strings[self.player.index] or "",
|
||||
string.lower(search_query)
|
||||
))
|
||||
and not alerts_to_delete[alert_id]
|
||||
then
|
||||
table_index = table_index + 1
|
||||
local row = children[table_index]
|
||||
local color = table_index % 2 == 0 and "dark" or "light"
|
||||
if not row then
|
||||
row = gui.add(scroll_pane, {
|
||||
type = "frame",
|
||||
style = "ltnm_table_row_frame_" .. color,
|
||||
{ type = "label", style_mods = { width = widths.alerts.time } },
|
||||
{
|
||||
type = "label",
|
||||
style = "ltnm_clickable_semibold_label",
|
||||
style_mods = { width = widths.alerts.train_id, horizontal_align = "center" },
|
||||
tooltip = { "gui.ltnm-open-train-gui" },
|
||||
},
|
||||
{
|
||||
type = "flow",
|
||||
style_mods = { vertical_spacing = 0 },
|
||||
direction = "vertical",
|
||||
{
|
||||
type = "label",
|
||||
style = "ltnm_clickable_semibold_label",
|
||||
style_mods = { width = widths.alerts.route },
|
||||
tooltip = constants.open_station_gui_tooltip,
|
||||
},
|
||||
{
|
||||
type = "label",
|
||||
style = "ltnm_clickable_semibold_label",
|
||||
style_mods = { width = widths.alerts.route },
|
||||
tooltip = constants.open_station_gui_tooltip,
|
||||
},
|
||||
},
|
||||
{ type = "label", style_mods = { width = widths.alerts.network_id, horizontal_align = "center" } },
|
||||
{ type = "label", style_mods = { width = widths.alerts.type } },
|
||||
{
|
||||
type = "frame",
|
||||
name = "contents_frame",
|
||||
style = "ltnm_small_slot_table_frame_" .. color,
|
||||
style_mods = { width = widths.alerts.contents },
|
||||
{ type = "table", name = "contents_table", style = "slot_table", column_count = 4 },
|
||||
},
|
||||
{
|
||||
type = "sprite-button",
|
||||
style = "tool_button_red",
|
||||
sprite = "utility/trash",
|
||||
tooltip = { "gui.ltnm-delete-alert" },
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
gui.update(row, {
|
||||
{ elem_mods = { caption = misc.ticks_to_timestring(alerts_entry.time) } },
|
||||
{
|
||||
elem_mods = { caption = alerts_entry.train_id },
|
||||
actions = {
|
||||
on_click = { gui = "main", action = "open_train_gui", train_id = alerts_entry.train_id },
|
||||
},
|
||||
},
|
||||
{
|
||||
{
|
||||
elem_mods = { caption = alerts_entry.train.from },
|
||||
actions = {
|
||||
on_click = { gui = "main", action = "open_station_gui", station_id = alerts_entry.train.from_id },
|
||||
},
|
||||
},
|
||||
{
|
||||
elem_mods = {
|
||||
caption = "[color=" .. constants.colors.caption.str .. "]->[/color] " .. alerts_entry.train.to,
|
||||
},
|
||||
actions = {
|
||||
on_click = { gui = "main", action = "open_station_gui", station_id = alerts_entry.train.to_id },
|
||||
},
|
||||
},
|
||||
},
|
||||
{ elem_mods = { caption = util.signed_int32(alerts_entry.train.network_id) } },
|
||||
{
|
||||
elem_mods = {
|
||||
caption = { "gui.ltnm-alert-" .. string.gsub(alerts_entry.type, "_", "-") },
|
||||
tooltip = { "gui.ltnm-alert-" .. string.gsub(alerts_entry.type, "_", "-") .. "-description" },
|
||||
},
|
||||
},
|
||||
{},
|
||||
{
|
||||
actions = {
|
||||
on_click = { gui = "main", action = "delete_alert", alert_id = alert_id },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
util.slot_table_update(row.contents_frame.contents_table, {
|
||||
{ color = "green", entries = alerts_entry.planned_shipment or {}, translations = dictionaries.materials },
|
||||
{ color = "red", entries = alerts_entry.actual_shipment or {}, translations = dictionaries.materials },
|
||||
{ color = "red", entries = alerts_entry.unscheduled_load or {}, translations = dictionaries.materials },
|
||||
{ color = "red", entries = alerts_entry.remaining_load or {}, translations = dictionaries.materials },
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for child_index = table_index + 1, #children do
|
||||
children[child_index].destroy()
|
||||
end
|
||||
|
||||
if table_index == 0 then
|
||||
refs.warning_flow.visible = true
|
||||
scroll_pane.visible = false
|
||||
refs.content_frame.style = "ltnm_main_warning_frame"
|
||||
refs.delete_all_button.enabled = false
|
||||
else
|
||||
refs.warning_flow.visible = false
|
||||
scroll_pane.visible = true
|
||||
refs.content_frame.style = "ltnm_main_content_frame"
|
||||
refs.delete_all_button.enabled = true
|
||||
end
|
||||
end
|
||||
|
||||
return alerts_tab
|
||||
Reference in New Issue
Block a user