899 lines
40 KiB
Lua
899 lines
40 KiB
Lua
-------------------------------------------------------------------------------
|
|
---Class to help to build GuiSlider
|
|
---@class GuiCell
|
|
GuiCell = newclass(GuiElement,function(base,...)
|
|
GuiElement.init(base,...)
|
|
base.classname = "HMGuiCell"
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set element
|
|
---@param element table
|
|
---@return GuiCell
|
|
function GuiCell:element(element)
|
|
self.element = element
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set index
|
|
---@param index number
|
|
---@return GuiCell
|
|
function GuiCell:index(index)
|
|
self.m_index = index
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set color
|
|
---@param color string
|
|
---@return GuiCell
|
|
function GuiCell:color(color)
|
|
self.m_color = color
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set broken
|
|
---@param broken boolean
|
|
---@return GuiCell
|
|
function GuiCell:broken(broken)
|
|
self.m_broken = broken
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set width production information
|
|
---@return GuiCell
|
|
function GuiCell:withProductInfo()
|
|
self.m_with_product_info = true
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set width logistic information
|
|
---@return GuiCell
|
|
function GuiCell:withLogistic()
|
|
self.m_with_logistic = true
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set icon information
|
|
---@param type string
|
|
---@return GuiCell
|
|
function GuiCell:infoIcon(type)
|
|
self.m_info_icon = type
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set contraint information
|
|
---@param type string
|
|
---@return GuiCell
|
|
function GuiCell:contraintIcon(type)
|
|
self.m_contraint_icon = type
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set control information
|
|
---@param control_info string
|
|
---@return GuiCell
|
|
function GuiCell:controlInfo(control_info)
|
|
self.m_with_control_info = control_info
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Get option when error
|
|
---@return table
|
|
function GuiCell:onErrorOptions()
|
|
local options = self:getOptions()
|
|
options.type = "button"
|
|
options.style = nil
|
|
return options
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set by_limit information
|
|
---@param by_limit boolean
|
|
---@return GuiCell
|
|
function GuiCell:byLimit(by_limit)
|
|
self.m_by_limit = by_limit
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set by_limit information
|
|
---@return GuiCell
|
|
function GuiCell:byLimitUri(...)
|
|
self.m_by_limit_uri = table.concat({...},"=")
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set overlay
|
|
---@param type string
|
|
---@param name string
|
|
---@return GuiCell
|
|
function GuiCell:overlay(type, name)
|
|
self.m_overlay_type = type
|
|
self.m_overlay_name = name
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add overlay
|
|
---@param button LuaGuiElement
|
|
function GuiCell:add_overlay(button)
|
|
if self.m_overlay_type ~= nil then
|
|
local sprite = GuiElement.getSprite(self.m_overlay_type, self.m_overlay_name)
|
|
GuiElement.add(button, GuiSprite("overlay"):sprite(sprite))
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set mask
|
|
---@param mask boolean
|
|
---@return table
|
|
function GuiCell:mask(mask)
|
|
self.m_mask = mask
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add mask
|
|
---@param button LuaGuiElement
|
|
---@param color string
|
|
---@param size number
|
|
function GuiCell:add_mask(button, color, size)
|
|
if self.m_mask == true then
|
|
local mask_frame = GuiElement.add(button, GuiFrameH("layer-mask"):style("helmod_frame_colored", color, 5))
|
|
mask_frame.style.width = size or 32
|
|
mask_frame.style.height = size or 32
|
|
mask_frame.ignored_by_interaction = true
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add icon information
|
|
---@param button LuaGuiElement
|
|
---@param info_icon string
|
|
function GuiCell:add_infoIcon(button, info_icon)
|
|
local type = info_icon or self.m_info_icon
|
|
if type == nil then return end
|
|
local sprite_name = nil
|
|
local tooltip = nil
|
|
if type == "recipe-burnt" then
|
|
tooltip = "tooltip.burnt-recipe"
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.burnt)
|
|
end
|
|
if type == "rocket" then
|
|
tooltip = "tooltip.rocket-recipe"
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.rocket)
|
|
end
|
|
if type == "fluid" then
|
|
tooltip = "tooltip.resource-recipe"
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.developer)
|
|
end
|
|
if type == "resource" then
|
|
tooltip = "tooltip.resource-recipe"
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.developer)
|
|
end
|
|
if type == "technology" then
|
|
tooltip = "tooltip.technology-recipe"
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.education)
|
|
end
|
|
if type == "energy" then
|
|
tooltip = "tooltip.energy-recipe"
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.energy)
|
|
end
|
|
if type == "burnt" then
|
|
tooltip = "tooltip.burnt-product"
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.burnt)
|
|
end
|
|
if type == "block" then
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.block)
|
|
end
|
|
if sprite_name ~= nil then
|
|
local container = GuiElement.add(button, GuiFlow(type))
|
|
if type == "block" then
|
|
container.style.top_padding = 16
|
|
container.ignored_by_interaction = true
|
|
else
|
|
container.style.top_padding = -4
|
|
end
|
|
|
|
local gui_sprite = GuiSprite("info"):sprite(sprite_name)
|
|
if tooltip ~= nil then
|
|
gui_sprite:tooltip({tooltip})
|
|
end
|
|
local sprite = GuiElement.add(container, gui_sprite)
|
|
sprite.style.width = defines.sprite_size
|
|
sprite.style.height = defines.sprite_size
|
|
sprite.style.stretch_image_to_widget_size = true
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add contraint information
|
|
---@param button LuaGuiElement
|
|
function GuiCell:add_contraintIcon(button)
|
|
if self.m_contraint_icon == nil then return end
|
|
local sprite_name = nil
|
|
if self.m_contraint_icon == "linked" then
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.linked)
|
|
end
|
|
if self.m_contraint_icon == "master" then
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.master)
|
|
end
|
|
if self.m_contraint_icon == "exclude" then
|
|
sprite_name = GuiElement.getSprite(defines.sprite_info.exclude)
|
|
end
|
|
if sprite_name ~= nil then
|
|
local sprite = GuiElement.add(button, GuiSprite("contraint"):sprite(sprite_name))
|
|
sprite.style.width = defines.sprite_size
|
|
sprite.style.height = defines.sprite_size
|
|
sprite.style.stretch_image_to_widget_size = true
|
|
sprite.ignored_by_interaction = true
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add logistic information
|
|
---@param parent LuaGuiElement
|
|
---@param element table
|
|
function GuiCell:add_row_logistic(parent, element)
|
|
local tooltip = {"tooltip.logistic-row-choose"}
|
|
---solid logistic
|
|
if element.type == 0 or element.type == "item" then
|
|
local type = User.getParameter("logistic_row_item") or "belt"
|
|
local item_logistic = Player.getDefaultItemLogistic(type)
|
|
local item_prototype = Product(element)
|
|
local total_value = Format.formatNumberElement(item_prototype:countContainer(element.count, item_logistic, element.time))
|
|
|
|
--local tooltip = GuiTooltipModule("tooltip.info-module"):element({type="item", name=name})
|
|
local logistic_cell = GuiElement.add(parent, GuiFlowH("logistic-cell", item_logistic))
|
|
GuiElement.add(logistic_cell, GuiButtonSelectSpriteSm("HMLogisticEdition", "OPEN", "item", item_logistic):sprite("entity", item_logistic):color("flat"):tooltip(tooltip))
|
|
if element.limit_count ~= nil and element.limit_count > 0 then
|
|
local limit_value = Format.formatNumberElement(item_prototype:countContainer(element.limit_count, item_logistic, element.time))
|
|
GuiElement.add(logistic_cell, GuiLabel("label", item_logistic):caption({"", "x", limit_value, "/", total_value}):style("helmod_label_element"))
|
|
else
|
|
GuiElement.add(logistic_cell, GuiLabel("label", item_logistic):caption({"", "x", total_value}):style("helmod_label_element"))
|
|
end
|
|
end
|
|
---fluid logistic
|
|
if element.type == 1 or element.type == "fluid" then
|
|
local type = User.getParameter("logistic_row_fluid") or "pipe"
|
|
local fluid_logistic = Player.getDefaultFluidLogistic(type)
|
|
local fluid_prototype = Product(element)
|
|
local count = element.count
|
|
if type == "pipe" then count = count / element.time end
|
|
local total_value = Format.formatNumberElement(fluid_prototype:countContainer(count, fluid_logistic, element.time))
|
|
|
|
--local tooltip = GuiTooltipModule("tooltip.info-module"):element({type="item", name=name})
|
|
local logistic_cell = GuiElement.add(parent, GuiFlowH("logistic-cell", fluid_logistic))
|
|
GuiElement.add(logistic_cell, GuiButtonSelectSpriteSm("HMLogisticEdition", "OPEN", "fluid", fluid_logistic):sprite("entity", fluid_logistic):color("flat"):tooltip(tooltip))
|
|
if element.limit_count ~= nil and element.limit_count > 0 then
|
|
local limit_count = element.limit_count
|
|
if type == "pipe" then limit_count = limit_count / element.time end
|
|
local limit_value = Format.formatNumberElement(fluid_prototype:countContainer(limit_count, fluid_logistic, element.time))
|
|
GuiElement.add(logistic_cell, GuiLabel("label", fluid_logistic):caption({"", "x", limit_value, "/", total_value}):style("helmod_label_element"))
|
|
else
|
|
GuiElement.add(logistic_cell, GuiLabel("label", fluid_logistic):caption({"", "x", total_value}):style("helmod_label_element"))
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellFactory
|
|
GuiCellFactory = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---By Factory
|
|
function GuiCellFactory:byFactory(...)
|
|
self.m_by_factory = true
|
|
self.m_by_factory_uri = table.concat({...},"=")
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellFactory:create(parent)
|
|
local color = self.m_color or "gray"
|
|
local factory = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(factory.name, self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_element", color, 1))
|
|
|
|
local tooltip = GuiTooltipElement(self.options.tooltip):element(factory):withEnergy():withEffectInfo(factory.effects ~= nil):withControlInfo(self.m_with_control_info)
|
|
local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite("entity", factory.name):tooltip(tooltip))
|
|
|
|
self:add_mask(button, color)
|
|
|
|
local cell_factory_info = GuiElement.add(row1, GuiTable("factory-info"):column(1):style("helmod_factory_info"))
|
|
if factory.per_factory then
|
|
local per_factory = factory.per_factory or 0
|
|
local per_factory_constant = factory.per_factory_constant or 0
|
|
GuiElement.add(cell_factory_info, GuiLabel("per_factory"):caption({"", "x", per_factory}):style("helmod_label_element"):tooltip({"tooltip.beacon-per-factory"}))
|
|
GuiElement.add(cell_factory_info, GuiLabel("per_factory_constant"):caption({"", "+", per_factory_constant}):style("helmod_label_element"):tooltip({"tooltip.beacon-per-factory-constant"}))
|
|
end
|
|
|
|
local col_size = math.ceil(table.size(factory.modules)/2)
|
|
if col_size < 2 then col_size = 1 end
|
|
local cell_factory_module = GuiElement.add(row1, GuiTable("factory-modules"):column(col_size):style("helmod_factory_modules"))
|
|
|
|
---modules
|
|
if factory.modules ~= nil then
|
|
for name, count in pairs(factory.modules) do
|
|
if count > 0 then
|
|
local module_cell = GuiElement.add(cell_factory_module, GuiFlowH("module-cell", name))
|
|
local tooltip = GuiTooltipModule("tooltip.info-module"):element({type="item", name=name})
|
|
local module_icon = GuiElement.add(module_cell, GuiButtonSpriteSm("module"):sprite("item", name):tooltip(tooltip))
|
|
|
|
self:add_mask(module_icon, color, 16)
|
|
|
|
GuiElement.add(module_cell, GuiLabel("module-amount"):caption({"", "x", count}):style("helmod_label_element"))
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.m_by_limit then
|
|
local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_element", color, 2))
|
|
local limit_value = factory.limit_count or 0
|
|
if type(factory.limit) == "number" and factory.limit > 0 then
|
|
limit_value = factory.limit
|
|
end
|
|
if self.m_by_limit_uri ~= nil then
|
|
local style = "helmod_textfield_element"
|
|
if type(factory.limit) == "number" and factory.limit > 0 then
|
|
style = "helmod_textfield_element_red"
|
|
end
|
|
local text_field = GuiElement.add(row2, GuiTextField(self.m_by_limit_uri):text(Format.formatNumberFactory(limit_value)):style(style):tooltip({"helmod_common.per-sub-block"}))
|
|
text_field.style.height = 19
|
|
text_field.style.width = 70
|
|
else
|
|
GuiElement.add(row2, GuiLabel("label2", factory.name):caption(Format.formatNumberFactory(limit_value)):style("helmod_label_element"):tooltip({"helmod_common.per-sub-block"}))
|
|
end
|
|
end
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_element", color, 3))
|
|
if self.m_by_factory then
|
|
local style = "helmod_textfield_element"
|
|
if factory.input ~= nil then
|
|
style = "helmod_textfield_element_red"
|
|
end
|
|
local text_field = GuiElement.add(row3, GuiTextField(self.m_by_factory_uri):text(Format.formatNumberFactory(factory.input or factory.count or 0)):style(style):tooltip({"helmod_common.total"}))
|
|
text_field.style.height = 19
|
|
text_field.style.width = 70
|
|
else
|
|
GuiElement.add(row3, GuiLabel("label3", factory.name):caption(Format.formatNumberFactory(factory.count)):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
end
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellRecipe
|
|
GuiCellRecipe = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellRecipe:create(parent)
|
|
local color = self.m_color or "gray"
|
|
local recipe = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(recipe.name, self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1))
|
|
|
|
local recipe_prototype = RecipePrototype(recipe)
|
|
local icon_name, icon_type = recipe_prototype:getIcon()
|
|
local tooltip = GuiTooltipRecipe(self.options.tooltip):element(recipe)
|
|
local recipe_icon = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite(icon_type, icon_name):tooltip(tooltip))
|
|
|
|
self:add_overlay(recipe_icon)
|
|
self:add_infoIcon(recipe_icon)
|
|
self:add_mask(recipe_icon, color)
|
|
|
|
if self.m_broken == true then
|
|
recipe_icon.tooltip = "ERROR: Recipe ".. recipe.name .." not exist in game"
|
|
recipe_icon.sprite = "utility/warning_icon"
|
|
row1.style = "helmod_frame_product_red_1"
|
|
end
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3))
|
|
GuiElement.add(row3, GuiLabel("label2", recipe.name):caption(Format.formatPercent(recipe.production or 1).."%"):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
return cell, recipe_icon
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellProduct
|
|
GuiCellProduct = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellProduct:create(parent)
|
|
local color = self.m_color or "gray"
|
|
local element = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1))
|
|
|
|
if string.find(element.name, "helmod") then
|
|
GuiElement.add(row1, GuiButton(unpack(self.name)):sprite("menu", element.hovered, element.sprite):style(element.name):tooltip({element.localised_name}))
|
|
else
|
|
local product_icon = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite(element.type, element.name):index(Product(element):getTableKey()):caption("X"..Product(element):getElementAmount()):tooltip({self.options.tooltip, Player.getLocalisedName(element)}))
|
|
self:add_mask(product_icon, color)
|
|
end
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3))
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(Format.formatNumber(element.count, 5)):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellProductSm
|
|
GuiCellProductSm = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellProductSm:create(parent)
|
|
local color = self.m_color or "gray"
|
|
local element = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1))
|
|
|
|
if string.find(element.name, "helmod") then
|
|
GuiElement.add(row1, GuiButton(unpack(self.name)):style(element.name):tooltip({element.localised_name}))
|
|
else
|
|
GuiElement.add(row1, GuiButtonSpriteSm(unpack(self.name)):sprite(element.type, element.name):index(Product(element):getTableKey()):caption("X"..Product(element):getElementAmount()):tooltip({self.options.tooltip, Player.getLocalisedName(element)}))
|
|
end
|
|
GuiElement.infoTemperature(row1, element)
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3))
|
|
local caption3 = Format.formatNumber(element.count, 5)
|
|
if element.type == "energy" then caption3 = Format.formatNumberKilo(element.count, "J") end
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element_sm"):tooltip({"helmod_common.total"}))
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellBlock
|
|
GuiCellBlock = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellBlock:create(parent)
|
|
local display_cell_mod = User.getModSetting("display_cell_mod")
|
|
local color = self.m_color or "gray"
|
|
local element = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1))
|
|
|
|
local first_recipe = Model.firstRecipe(element.recipes)
|
|
if first_recipe ~= nil then
|
|
local tooltip = GuiTooltipElement(self.options.tooltip):element(element)
|
|
local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite(first_recipe.type, element.name):tooltip(tooltip))
|
|
|
|
self:add_infoIcon(button, "block")
|
|
|
|
GuiElement.infoRecipe(button, first_recipe)
|
|
else
|
|
local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite("menu", defines.sprites.status_help.white, defines.sprites.status_help.black))
|
|
button.style.width = 36
|
|
end
|
|
|
|
if element.limit_count ~= nil then
|
|
local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_product", color, 2))
|
|
local caption2 = Format.formatNumberFactory(element.limit_count)
|
|
if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_count) end
|
|
GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
end
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3))
|
|
local caption3 = Format.formatNumberFactory(element.count)
|
|
if display_cell_mod == "by-kilo" then caption3 = Format.formatNumberKilo(element.count) end
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellModel
|
|
GuiCellModel = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellModel:create(parent)
|
|
local color = self.m_color or "gray"
|
|
local element = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1))
|
|
|
|
local first_block = Model.firstRecipe(element.blocks)
|
|
if first_block ~= nil and first_block.name ~= "" then
|
|
local tooltip = GuiTooltipModel(self.options.tooltip):element(element)
|
|
local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite(first_block.type, first_block.name):tooltip(tooltip))
|
|
else
|
|
local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite("menu", defines.sprites.status_help.white, defines.sprites.status_help.black))
|
|
button.style.width = 36
|
|
end
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3))
|
|
local caption3 = Format.formatNumberFactory(table.size(element.blocks))
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
|
|
return cell
|
|
end
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellBlockInfo
|
|
GuiCellBlockInfo = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellBlockInfo:create(parent)
|
|
local display_cell_mod = User.getModSetting("display_cell_mod")
|
|
local color = self.m_color or "gray"
|
|
local element = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1))
|
|
row1.style.top_padding=4
|
|
row1.style.bottom_padding=4
|
|
|
|
local tooltip = GuiTooltipBlock(self.options.tooltip):element(element)
|
|
local button = GuiElement.add(row1, GuiButton(unpack(self.name)):sprite("menu", defines.sprites.hangar.white, defines.sprites.hangar.black):style("helmod_button_menu_flat"):tooltip(tooltip))
|
|
|
|
if element.limit_count ~= nil then
|
|
local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_product", color, 2))
|
|
local caption2 = Format.formatNumberFactory(element.limit_count)
|
|
if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_count) end
|
|
GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
end
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3))
|
|
local caption3 = Format.formatNumberFactory(element.count)
|
|
if display_cell_mod == "by-kilo" then caption3 = Format.formatNumberKilo(element.count) end
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellEnergy
|
|
GuiCellEnergy = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellEnergy:create(parent)
|
|
local display_cell_mod = User.getModSetting("display_cell_mod")
|
|
local color = self.m_color or "gray"
|
|
local element = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, "energy", self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_element", color, 1))
|
|
row1.style.top_padding=4
|
|
row1.style.bottom_padding=4
|
|
|
|
local tooltip = GuiTooltipEnergyConsumption(self.options.tooltip):element(element)
|
|
local button = GuiElement.add(row1, GuiButton(unpack(self.name)):sprite("menu", defines.sprites.event.white, defines.sprites.event.black):style("helmod_button_menu_flat"):tooltip(tooltip))
|
|
|
|
if self.m_by_limit then
|
|
local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_element", color, 2))
|
|
local caption2 = Format.formatNumberKilo(element.limit_energy or 0, "J")
|
|
if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_energy) end
|
|
GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
end
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_element", color, 3))
|
|
local caption3 = Format.formatNumberKilo(element.energy_total or element.power, "J")
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellPollution
|
|
GuiCellPollution = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellPollution:create(parent)
|
|
local width = 60
|
|
local display_cell_mod = User.getModSetting("display_cell_mod")
|
|
local color = self.m_color or "gray"
|
|
local element = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, "pollution", self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1))
|
|
row1.style.top_padding=4
|
|
row1.style.bottom_padding=4
|
|
row1.style.minimal_width=width
|
|
|
|
local tooltip = GuiTooltipPollution(self.options.tooltip):element(element)
|
|
local button = GuiElement.add(row1, GuiButton(unpack(self.name)):sprite("menu", defines.sprites.skull.white, defines.sprites.skull.black):style("helmod_button_menu_flat"):tooltip(tooltip))
|
|
|
|
if self.m_by_limit then
|
|
local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_product", color, 2))
|
|
row2.style.minimal_width=width
|
|
local caption2 = Format.formatNumber(element.limit_pollution or 0)
|
|
if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_pollution) end
|
|
GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
end
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3))
|
|
row3.style.minimal_width=width
|
|
local caption3 = Format.formatNumber(element.pollution_total)
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellBuilding
|
|
GuiCellBuilding = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellBuilding:create(parent)
|
|
local display_cell_mod = User.getModSetting("display_cell_mod")
|
|
local color = self.m_color or "gray"
|
|
local element = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, "building", self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1))
|
|
row1.style.top_padding=4
|
|
row1.style.bottom_padding=4
|
|
|
|
local tooltip = GuiTooltipBuilding(self.options.tooltip):element(element)
|
|
local button = GuiElement.add(row1, GuiButton(unpack(self.name)):sprite("menu", defines.sprites.factory.white, defines.sprites.factory.black):style("helmod_button_menu_flat"):tooltip(tooltip))
|
|
|
|
if self.m_by_limit then
|
|
local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_product", color, 2))
|
|
local caption2 = Format.formatNumber(element.summary.limit_building or 0)
|
|
if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.summary.limit_building) end
|
|
GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
end
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3))
|
|
local caption3 = Format.formatNumber(element.summary.building)
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellElement
|
|
GuiCellElement = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellElement:create(parent)
|
|
local display_cell_mod = User.getModSetting("display_cell_mod")
|
|
local color = self.m_color or GuiElement.color_button_none
|
|
local element = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index or 1))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_element", color, 1))
|
|
|
|
local tooltip = ""
|
|
if element.type == "energy" then
|
|
tooltip = GuiTooltipEnergy(self.options.tooltip):element(element):withLogistic():withProductInfo():withControlInfo(self.m_with_control_info)
|
|
else
|
|
tooltip = GuiTooltipElement(self.options.tooltip):element(element):withLogistic():withProductInfo():withControlInfo(self.m_with_control_info)
|
|
end
|
|
local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite(element.type or "entity", element.name):index(Product(element):getTableKey()):caption("X"..Product(element):getElementAmount()):tooltip(tooltip))
|
|
GuiElement.infoTemperature(row1, element)
|
|
|
|
if element.burnt then self:add_infoIcon(button, "burnt") end
|
|
self:add_infoIcon(button)
|
|
self:add_contraintIcon(button)
|
|
self:add_mask(button, color)
|
|
|
|
if self.m_by_limit then
|
|
local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_element", color, 2))
|
|
local caption2 = Format.formatNumberElement(element.limit_count)
|
|
if element.type == "energy" then caption2 = Format.formatNumberKilo(element.limit_count, "J") end
|
|
if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_count) end
|
|
GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
end
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_element", color, 3))
|
|
local caption3 = Format.formatNumberElement(element.count)
|
|
if element.type == "energy" then caption3 = Format.formatNumberKilo(element.count, "J") end
|
|
if display_cell_mod == "by-kilo" then caption3 = Format.formatNumberKilo(element.count) end
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"}))
|
|
|
|
if User.getParameter("display_logistic_row") == true then
|
|
local row4 = GuiElement.add(cell, GuiFrameH("row4"):style("helmod_frame_element", color, 4))
|
|
self:add_row_logistic(row4, element)
|
|
GuiElement.add(row4, GuiLabel("label-empty"):caption(""):style("helmod_label_element"))
|
|
end
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellElementSm
|
|
GuiCellElementSm = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellElementSm:create(parent)
|
|
local display_cell_mod = User.getModSetting("display_cell_mod")
|
|
local color = self.m_color or GuiElement.color_button_none
|
|
if self.m_mask == true then color = "gray" end
|
|
local element = self.element or {}
|
|
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_element_sm", color, 1))
|
|
local tooltip = ""
|
|
if element.type == "energy" then
|
|
tooltip = GuiTooltipEnergy(self.options.tooltip):element(element):withLogistic():withProductInfo()
|
|
else
|
|
tooltip = GuiTooltipElement(self.options.tooltip):element(element):withLogistic():withProductInfo()
|
|
end
|
|
local button = GuiElement.add(row1, GuiButtonSpriteSm(unpack(self.name)):sprite(element.type, element.name):index(Product(element):getTableKey()):caption("X"..Product(element):getElementAmount()):tooltip(tooltip))
|
|
|
|
self:add_mask(button, color, 16)
|
|
|
|
if self.m_by_limit then
|
|
local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_element_sm", color, 2))
|
|
local caption2 = Format.formatNumberElement(element.limit_count)
|
|
if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_count) end
|
|
if element.type == "energy" then caption2 = Format.formatNumberKilo(element.limit_count, "J") end
|
|
GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element_sm"):tooltip({"helmod_common.total"}))
|
|
end
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_element_sm", color, 3))
|
|
local caption3 = Format.formatNumberElement(element.count)
|
|
if display_cell_mod == "by-kilo" then caption3 = Format.formatNumberKilo(element.count) end
|
|
if element.type == "energy" then caption3 = Format.formatNumberKilo(element.count, "J") end
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element_sm"):tooltip({"helmod_common.total"}))
|
|
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellElementM
|
|
GuiCellElementM = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellElementM:create(parent)
|
|
local display_cell_mod = User.getModSetting("display_cell_mod")
|
|
local color = self.m_color or GuiElement.color_button_none
|
|
local element = self.element or {}
|
|
local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index or 1))
|
|
local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_element_m", color, 1))
|
|
|
|
local tooltip = ""
|
|
if element.type == "energy" then
|
|
tooltip = GuiTooltipEnergy(self.options.tooltip):element(element):withLogistic():withProductInfo():withControlInfo(self.m_with_control_info)
|
|
else
|
|
tooltip = GuiTooltipElement(self.options.tooltip):element(element):withLogistic():withProductInfo():withControlInfo(self.m_with_control_info)
|
|
end
|
|
local button = GuiElement.add(row1, GuiButtonSpriteM(unpack(self.name)):sprite(element.type or "entity", element.name):index(Product(element):getTableKey()):caption("X"..Product(element):getElementAmount()):tooltip(tooltip))
|
|
GuiElement.infoTemperature(row1, element)
|
|
|
|
self:add_infoIcon(button)
|
|
self:add_contraintIcon(button)
|
|
self:add_mask(button, color)
|
|
|
|
if self.m_by_limit then
|
|
local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_element_m", color, 2))
|
|
local caption2 = Format.formatNumberElement(element.limit_count)
|
|
if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_count) end
|
|
if element.type == "energy" then caption2 = Format.formatNumberKilo(element.limit_count, "J") end
|
|
GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element_m"):tooltip({"helmod_common.total"}))
|
|
end
|
|
|
|
local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_element_m", color, 3))
|
|
local caption3 = Format.formatNumberElement(element.count)
|
|
if display_cell_mod == "by-kilo" then caption3 = Format.formatNumberKilo(element.count) end
|
|
if element.type == "energy" then caption3 = Format.formatNumberKilo(element.count, "J") end
|
|
GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element_m"):tooltip({"helmod_common.total"}))
|
|
|
|
return cell
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellInput
|
|
GuiCellInput = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Set text
|
|
---@return GuiCellInput
|
|
function GuiCellInput:text(text)
|
|
self.m_text = text
|
|
return self
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellInput:create(parent)
|
|
local cell_name = table.clone(self.name)
|
|
table.insert(cell_name, "cell")
|
|
local button_name = table.clone(self.name)
|
|
table.insert(button_name, "validation")
|
|
local cell = GuiElement.add(parent, GuiTable(unpack(cell_name)):column(2))
|
|
local input = GuiElement.add(cell, GuiTextField(unpack(self.name)):text(self.m_text):tooltip({"tooltip.formula-allowed"}))
|
|
local button = GuiElement.add(cell, GuiButton(unpack(button_name)):sprite("menu", defines.sprites.status_ok.white, defines.sprites.status_ok.black):style("helmod_button_menu"):tooltip({"helmod_button.apply"}))
|
|
return cell, input, button
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---@class GuiCellLabel
|
|
GuiCellLabel = newclass(GuiCell,function(base,...)
|
|
GuiCell.init(base,...)
|
|
end)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Create cell
|
|
---@param parent LuaGuiElement --container for element
|
|
---@return LuaGuiElement
|
|
function GuiCellLabel:create(parent)
|
|
local display_cell_mod = User.getModSetting("display_cell_mod")
|
|
local cell_name = table.clone(self.name)
|
|
table.insert(cell_name, "cell")
|
|
local cell = GuiElement.add(parent, GuiTable(unpack(cell_name)))
|
|
|
|
if display_cell_mod == "small-text"then
|
|
---small
|
|
GuiElement.add(cell, GuiLabel("label1"):caption(self.m_caption):style("helmod_label_icon_text_sm"):tooltip({"helmod_common.total"})).style["minimal_width"] = 45
|
|
elseif display_cell_mod == "small-icon" then
|
|
---small
|
|
GuiElement.add(cell, GuiLabel("label1"):caption(self.m_caption):style("helmod_label_icon_sm"):tooltip({"helmod_common.total"})).style["minimal_width"] = 45
|
|
elseif display_cell_mod == "by-kilo" then
|
|
---by-kilo
|
|
GuiElement.add(cell, GuiLabel("label1"):caption(self.m_caption):style("helmod_label_row_right"):tooltip({"helmod_common.total"})).style["minimal_width"] = 50
|
|
else
|
|
---default
|
|
GuiElement.add(cell, GuiLabel("label1"):caption(self.m_caption):style("helmod_label_row_right"):tooltip({"helmod_common.total"})).style["minimal_width"] = 60
|
|
end
|
|
return cell
|
|
end |