275 lines
13 KiB
Lua
275 lines
13 KiB
Lua
-------------------------------------------------------------------------------
|
|
---Class to build pin dialog
|
|
---@class PinPanel
|
|
PinPanel = newclass(FormModel)
|
|
|
|
local display_pin_level_min = 0
|
|
local display_pin_level_max = 4
|
|
|
|
local display_level = {
|
|
base = 0,
|
|
factory = 0,
|
|
products = 1,
|
|
ingredients = 2,
|
|
beacon = 3
|
|
}
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On Bind Dispatcher
|
|
function PinPanel:onBind()
|
|
Dispatcher:bind("on_gui_refresh", self, self.update)
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On initialization
|
|
function PinPanel:onInit()
|
|
self.panelCaption = ({"helmod_pin-tab-panel.title"})
|
|
self.otherClose = false
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On Style
|
|
---@param styles table
|
|
---@param width_main number
|
|
---@param height_main number
|
|
function PinPanel:onStyle(styles, width_main, height_main)
|
|
styles.flow_panel = {
|
|
minimal_width = 50,
|
|
maximal_width = 600,
|
|
minimal_height = 0,
|
|
maximal_height = height_main
|
|
}
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On update
|
|
---@param event LuaEvent
|
|
function PinPanel:onUpdate(event)
|
|
self:updateHeader(event)
|
|
self:updateInfo(event)
|
|
end
|
|
|
|
local setting_options = {}
|
|
table.insert(setting_options, {name="done", icon=defines.sprites.status_ok.white, icon_white=defines.sprites.status_ok.black, tooltip="tooltip.hide-show-done", column=0})
|
|
table.insert(setting_options, {name="machine", icon=defines.sprites.factory.white, icon_white=defines.sprites.factory.black, tooltip="tooltip.hide-show-factory", column=1})
|
|
table.insert(setting_options, {name="product", icon=defines.sprites.jewel.white, icon_white=defines.sprites.jewel.black, tooltip="tooltip.hide-show-product", column=2})
|
|
table.insert(setting_options, {name="beacon", icon=defines.sprites.beacon.white, icon_white=defines.sprites.beacon.black, tooltip="tooltip.hide-show-beacon", column=1})
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Update header
|
|
---@param event LuaEvent
|
|
function PinPanel:updateHeader(event)
|
|
local action_panel = self:getMenuPanel()
|
|
action_panel.clear()
|
|
local group1 = GuiElement.add(action_panel, GuiFlowH("group1"))
|
|
|
|
---setting options
|
|
|
|
for _,setting_option in pairs(setting_options) do
|
|
local setting_name = string.format("pin_panel_column_hide_%s", setting_option.name)
|
|
local setting_value = User.getSetting(setting_name)
|
|
if setting_value == true then
|
|
GuiElement.add(group1, GuiButton(self.classname, "change-hide", setting_option.name):sprite("menu", setting_option.icon_white, setting_option.icon):style("helmod_button_menu"):tooltip({setting_option.tooltip}))
|
|
else
|
|
GuiElement.add(group1, GuiButton(self.classname, "change-hide", setting_option.name):sprite("menu", setting_option.icon, setting_option.icon):style("helmod_button_menu_selected"):tooltip({setting_option.tooltip}))
|
|
end
|
|
end
|
|
|
|
local group2 = GuiElement.add(action_panel, GuiFlowH("group2"))
|
|
GuiElement.add(group2, GuiButton(self.classname, "recipe-done-remove"):sprite("menu", defines.sprites.checkmark.black,defines.sprites.checkmark.black):style("helmod_button_menu_actived_red"):tooltip({"helmod_button.remove-done"}))
|
|
|
|
local parameter_objects = User.getParameter(self.parameter_objects)
|
|
local group3 = GuiElement.add(action_panel, GuiFlowH("group3"))
|
|
GuiElement.add(group3, GuiButton("HMSummaryPanel", "OPEN", parameter_objects.model, parameter_objects.block):sprite("menu", defines.sprites.list_view.black, defines.sprites.list_view.black):style("helmod_button_menu"):tooltip({"helmod_result-panel.tab-button-summary"}))
|
|
|
|
local group4 = GuiElement.add(action_panel, GuiFlowH("group4"))
|
|
GuiElement.add(group4, GuiButton("HMProductionPanel", "OPEN", parameter_objects.model, parameter_objects.block):sprite("menu", defines.sprites.hangar.black,defines.sprites.hangar.black):style("helmod_button_menu"):tooltip({"helmod_result-panel.tab-button-production-block"}))
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Update information
|
|
---@param event LuaEvent
|
|
function PinPanel:updateInfo(event)
|
|
local infoPanel = self:getScrollFramePanel("info-panel")
|
|
infoPanel.clear()
|
|
|
|
local column = 2
|
|
for _,setting_option in pairs(setting_options) do
|
|
local setting_name = string.format("pin_panel_column_hide_%s", setting_option.name)
|
|
local setting_value = User.getSetting(setting_name)
|
|
if not(setting_value) then column = column + setting_option.column end
|
|
end
|
|
|
|
local model, block, recipe = self:getParameterObjects()
|
|
|
|
if block ~= nil then
|
|
local resultTable = GuiElement.add(infoPanel, GuiTable("list-data"):column(column):style("helmod_table-odd"))
|
|
resultTable.vertical_centering = false
|
|
resultTable.style.horizontally_stretchable = false
|
|
|
|
self:addProductionBlockHeader(resultTable)
|
|
for _, recipe in spairs(block.recipes, function(t,a,b) return t[b]["index"] > t[a]["index"] end) do
|
|
local is_done = recipe.is_done or false
|
|
if not(is_done and User.getSetting("pin_panel_column_hide_done")) then
|
|
self:addProductionBlockRow(resultTable, model, block, recipe)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add header data tab
|
|
---@param itable LuaGuiElement
|
|
function PinPanel:addProductionBlockHeader(itable)
|
|
|
|
local gui_done = GuiElement.add(itable, GuiFrameH("header-done"):style(helmod_frame_style.hidden))
|
|
GuiElement.add(gui_done, GuiLabel("header-done"):caption({"helmod_result-panel.col-header-done"}))
|
|
|
|
local guiRecipe = GuiElement.add(itable, GuiFrameH("header-recipe"):style(helmod_frame_style.hidden))
|
|
GuiElement.add(guiRecipe, GuiLabel("header-recipe"):caption({"helmod_result-panel.col-header-recipe"}))
|
|
|
|
if not(User.getSetting("pin_panel_column_hide_product")) then
|
|
local guiProducts = GuiElement.add(itable, GuiFrameH("header-products"):style(helmod_frame_style.hidden))
|
|
GuiElement.add(guiProducts, GuiLabel("header-products"):caption({"helmod_result-panel.col-header-products"}))
|
|
end
|
|
|
|
if not(User.getSetting("pin_panel_column_hide_machine")) then
|
|
local guiFactory = GuiElement.add(itable, GuiFrameH("header-factory"):style(helmod_frame_style.hidden))
|
|
GuiElement.add(guiFactory, GuiLabel("header-factory"):caption({"helmod_result-panel.col-header-factory"}))
|
|
end
|
|
|
|
if not(User.getSetting("pin_panel_column_hide_product")) then
|
|
local guiIngredients = GuiElement.add(itable, GuiFrameH("header-ingredients"):style(helmod_frame_style.hidden))
|
|
GuiElement.add(guiIngredients, GuiLabel("header-ingredients"):caption({"helmod_result-panel.col-header-ingredients"}))
|
|
end
|
|
|
|
if not(User.getSetting("pin_panel_column_hide_beacon")) then
|
|
local guiBeacon = GuiElement.add(itable, GuiFrameH("header-beacon"):style(helmod_frame_style.hidden))
|
|
GuiElement.add(guiBeacon, GuiLabel("header-beacon"):caption({"helmod_result-panel.col-header-beacon"}))
|
|
end
|
|
|
|
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Add row data tab
|
|
---@param gui_table LuaGuiElement
|
|
---@param model table
|
|
---@param block table
|
|
---@param recipe table
|
|
function PinPanel:addProductionBlockRow(gui_table, model, block, recipe)
|
|
local recipe_prototype = RecipePrototype(recipe)
|
|
local is_done = recipe.is_done or false
|
|
|
|
---col done
|
|
if is_done == true then
|
|
GuiElement.add(gui_table, GuiButton(self.classname, "recipe-done", recipe.id):sprite("menu", defines.sprites.status_ok.black, defines.sprites.status_ok.black):style("helmod_button_menu_selected_green"):tooltip({"helmod_button.done"}))
|
|
else
|
|
GuiElement.add(gui_table, GuiButton(self.classname, "recipe-done", recipe.id):sprite("menu", defines.sprites.checkmark.black, defines.sprites.checkmark.black):style("helmod_button_menu_actived_green"):tooltip({"helmod_button.done"}))
|
|
end
|
|
---col recipe
|
|
local cell_recipe = GuiElement.add(gui_table, GuiFrameH("recipe", recipe.id):style(helmod_frame_style.hidden))
|
|
local button_recipe = GuiCellRecipe("HMRecipeEdition", "OPEN", model.id, block.id, recipe.id):element(recipe):infoIcon(recipe.type):tooltip("tooltip.edit-recipe"):color(GuiElement.color_button_default):mask(is_done)
|
|
--local button_recipe = GuiCellRecipe(self.classname, "do_noting", "recipe"):element(recipe):infoIcon(recipe.type):tooltip("tooltip.info-product"):color(GuiElement.color_button_default):mask(is_done)
|
|
GuiElement.add(cell_recipe, button_recipe)
|
|
|
|
if not(User.getSetting("pin_panel_column_hide_product")) then
|
|
---products
|
|
local cell_products = GuiElement.add(gui_table, GuiTable("products",recipe.id):column(3))
|
|
cell_products.style.horizontally_stretchable = false
|
|
local lua_products = recipe_prototype:getProducts(recipe.factory)
|
|
if lua_products ~= nil then
|
|
for index, lua_product in pairs(lua_products) do
|
|
local product_prototype = Product(lua_product)
|
|
local product = product_prototype:clone()
|
|
product.time = model.time
|
|
product.count = product_prototype:countProduct(model, recipe)
|
|
if block.by_limit == true and block.count > 1 then
|
|
product.limit_count = product.count / block.count
|
|
end
|
|
GuiElement.add(cell_products, GuiCellElementSm(self.classname, "do_noting", "product"):index(index):element(product):tooltip("tooltip.info-product"):color(GuiElement.color_button_none):byLimit(block.by_limit):mask(is_done))
|
|
end
|
|
end
|
|
end
|
|
|
|
if not(User.getSetting("pin_panel_column_hide_machine")) then
|
|
---col factory
|
|
local factory = recipe.factory
|
|
GuiElement.add(gui_table, GuiCellFactory(self.classname, "pipette-entity", recipe.id, "factory"):index(recipe.id):element(factory):tooltip("controls.smart-pipette"):color(GuiElement.color_button_default):byLimit(block.by_limit):mask(is_done))
|
|
end
|
|
|
|
if not(User.getSetting("pin_panel_column_hide_product")) then
|
|
---ingredients
|
|
local cell_ingredients = GuiElement.add(gui_table, GuiTable("ingredients", recipe.id):column(3))
|
|
cell_ingredients.style.horizontally_stretchable = false
|
|
local lua_ingredients = recipe_prototype:getIngredients(recipe.factory)
|
|
if lua_ingredients ~= nil then
|
|
for index, lua_ingredient in pairs(lua_ingredients) do
|
|
local ingredient_prototype = Product(lua_ingredient)
|
|
local ingredient = ingredient_prototype:clone()
|
|
ingredient.time = model.time
|
|
ingredient.count = ingredient_prototype:countIngredient(model, recipe)
|
|
if block.by_limit == true and block.count > 1 then
|
|
ingredient.limit_count = ingredient.count / block.count
|
|
end
|
|
GuiElement.add(cell_ingredients, GuiCellElementSm(self.classname, "do_noting", "ingredient"):index(index):element(ingredient):tooltip("tooltip.info-product"):color(GuiElement.color_button_add):byLimit(block.by_limit):mask(is_done))
|
|
end
|
|
end
|
|
end
|
|
|
|
if not(User.getSetting("pin_panel_column_hide_beacon")) then
|
|
---col beacon
|
|
local beacons = recipe.beacons
|
|
local cell_beacons = GuiElement.add(gui_table, GuiFlowH("beacon", recipe.id))
|
|
cell_beacons.style.horizontally_stretchable = false
|
|
cell_beacons.style.horizontal_spacing = 2
|
|
if beacons ~= nil then
|
|
for index, beacon in pairs(beacons) do
|
|
if block.by_limit == true and block.count > 1 then
|
|
beacon.limit_count = beacon.count / block.count
|
|
else
|
|
beacon.limit_count = nil
|
|
end
|
|
GuiElement.add(cell_beacons, GuiCellFactory(self.classname, "pipette-entity", recipe.id, "beacons", index):index(index):element(beacon):tooltip("controls.smart-pipette"):color(GuiElement.color_button_default):byLimit(block.by_limit):mask(is_done))
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On event
|
|
---@param event LuaEvent
|
|
function PinPanel:onEvent(event)
|
|
|
|
if event.action == "change-hide" then
|
|
local element = event.item1
|
|
local setting_name = string.format("pin_panel_column_hide_%s", element)
|
|
local setting_value = User.getSetting(setting_name)
|
|
User.setSetting(setting_name, not(setting_value))
|
|
self:onUpdate(event)
|
|
end
|
|
|
|
local model, block, recipe = self:getParameterObjects()
|
|
|
|
if block == nil then return end
|
|
|
|
if event.action == "pipette-entity" then
|
|
local recipes = block.recipes
|
|
local index = tonumber(event.item3)
|
|
Player.setSmartTool(recipes[event.item1], event.item2, index)
|
|
end
|
|
if event.action == "recipe-done" then
|
|
local recipes = block.recipes
|
|
recipes[event.item1].is_done = not(recipes[event.item1].is_done)
|
|
self:updateInfo(event)
|
|
end
|
|
if event.action == "recipe-done-remove" then
|
|
local recipes = block.recipes
|
|
for _,recipe in pairs(recipes) do
|
|
recipe.is_done = nil
|
|
end
|
|
self:updateInfo(event)
|
|
end
|
|
end
|