145 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local gui = require("__flib__.gui")
 | 
						|
 | 
						|
local templates = require("templates")
 | 
						|
 | 
						|
local depots_tab = {}
 | 
						|
 | 
						|
function depots_tab.build(widths)
 | 
						|
  return {
 | 
						|
    tab = {
 | 
						|
      type = "tab",
 | 
						|
      caption = { "gui.ltnm-depots" },
 | 
						|
      ref = { "depots", "tab" },
 | 
						|
      actions = {
 | 
						|
        on_click = { gui = "main", action = "change_tab", tab = "depots" },
 | 
						|
      },
 | 
						|
    },
 | 
						|
    content = {
 | 
						|
      type = "frame",
 | 
						|
      style = "ltnm_main_content_frame",
 | 
						|
      direction = "vertical",
 | 
						|
      ref = { "depots", "content_frame" },
 | 
						|
      {
 | 
						|
        type = "frame",
 | 
						|
        style = "ltnm_table_toolbar_frame",
 | 
						|
        style_mods = { right_padding = 4 },
 | 
						|
        templates.sort_checkbox(widths, "depots", "name", true, nil, true),
 | 
						|
        templates.sort_checkbox(widths, "depots", "network_id", false),
 | 
						|
        templates.sort_checkbox(widths, "depots", "status", false, { "gui.ltnm-status-description" }),
 | 
						|
        templates.sort_checkbox(widths, "depots", "trains", false),
 | 
						|
      },
 | 
						|
      { type = "scroll-pane", style = "ltnm_table_scroll_pane", ref = { "depots", "scroll_pane" } },
 | 
						|
      {
 | 
						|
        type = "flow",
 | 
						|
        style = "ltnm_warning_flow",
 | 
						|
        visible = false,
 | 
						|
        ref = { "depots", "warning_flow" },
 | 
						|
        {
 | 
						|
          type = "label",
 | 
						|
          style = "ltnm_semibold_label",
 | 
						|
          caption = { "gui.ltnm-no-depots" },
 | 
						|
          ref = { "depots", "warning_label" },
 | 
						|
        },
 | 
						|
      },
 | 
						|
    },
 | 
						|
  }
 | 
						|
end
 | 
						|
 | 
						|
function depots_tab.update(self)
 | 
						|
  local state = self.state
 | 
						|
  local refs = self.refs.depots
 | 
						|
  local widths = self.widths.depots
 | 
						|
 | 
						|
  local search_query = state.search_query
 | 
						|
  local search_network_id = state.network_id
 | 
						|
  local search_surface = state.surface
 | 
						|
 | 
						|
  local ltn_depots = state.ltn_data.depots
 | 
						|
  local scroll_pane = refs.scroll_pane
 | 
						|
  local children = scroll_pane.children
 | 
						|
 | 
						|
  local sorts = state.sorts.depots
 | 
						|
  local active_sort = sorts._active
 | 
						|
  local sorted_depots = state.ltn_data.sorted_depots[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_depots
 | 
						|
    finish = 1
 | 
						|
    step = -1
 | 
						|
  else
 | 
						|
    start = 1
 | 
						|
    finish = #sorted_depots
 | 
						|
    step = 1
 | 
						|
  end
 | 
						|
 | 
						|
  for sorted_index = start, finish, step do
 | 
						|
    local depot_name = sorted_depots[sorted_index]
 | 
						|
    local depot_data = ltn_depots[depot_name]
 | 
						|
 | 
						|
    if
 | 
						|
      (search_surface == -1 or depot_data.surfaces[search_surface])
 | 
						|
      and bit32.btest(depot_data.network_id, search_network_id)
 | 
						|
      and (#search_query == 0 or string.find(depot_data.search_string, string.lower(search_query)))
 | 
						|
    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.name } },
 | 
						|
          { type = "label", style_mods = { width = widths.network_id, horizontal_align = "center" } },
 | 
						|
          { type = "flow", name = "statuses_flow", style_mods = { width = widths.status } },
 | 
						|
          { type = "label", style_mods = { width = widths.trains } },
 | 
						|
        })
 | 
						|
      end
 | 
						|
 | 
						|
      gui.update(row, {
 | 
						|
        { elem_mods = { caption = depot_name } },
 | 
						|
        { elem_mods = { caption = depot_data.network_id } },
 | 
						|
        {},
 | 
						|
        { elem_mods = { caption = depot_data.trains_string } },
 | 
						|
      })
 | 
						|
 | 
						|
      local statuses_flow = row.statuses_flow
 | 
						|
      local statuses_children = statuses_flow.children
 | 
						|
      local status_index = 0
 | 
						|
      for color, count in pairs(depot_data.statuses) do
 | 
						|
        status_index = status_index + 1
 | 
						|
        local status_flow = statuses_children[status_index]
 | 
						|
        if not status_flow then
 | 
						|
          status_flow = gui.add(statuses_flow, templates.status_indicator())
 | 
						|
        end
 | 
						|
        gui.update(status_flow, {
 | 
						|
          { elem_mods = { sprite = "flib_indicator_" .. color } },
 | 
						|
          { elem_mods = { caption = count } },
 | 
						|
        })
 | 
						|
      end
 | 
						|
      for child_index = status_index + 1, #statuses_children do
 | 
						|
        statuses_children[child_index].destroy()
 | 
						|
      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"
 | 
						|
  else
 | 
						|
    refs.warning_flow.visible = false
 | 
						|
    scroll_pane.visible = true
 | 
						|
    refs.content_frame.style = "ltnm_main_content_frame"
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
return depots_tab
 |