From f8e8778b92dfc5f88a77d8138005392dd511b182 Mon Sep 17 00:00:00 2001 From: Helfima Date: Fri, 23 Aug 2019 12:43:08 +0200 Subject: [PATCH] Added class User Added class User Fixed UI (stable) --- controller/Controller.lua | 330 +++++++++++----------------- core/Command.lua | 5 +- core/ElementGui.lua | 44 ++-- core/Form.lua | 40 ++-- core/Format.lua | 4 +- core/ModelBuilder.lua | 47 ++-- core/ModelCompute.lua | 13 +- core/defines.lua | 2 +- core/logging.lua | 23 +- dialog/MainMenuPanel.lua | 230 ------------------- dialog/PinPanel.lua | 86 +++----- dialog/StatusPanel.lua | 44 +--- edition/AbstractEdition.lua | 86 ++++---- edition/EnergyEdition.lua | 5 +- edition/ProductBlockEdition.lua | 34 ++- edition/ProductEdition.lua | 9 +- edition/ProductLineEdition.lua | 12 +- edition/RecipeEdition.lua | 1 + edition/ResourceEdition.lua | 39 +--- edition/RuleEdition.lua | 1 + graphics/icons/menu_icons.png | Bin 118402 -> 119174 bytes model/EntityPrototype.lua | 2 +- model/FluidPrototype.lua | 2 +- model/ItemPrototype.lua | 2 +- model/Model.lua | 19 +- model/Player.lua | 179 +-------------- model/Product.lua | 2 +- model/RecipePrototype.lua | 2 +- model/Technology.lua | 2 +- model/User.lua | 378 ++++++++++++++++++++++++++++++++ prototypes/style.lua | 5 +- selector/AbstractSelector.lua | 120 +++++----- selector/ContainerSelector.lua | 4 +- selector/EntitySelector.lua | 4 +- selector/FluidSelector.lua | 4 +- selector/ItemSelector.lua | 4 +- selector/RecipeSelector.lua | 8 +- selector/TechnologySelector.lua | 4 +- tab/AbstractTab.lua | 79 +++---- tab/AdminTab.lua | 1 - tab/EnergyTab.lua | 9 +- tab/ProductionBlockTab.lua | 89 ++++---- tab/ProductionLineTab.lua | 36 ++- tab/PropertiesTab.lua | 11 +- tab/PrototypeFiltersTab.lua | 4 +- tab/ResourceTab.lua | 12 +- 46 files changed, 890 insertions(+), 1147 deletions(-) delete mode 100644 dialog/MainMenuPanel.lua create mode 100644 model/User.lua diff --git a/controller/Controller.lua b/controller/Controller.lua index 83f9955a..d3e05ac3 100644 --- a/controller/Controller.lua +++ b/controller/Controller.lua @@ -1,7 +1,5 @@ require "core.Form" require "dialog.HelpPanel" -require "dialog.LeftMenuPanel" -require "dialog.MainMenuPanel" require "dialog.PinPanel" require "dialog.StatusPanel" require "dialog.Settings" @@ -31,7 +29,9 @@ require "tab.AdminTab" require "edition.ProductLineEdition" require "edition.ProductBlockEdition" +ModGui = require "mod-gui" Cache = require "core.Cache" +User = require "model.User" Model = require "model.Model" ModelCompute = require "core.ModelCompute" ModelBuilder = require "core.ModelBuilder" @@ -71,9 +71,6 @@ function Controller.init() Logging:debug(Controller.classname, "init()") local controllers = {} - table.insert(controllers, MainMenuPanel:new()) - table.insert(controllers, LeftMenuPanel:new()) - table.insert(controllers, Settings:new()) table.insert(controllers, HelpPanel:new()) table.insert(controllers, Download:new()) @@ -155,9 +152,22 @@ end -- function Controller.cleanController(player) Logging:trace(Controller.classname, "cleanController(player)") - for _,location in pairs(helmod_settings_mod.display_location.allowed_values) do - if player.gui[location]["helmod_main_panel"] ~= nil then - player.gui[location]["helmod_main_panel"].destroy() + for _,location in pairs({"center", "left", "top", "screen"}) do + local lua_gui_element = player.gui[location] + for _,children_name in pairs(lua_gui_element.children_names) do + if string.find(children_name,"helmod") then + lua_gui_element[children_name].destroy() + end + if Controller.getView(children_name) then + Controller.getView(children_name):close() + end + if children_name == "HMTab" then + for _,form in pairs(Controller.getViews()) do + if form:getPanelName() == "HMTab" then + form:close() + end + end + end end end end @@ -172,14 +182,19 @@ end function Controller.bindController(player) Logging:trace(Controller.classname, "bindController()") if player ~= nil then - local gui_top = Player.getGuiTop(player) - if gui_top["helmod_menu-main"] ~= nil then gui_top["helmod_menu-main"].destroy() end - if not(Player.getSettings("display_main_icon")) then - if gui_top["helmod_planner-command"] ~= nil then gui_top["helmod_planner-command"].destroy() end + local lua_gui_element = Player.getGui("top") + if lua_gui_element["helmod_menu-main"] ~= nil then lua_gui_element["helmod_menu-main"].destroy() end + if lua_gui_element["helmod_planner-command"] ~= nil then lua_gui_element["helmod_planner-command"].destroy() end + + lua_gui_element = ModGui.get_button_flow(Player.native()) + if not(User.getModSetting("display_main_icon")) or User.getVersion() < "0.8.18" then + if lua_gui_element["helmod_planner-command"] ~= nil then lua_gui_element["helmod_planner-command"].destroy() end end - if gui_top ~= nil and gui_top["helmod_planner-command"] == nil and Player.getSettings("display_main_icon") then - local gui_button = ElementGui.addGuiFrameH(gui_top, "helmod_planner-command", helmod_frame_style.default) - gui_button.add({type="button", name="helmod_planner-command", tooltip=({"helmod_planner-command"}), style="helmod_icon"}) + if lua_gui_element ~= nil and lua_gui_element["helmod_planner-command"] == nil and User.getModSetting("display_main_icon") then + --local gui_button = ElementGui.addGuiFrameH(lua_gui_element, "helmod_planner-command", helmod_frame_style.default) + local gui_button = ElementGui.addGuiButton(lua_gui_element, "helmod_planner-command", nil, "helmod_button_icon_calculator",nil, ({"helmod_planner-command"})) + gui_button.style.width = 37 + gui_button.style.height = 37 end end end @@ -256,12 +271,9 @@ function Controller.parseEvent() Controller.openMainPanel() end Controller.sendEvent(Event.native(), "HMRecipeSelector", "OPEN") + Controller.sendEvent(Event.native(), "HMRecipeSelector", "OPEN") end end - -- Open form - if Controller.isOpened() then - --Controller.openFormPanel(Event.native(), Event.name, Event.action, Event.item1, Event.item2, Event.item3) - end -- button action if Event.isButton() or Event.next then Logging:debug(Controller.classname, "button action") @@ -316,47 +328,45 @@ function Controller.sendEvent(event, classname, action, item, item2, item3) Controller.onEvent(event, action, item, item2, item3) end if views ~= nil and views[classname] then - local ui = Player.getGlobalUI() + local navigate = User.getNavigate() if action == "CLOSE" then views[classname]:close(true) end - local form_loop = { "data"} - if string.find(classname, "Pin") then form_loop = {"pin"} end if Event.prepare == false then - Logging:debug(Controller.classname, "===== prepare", game.tick) + Logging:debug(Controller.classname, "-> prepare", game.tick) if action == "OPEN" then - Controller.setActiveForm(classname) + User.setActiveForm(classname) end - Logging:debug(Controller.classname, "***** before event: ui", ui) + Logging:debug(Controller.classname, "-> before event: navigate", navigate) - for form_name,form_ui in pairs(ui) do - Logging:debug(Controller.classname, "before event", form_name, classname) - if views[form_name] ~= nil and form_name == classname and Controller.isActiveForm(form_name) then - views[form_name]:beforeEvent(event, action, item, item2, item3) + for _,form in pairs(views) do + local form_name = form:classname() + Logging:debug(Controller.classname, "--> beforeEvent", form_name, classname) + if form_name == classname and User.isActiveForm(form_name) then + form:beforeEvent(event, action, item, item2, item3) end end - for form_name,form_ui in pairs(ui) do - Logging:debug(Controller.classname, "***** on event", form_name, classname) - if views[form_name] ~= nil and form_name == classname and Controller.isActiveForm(form_name) then - views[form_name]:onEvent(event, action, item, item2, item3) + for _,form in pairs(views) do + local form_name = form:classname() + Logging:debug(Controller.classname, "--> onEvent", form_name, classname) + if form_name == classname and User.isActiveForm(form_name) then + form:onEvent(event, action, item, item2, item3) end end - Logging:debug(Controller.classname, "***** after event: ui", ui) - - for form_name,form_ui in pairs(ui) do - Logging:debug(Controller.classname, "***** locate", ui, locate) - if form_name ~= nil then - if views[form_name] ~= nil and Controller.isActiveForm(form_name) then - local prepared = views[form_name]:prepare(event, action, item, item2, item3) - if(prepared == true) then - Event.prepare = prepared - end - else - Logging:error(Controller.classname, "Prepare locate", ui, locate) + + for _,form in pairs(views) do + local form_name = form:classname() + Logging:debug(Controller.classname, "--> prepare", form_name) + if User.isActiveForm(form_name) then + local prepared = form:prepare(event, action, item, item2, item3) + if(prepared == true) then + Event.prepare = prepared end + else + Logging:warn(Controller.classname, "--> Prepare", form_name) end end if(Event.prepare == true) then @@ -364,21 +374,21 @@ function Controller.sendEvent(event, classname, action, item, item2, item3) end end - Logging:debug(Controller.classname, "===== open and update", game.tick) - for form_name,form_ui in pairs(ui) do - if form_name ~= nil then - if views[form_name] ~= nil and Controller.isActiveForm(form_name) then - if action == "OPEN" or Event.force_open == true then - Logging:debug(Controller.classname, "***** open form") - views[form_name]:open(event, action, item, item2, item3) - end - if not(action ~= "OPEN" and form_name == classname) or Event.force_refresh == true then - Logging:debug(Controller.classname, "***** update form") - views[form_name]:update(event, action, item, item2, item3) - end - else - Logging:error(Controller.classname, "Open or Update locate", ui, locate) + Logging:debug(Controller.classname, "-> open and update", game.tick) + for _,form in pairs(views) do + local form_name = form:classname() + Logging:debug(Controller.classname, "--> open and update", form_name, User.isActiveForm(form_name)) + if User.isActiveForm(form_name) then + if action == "OPEN" or Event.force_open == true then + Logging:debug(Controller.classname, "---> open form", form_name) + form:open(event, action, item, item2, item3) + end + if not(action ~= "OPEN" and form_name == classname) or Event.force_refresh == true then + Logging:debug(Controller.classname, "---> update form", form_name) + form:update(event, action, item, item2, item3) end + else + Logging:warn(Controller.classname, "---> Open or Update", form_name) end end return false @@ -411,22 +421,24 @@ end -- function Controller.openMainPanel() Logging:debug(Controller.classname, "openMainPanel()") - local lua_player = Player.native() - local location = Player.getSettings("display_location") - local globalGui = Player.getGlobalGui() + local current_block = User.getParameter("current_block") local model = Model.getModel() - local gui_main = lua_player.gui[location] + if Controller.isOpened() then Controller.cleanController(Player.native()) else local form_name - if globalGui.currentBlock and model.blocks[globalGui.currentBlock] then + if current_block and model.blocks[current_block] then form_name = "HMProductionBlockTab" else form_name = "HMProductionLineTab" end Event.force_refresh = true + Event.prepare = false + Controller.sendEvent(nil, form_name, "OPEN") + Event.prepare = true Controller.sendEvent(nil, form_name, "OPEN") + Event.finaly() end end @@ -436,15 +448,19 @@ end -- @function [parent=#Controller] isOpened -- function Controller.isOpened() - Logging:trace(Controller.classname, "isOpened()") + Logging:debug(Controller.classname, "isOpened()") local lua_player = Player.native() if lua_player == nil then return false end - local location = Player.getSettings("display_location") - local guiMain = lua_player.gui[location] - if guiMain["helmod_main_panel"] ~= nil then - return true + local gui_screen = Player.getGui("screen") + local is_open = false + for _,form_name in pairs(gui_screen.children_names) do + --if string.find(form_name,"Tab") and Controller.getView(form_name) then + if form_name == "HMTab" then + Logging:debug(Controller.classname,"form is open", form_name) + is_open = true + end end - return false + return is_open end ------------------------------------------------------------------------------- @@ -514,8 +530,6 @@ end -- function Controller.onEventAccessAll(event, action, item, item2, item3) Logging:debug(Controller.classname, "onEventAccessAll()", action, item, item2, item3) - local globalGui = Player.getGlobalGui() - local ui = Player.getGlobalUI() if action == "refresh-model" then ModelCompute.update() @@ -523,31 +537,33 @@ function Controller.onEventAccessAll(event, action, item, item2, item3) end if action == "change-model" then - globalGui.model_id = item + User.setParameter("model_id", item) Model.getModel() - Controller.setActiveForm("HMProductionLineTab") - globalGui.currentBlock = "new" + User.setActiveForm("HMProductionLineTab") + User.setParameter("current_block", "new") Event.force_refresh = true Event.force_open = true end if action == "change-tab" then - Controller.setActiveForm(item) if item == "HMProductionLineTab" then - globalGui.currentBlock = "new" + User.setParameter("current_block", "new") else - globalGui.currentBlock = item2 + User.setParameter("current_block", item2) end Event.force_refresh = true Event.force_open = true + Controller.createEvent(event, item, "OPEN", item, item2, item3) end if action == "change-sort" then - if globalGui.order.name == item then - globalGui.order.ascendant = not(globalGui.order.ascendant) + local order = User.getParameter("order") + if order.name == item then + order.ascendant = not(order.ascendant) else - globalGui.order = {name=item, ascendant=true} + order = {name=item, ascendant=true} end + User.setParameter("order", order) Event.force_refresh = true end @@ -567,19 +583,18 @@ end function Controller.onEventAccessRead(event, action, item, item2, item3) Logging:debug(Controller.classname, "onEventAccessRead()", action, item, item2, item3) - local globalGui = Player.getGlobalGui() - local ui = Player.getGlobalUI() - if action == "copy-model" then - if Controller.isActiveForm("HMProductionBlockTab") then - if globalGui.currentBlock ~= nil and globalGui.currentBlock ~= "new" then - globalGui.copy_from_block_id = globalGui.currentBlock - globalGui.copy_from_model_id = Player.getGlobalGui("model_id") + local model_id = User.getParameter("model_id") + local current_block = User.getParameter("current_block") + if User.isActiveForm("HMProductionBlockTab") then + if current_block ~= nil and current_block ~= "new" then + User.setParameter("copy_from_block_id", current_block) + User.setParameter("copy_from_model_id", model_id) end end - if Controller.isActiveForm("HMProductionLineTab") then - globalGui.copy_from_block_id = nil - globalGui.copy_from_model_id = Player.getGlobalGui("model_id") + if User.isActiveForm("HMProductionLineTab") then + User.setParameter("copy_from_block_id", nil) + User.setParameter("copy_from_model_id", model_id) end Event.force_refresh = true end @@ -625,27 +640,26 @@ end -- function Controller.onEventAccessWrite(event, action, item, item2, item3) Logging:debug(Controller.classname, "onEventAccessWrite()", action, item, item2, item3) - local global_player = Player.getGlobal() - local globalGui = Player.getGlobalGui() - local ui = Player.getGlobalUI() local model = Model.getModel() - + local model_id = User.getParameter("model_id") + local current_block = User.getParameter("current_block") + if action == "change-tab" then if item == "HMProductionBlockTab" and item2 == "new" then Controller.createEvent(event, "HMRecipeSelector", "OPEN", item, item2, item3) end end - if action == "change-boolean-option" and model.blocks ~= nil and model.blocks[globalGui.currentBlock] ~= nil then - local element = model.blocks[globalGui.currentBlock] - ModelBuilder.updateProductionBlockOption(globalGui.currentBlock, item, not(element[item])) + if action == "change-boolean-option" and model.blocks ~= nil and model.blocks[current_block] ~= nil then + local element = model.blocks[current_block] + ModelBuilder.updateProductionBlockOption(current_block, item, not(element[item])) ModelCompute.update() Event.force_refresh = true end - if action == "change-number-option" and model.blocks ~= nil and model.blocks[globalGui.currentBlock] ~= nil then + if action == "change-number-option" and model.blocks ~= nil and model.blocks[current_block] ~= nil then local value = ElementGui.getInputNumber(event.element) - ModelBuilder.updateProductionBlockOption(globalGui.currentBlock, item, value) + ModelBuilder.updateProductionBlockOption(current_block, item, value) ModelCompute.update() Event.force_refresh = true end @@ -683,7 +697,7 @@ function Controller.onEventAccessWrite(event, action, item, item2, item3) local recipe = recipes[1] ModelBuilder.addRecipeIntoProductionBlock(recipe.name, recipe.type) ModelCompute.update() - globalGui["scroll_down"] = true + User.setParameter("scroll_down",true) Event.force_refresh = true else Controller.createEvent(event, "HMRecipeSelector", "OPEN", item, item2, item3) @@ -701,11 +715,11 @@ function Controller.onEventAccessWrite(event, action, item, item2, item3) if action == "production-block-remove" then ModelBuilder.removeProductionBlock(item) ModelCompute.update() - globalGui.currentBlock = "new" + User.setParameter("current_block","new") Event.force_refresh = true end - if Controller.isActiveForm("HMProductionLineTab") then + if User.isActiveForm("HMProductionLineTab") then if action == "production-block-add" then local recipes = Player.searchRecipe(item2) if #recipes == 1 then @@ -717,12 +731,12 @@ function Controller.onEventAccessWrite(event, action, item, item2, item3) else Controller.createEvent(nil, "HMRecipeSelector", "OPEN", item, item2, item3) end - Controller.setActiveForm("HMProductionBlockTab") + User.setActiveForm("HMProductionBlockTab") end if action == "production-block-up" then local step = 1 - if event.shift then step = Player.getSettings("row_move_step") end + if event.shift then step = User.getModSetting("row_move_step") end if event.control then step = 1000 end ModelBuilder.upProductionBlock(item, step) ModelCompute.update() @@ -731,7 +745,7 @@ function Controller.onEventAccessWrite(event, action, item, item2, item3) if action == "production-block-down" then local step = 1 - if event.shift then step = Player.getSettings("row_move_step") end + if event.shift then step = User.getModSetting("row_move_step") end if event.control then step = 1000 end ModelBuilder.downProductionBlock(item, step) ModelCompute.update() @@ -739,7 +753,7 @@ function Controller.onEventAccessWrite(event, action, item, item2, item3) end end - if Controller.isActiveForm("HMProductionBlockTab") then + if User.isActiveForm("HMProductionBlockTab") then if action == "production-recipe-remove" then ModelBuilder.removeProductionRecipe(item, item2) ModelCompute.update() @@ -748,7 +762,7 @@ function Controller.onEventAccessWrite(event, action, item, item2, item3) if action == "production-recipe-up" then local step = 1 - if event.shift then step = Player.getSettings("row_move_step") end + if event.shift then step = User.getModSetting("row_move_step") end if event.control then step = 1000 end ModelBuilder.upProductionRecipe(item, item2, step) ModelCompute.update() @@ -757,7 +771,7 @@ function Controller.onEventAccessWrite(event, action, item, item2, item3) if action == "production-recipe-down" then local step = 1 - if event.shift then step = Player.getSettings("row_move_step") end + if event.shift then step = User.getModSetting("row_move_step") end if event.control then step = 1000 end ModelBuilder.downProductionRecipe(item, item2, step) ModelCompute.update() @@ -765,7 +779,7 @@ function Controller.onEventAccessWrite(event, action, item, item2, item3) end end - if ui.data == "HMEnergyTab" then + if User.isActiveForm("HMEnergyTab") then if action == "power-remove" then ModelBuilder.removePower(item) Event.force_refresh = true @@ -773,15 +787,15 @@ function Controller.onEventAccessWrite(event, action, item, item2, item3) end if action == "past-model" then - if Controller.isActiveForm("HMProductionBlockTab") then - ModelBuilder.pastModel(globalGui.copy_from_model_id, globalGui.copy_from_block_id) + if User.isActiveForm("HMProductionBlockTab") then + ModelBuilder.pastModel(User.getParameter("copy_from_model_id"), User.getParameter("copy_from_block_id")) ModelCompute.update() Event.force_refresh = true end - if Controller.isActiveForm("HMProductionLineTab") then - ModelBuilder.pastModel(globalGui.copy_from_model_id, globalGui.copy_from_block_id) + if User.isActiveForm("HMProductionLineTab") then + ModelBuilder.pastModel(User.getParameter("copy_from_model_id"), User.getParameter("copy_from_block_id")) ModelCompute.update() - globalGui.currentBlock = "new" + User.setParameter("current_block","new") Event.force_refresh = true end end @@ -801,12 +815,10 @@ end -- function Controller.onEventAccessDelete(event, action, item, item2, item3) Logging:debug(Controller.classname, "onEventAccessDelete()", action, item, item2, item3) - local globalGui = Player.getGlobalGui() - local ui = Player.getGlobalUI() if action == "remove-model" then ModelBuilder.removeModel(item) - Controller.setActiveForm("HMProductionLineTab") - globalGui.currentBlock = "new" + User.setActiveForm("HMProductionLineTab") + User.setParameter("current_block","new") Event.force_refresh = true end end @@ -835,84 +847,4 @@ function Controller.onEventAccessAdmin(event, action, item, item2, item3) end -------------------------------------------------------------------------------- --- Set Close Form --- --- @function [parent=#Controller] setCloseForm --- --- @param #string classname --- @param #table location --- -function Controller.setCloseForm(classname, location) - Logging:debug(Controller.classname, "setCloseForm()", classname) - local ui = Player.getGlobalUI() - if ui[classname] == nil then ui[classname] = {} end - ui[classname]["open"] = false - if string.find(classname, "Tab") then - if ui["Tab"] == nil then ui["Tab"] = {} end - ui["Tab"]["location"] = location - else - ui[classname]["location"] = location - end -end - -------------------------------------------------------------------------------- --- Get location Form --- --- @function [parent=#Controller] getLocationForm --- --- @param #string classname --- @param #table location --- --- @return #table --- -function Controller.getLocationForm(classname) - Logging:debug(Controller.classname, "getLocationForm()", classname) - local ui = Player.getGlobalUI() - if string.find(classname, "Tab") then - if ui["Tab"] == nil then return nil end - return ui["Tab"]["location"] - else - if ui[classname] == nil then return nil end - return ui[classname]["location"] - end -end - -------------------------------------------------------------------------------- --- Set Active Form --- --- @function [parent=#Controller] setActiveForm --- --- @param #string classname --- -function Controller.setActiveForm(classname) - Logging:debug(Controller.classname, "setActiveForm()", classname) - local ui = Player.getGlobalUI() - if string.find(classname, "Tab") then - for form_name,form in pairs(ui) do - if views[form_name] ~= nil and form_name ~= classname and string.find(form_name, "Tab") then - Controller.getView(form_name):close(true) - end - end - end - if ui[classname] == nil then ui[classname] = {} end - ui[classname]["open"] = true -end - -------------------------------------------------------------------------------- --- Is Active Form --- --- @function [parent=#Controller] isActiveForm --- --- @param #string classname --- --- @return #boolean --- -function Controller.isActiveForm(classname) - Logging:debug(Controller.classname, "isActiveForm()", classname) - local ui = Player.getGlobalUI() - if ui[classname] ~= nil then return ui[classname]["open"] end - return false -end - return Controller diff --git a/core/Command.lua b/core/Command.lua index 7cdaaf09..d1a5f19d 100644 --- a/core/Command.lua +++ b/core/Command.lua @@ -41,7 +41,10 @@ function Command.parse(event) elseif string.lower(event.parameters) == "unittest" then UnitTest.run(event) elseif string.lower(event.parameters) == "resetuserui" then - Player.resetGlobal() + User.reset() + Player.print("User UI are reseted!") + elseif string.lower(event.parameters) == "resetuserallui" then + User.resetAll() Player.print("User UI are reseted!") elseif string.lower(event.parameters) == "resetcaches" then Controller.resetCaches() diff --git a/core/ElementGui.lua b/core/ElementGui.lua index 3a6a171c..a00226cc 100644 --- a/core/ElementGui.lua +++ b/core/ElementGui.lua @@ -868,7 +868,7 @@ end -- function ElementGui.addCellLabel(parent, name, label, minimal_width) Logging:trace(ElementGui.classname, "addCellLabel()", name, label, minimal_width) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") local cell = ElementGui.addCell(parent, "cell_"..name) if display_cell_mod == "small-text"then @@ -901,7 +901,7 @@ end -- function ElementGui.addCellLabel2(parent, name, label1, label2, minimal_width) Logging:trace(ElementGui.classname, "addCellLabel()", name, label1, label2, minimal_width) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") local cell = ElementGui.addCell(parent, "cell_"..name, 1) if display_cell_mod == "small-text"then @@ -938,7 +938,7 @@ end -- function ElementGui.addCellIcon(parent, element, action, select, tooltip_name, color) Logging:trace(ElementGui.classname, "addCellIcon()", element, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") -- ingredient = {type="item", name="steel-plate", amount=8} if display_cell_mod == "small-icon" then if parent ~= nil and select == true then @@ -969,7 +969,7 @@ end -- function ElementGui.addCellElement(parent, element, action, select, tooltip_name, color, index) Logging:trace(ElementGui.classname, "addCellElement()", element, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") -- ingredient = {type="item", name="steel-plate", amount=8} local button = nil color = color or "blue" @@ -1013,7 +1013,7 @@ end -- function ElementGui.addCellElementSm(parent, element, action, select, tooltip_name, color, index) Logging:trace(ElementGui.classname, "addCellElementSm()", element, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") -- ingredient = {type="item", name="steel-plate", amount=8} local button = nil color = color or "blue" @@ -1055,7 +1055,7 @@ end -- function ElementGui.addCellElementM(parent, element, action, select, tooltip_name, color, index) Logging:trace(ElementGui.classname, "addCellElementM()", element, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") -- ingredient = {type="item", name="steel-plate", amount=8} local button = nil color = color or "blue" @@ -1097,7 +1097,7 @@ end -- function ElementGui.addCellProduct(parent, element, action, select, tooltip_name, color, index) Logging:trace(ElementGui.classname, "addCellProduct():", element, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") -- ingredient = {type="item", name="steel-plate", amount=8} local button = nil color = color or "blue" @@ -1127,7 +1127,7 @@ end -- function ElementGui.addCellProductSm(parent, element, action, select, tooltip_name, color, index) Logging:trace(ElementGui.classname, "addCellProductSm():", element, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") -- ingredient = {type="item", name="steel-plate", amount=8} local button = nil color = color or "blue" @@ -1157,7 +1157,7 @@ end -- function ElementGui.addCellFactory(parent, factory, action, select, tooltip_name, color) Logging:trace(ElementGui.classname, "addCellFactory():", factory, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") -- ingredient = {type="item", name="steel-plate", amount=8} local button = nil color = color or "green" @@ -1200,7 +1200,7 @@ end -- function ElementGui.addCellRecipe(parent, recipe, action, select, tooltip_name, color) Logging:trace(ElementGui.classname, "addCellRecipe():", recipe, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") -- ingredient = {type="item", name="steel-plate", amount=8} local button = nil color = color or "green" @@ -1228,7 +1228,7 @@ end -- function ElementGui.addCellBlock(parent, block, action, select, tooltip_name, color) Logging:trace(ElementGui.classname, "addCellRecipe():", block, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") -- ingredient = {type="item", name="steel-plate", amount=8} local button = nil color = color or "green" @@ -1256,7 +1256,7 @@ end -- function ElementGui.addCellEnergy(parent, recipe, action, select, tooltip_name, color) Logging:trace(ElementGui.classname, "addCellEnergy():", recipe, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") + local display_cell_mod = User.getModGlobalSetting("display_cell_mod") -- ingredient = {type="item", name="steel-plate", amount=8} local button = nil color = color or "green" @@ -1281,20 +1281,20 @@ end -- function ElementGui.addCellCargoInfo(parent, element) Logging:trace(ElementGui.classname, "addCellCargoInfo():", element) - local globalGui = Player.getGlobalGui() + local parameters = User.getParameter() Product.load(element) if Product.native() ~= nil then local table_cargo = ElementGui.addGuiTable(parent,"element_cargo", 1, "helmod_beacon_modules") if element.type == 0 or element.type == "item" then - local container_solid = globalGui.container_solid or "steel-chest" - local vehicle_solid = globalGui.vehicle_solid or "cargo-wagon" + local container_solid = parameters.container_solid or "steel-chest" + local vehicle_solid = parameters.vehicle_solid or "cargo-wagon" ElementGui.addGuiButtonSpriteSm(table_cargo, container_solid, "item", container_solid, nil, ElementGui.getTooltipProduct(element, container_solid)) ElementGui.addGuiButtonSpriteSm(table_cargo, vehicle_solid, "item", vehicle_solid, nil, ElementGui.getTooltipProduct(element, vehicle_solid)) end if element.type == 1 or element.type == "fluid" then - local container_fluid = globalGui.container_fluid or "storage-tank" - local vehicle_fluid = globalGui.wagon_fluid or "fluid-wagon" + local container_fluid = parameters.container_fluid or "storage-tank" + local vehicle_fluid = parameters.wagon_fluid or "fluid-wagon" ElementGui.addGuiButtonSpriteSm(table_cargo, container_fluid, "item", container_fluid, nil, ElementGui.getTooltipProduct(element, container_fluid)) ElementGui.addGuiButtonSpriteSm(table_cargo, vehicle_fluid, "item", vehicle_fluid, nil, ElementGui.getTooltipProduct(element, vehicle_fluid)) end @@ -1479,8 +1479,8 @@ end -- function ElementGui.getStyleSizes() Logging:trace(ElementGui.classname, "getStyleSizes()") - local display_ratio_horizontal = Player.getSettings("display_ratio_horizontal") - local display_ratio_vertictal = Player.getSettings("display_ratio_vertical") + local display_ratio_horizontal = User.getModGlobalSetting("display_ratio_horizontal") + local display_ratio_vertictal = User.getModGlobalSetting("display_ratio_vertical") local width , height = ElementGui.getDisplaySizes() local style_sizes = {} @@ -1579,7 +1579,7 @@ function ElementGui.getStyleSizes() style_sizes.scroll_block_list.minimal_width = width_main - width_dialog - width_scroll style_sizes.scroll_block_list.maximal_width = width_main - width_dialog - width_scroll - if Player.getSettings("debug", true) ~= "none" then + if User.getModGlobalSetting("debug") ~= "none" then style_sizes.scroll_block_list.minimal_height = height_main - height_block_header - 200 style_sizes.scroll_block_list.maximal_height = height_main - height_block_header - 200 else @@ -1602,7 +1602,7 @@ end -- function ElementGui.getIndexColumnNumber() - local display_ratio_horizontal = Player.getSettings("display_ratio_horizontal") + local display_ratio_horizontal = User.getModGlobalSetting("display_ratio_horizontal") local width , height = ElementGui.getDisplaySizes() local width_main = math.ceil(width*display_ratio_horizontal) @@ -1620,7 +1620,7 @@ end -- function ElementGui.getElementColumnNumber(size) - local display_ratio_horizontal = Player.getSettings("display_ratio_horizontal") + local display_ratio_horizontal = User.getModGlobalSetting("display_ratio_horizontal") local width , height = ElementGui.getDisplaySizes() local width_main = math.ceil(width*display_ratio_horizontal) Logging:debug(ElementGui.classname, "getElementColumnNumber(width)", width_main, math.ceil((width_main-600)/(2*size))) diff --git a/core/Form.lua b/core/Form.lua index 789c9c9a..90755feb 100644 --- a/core/Form.lua +++ b/core/Form.lua @@ -19,6 +19,7 @@ function Form.methods:init(parent) self.locate = "screen" self.panelClose = true self.help_button = true + self.auto_clear = true self:onInit(parent) end @@ -55,6 +56,17 @@ function Form.methods:isSpecial() return false end +------------------------------------------------------------------------------- +-- Get panel name +-- +-- @function [parent=#Form] getPanelName +-- +-- @return #LuaGuiElement +-- +function Form.methods:getPanelName() + return self:classname() +end + ------------------------------------------------------------------------------- -- Get the parent panel -- @@ -75,21 +87,15 @@ end -- @return #LuaGuiElement -- function Form.methods:getPanel() - local ui = Player.getGlobalUI() local parent_panel = self:getParentPanel() - if parent_panel[self:classname()] ~= nil and parent_panel[self:classname()].valid then - return parent_panel[self:classname()] + if parent_panel[self:getPanelName()] ~= nil and parent_panel[self:getPanelName()].valid then + return parent_panel[self:getPanelName()] end if parent_panel.name == self.locate then - local panel = ElementGui.addGuiFrameV(parent_panel, self:classname(), helmod_frame_style.default, self.panelCaption or self:classname()) + local panel = ElementGui.addGuiFrameV(parent_panel, self:getPanelName(), helmod_frame_style.default, self.panelCaption or self:classname()) panel.style.horizontally_stretchable = true panel.style.vertically_stretchable = true - local location = Controller.getLocationForm(self:classname()) - if location ~= nil then - panel.location = location - else - panel.force_auto_center() - end + panel.location = User.getLocationForm(self:getPanelName()) ElementGui.setStyle(panel, self:classname(), "width") ElementGui.setStyle(panel, self:classname(), "height") --Logging:debug(self:classname(), "children",panel.children_names) @@ -191,7 +197,7 @@ end function Form.methods:open(event, action, item, item2, item3) Logging:debug(self:classname(), "open()", action, item, item2, item3) local parent_panel = self:getParentPanel() - if parent_panel[self:classname()] == nil then + if parent_panel[self:getPanelName()] == nil then self:onOpen(event, action, item, item2, item3) end end @@ -211,7 +217,7 @@ function Form.methods:beforeEvent(event, action, item, item2, item3) Logging:debug(self:classname(), "beforeEvent()", action, item, item2, item3) local parent_panel = self:getParentPanel() local close = self:onBeforeEvent(event, action, item, item2, item3) - if parent_panel ~= nil and parent_panel[self:classname()] ~= nil and parent_panel[self:classname()].valid then + if parent_panel ~= nil and parent_panel[self:getPanelName()] ~= nil and parent_panel[self:getPanelName()].valid then Logging:debug(self:classname() , "must close?",close) if close and action == "OPEN" then self:close(true) @@ -300,9 +306,9 @@ function Form.methods:updateTitle(event, action, item, item2, item3) if self.panelClose then local group1 = ElementGui.addGuiFlowH(right_menu_panel,"group1",helmod_flow_style.horizontal) for _, form in pairs(Controller.getViews()) do - if string.find(form:classname(), "Tab") and form:isVisible() and form:isSpecial() then + if string.find(self:classname(), "Tab") and string.find(form:classname(), "Tab") and form:isVisible() and form:isSpecial() then local style, selected_style = form:getButtonStyles() - if Controller.isActiveForm(form:classname()) then style = selected_style end + if User.isActiveForm(form:classname()) then style = selected_style end ElementGui.addGuiButton(group1, self:classname().."=change-tab=ID=", form:classname(), style, nil, form:getButtonCaption()) end end @@ -330,8 +336,7 @@ end function Form.methods:update(event, action, item, item2, item3) Logging:debug(self:classname(), "update():", action, item, item2, item3) local panel = self:getPanel() - panel.clear() - panel.focus() + if self.auto_clear then panel.clear() end self:updateTitle(event, action, item, item2, item3) self:onUpdate(event, action, item, item2, item3) @@ -361,9 +366,8 @@ end -- function Form.methods:close(force) Logging:debug(self:classname(), "close()") - local ui = Player.getGlobalUI() local panel = self:getPanel() - Controller.setCloseForm(self:classname(), panel.location) + User.setCloseForm(self:classname(), panel.location) self:onClose() panel.destroy() end diff --git a/core/Format.lua b/core/Format.lua index 50029f3f..53405b91 100644 --- a/core/Format.lua +++ b/core/Format.lua @@ -120,7 +120,7 @@ end -- function Format.formatNumberFactory(number) local decimal = 2 - local format_number = Player.getSettings("format_number_factory", true) + local format_number = User.getModGlobalSetting("format_number_factory") if format_number == "0" then decimal = 0 end if format_number == "0.0" then decimal = 1 end if format_number == "0.00" then decimal = 2 end @@ -136,7 +136,7 @@ end -- function Format.formatNumberElement(number) local decimal = 2 - local format_number = Player.getSettings("format_number_element", true) + local format_number = User.getModGlobalSetting("format_number_element") if format_number == "0" then decimal = 0 end if format_number == "0.0" then decimal = 1 end if format_number == "0.00" then decimal = 2 end diff --git a/core/ModelBuilder.lua b/core/ModelBuilder.lua index 941f9a3e..e872eefd 100644 --- a/core/ModelBuilder.lua +++ b/core/ModelBuilder.lua @@ -18,64 +18,63 @@ local ModelBuilder = { function ModelBuilder.addRecipeIntoProductionBlock(key, type) Logging:debug(ModelBuilder.classname, "addRecipeIntoProductionBlock():", key, type) local model = Model.getModel() - local globalGui = Player.getGlobalGui() - local blockId = globalGui.currentBlock + local current_block = User.getParameter("current_block") local lua_recipe = RecipePrototype.load(key, type).native() if lua_recipe ~= nil then -- ajoute le bloc si il n'existe pas - if model.blocks[blockId] == nil then + if model.blocks[current_block] == nil then local modelBlock = Model.newBlock(lua_recipe) local index = Model.countBlocks() modelBlock.index = index modelBlock.unlinked = false model.blocks[modelBlock.id] = modelBlock - blockId = modelBlock.id - globalGui.currentBlock = blockId + current_block = modelBlock.id + User.setParameter("current_block",current_block) -- check si le block est independant ModelCompute.checkUnlinkedBlock(modelBlock) end -- ajoute le recipe si il n'existe pas local ModelRecipe = Model.newRecipe(lua_recipe.name, type) - local index = Model.countBlockRecipes(blockId) + local index = Model.countBlockRecipes(current_block) ModelRecipe.index = index ModelRecipe.count = 1 -- ajoute les produits du block for _, lua_product in pairs(RecipePrototype.getProducts()) do local product = Product.load(lua_product).new() - if model.blocks[blockId].products[lua_product.name] == nil then - if model.blocks[blockId].ingredients[lua_product.name] ~= nil then + if model.blocks[current_block].products[lua_product.name] == nil then + if model.blocks[current_block].ingredients[lua_product.name] ~= nil then product.state = 2 else product.state = 1 end - model.blocks[blockId].products[lua_product.name] = product + model.blocks[current_block].products[lua_product.name] = product end end -- ajoute les ingredients du block for _, lua_ingredient in pairs(RecipePrototype.getIngredients()) do local ingredient = Product.load(lua_ingredient).new() - if model.blocks[blockId].ingredients[lua_ingredient.name] == nil then - model.blocks[blockId].ingredients[lua_ingredient.name] = ingredient - if model.blocks[blockId].products[lua_ingredient.name] ~= nil and model.blocks[blockId].products[lua_ingredient.name].state == 1 then - model.blocks[blockId].products[lua_ingredient.name].state = 2 + if model.blocks[current_block].ingredients[lua_ingredient.name] == nil then + model.blocks[current_block].ingredients[lua_ingredient.name] = ingredient + if model.blocks[current_block].products[lua_ingredient.name] ~= nil and model.blocks[current_block].products[lua_ingredient.name].state == 1 then + model.blocks[current_block].products[lua_ingredient.name].state = 2 end end end - model.blocks[blockId].recipes[ModelRecipe.id] = ModelRecipe + model.blocks[current_block].recipes[ModelRecipe.id] = ModelRecipe local defaultFactory = Model.getDefaultPrototypeFactory(RecipePrototype.getCategory(), lua_recipe) if defaultFactory ~= nil then - Model.setFactory(blockId, ModelRecipe.id, defaultFactory) + Model.setFactory(current_block, ModelRecipe.id, defaultFactory) end local defaultBeacon = Model.getDefaultRecipeBeacon(lua_recipe.name) if defaultBeacon ~= nil then - Model.setBeacon(blockId, ModelRecipe.id, defaultBeacon) + Model.setBeacon(current_block, ModelRecipe.id, defaultBeacon) end - Logging:debug(ModelBuilder.classname, "addRecipeIntoProductionBlock()", model.blocks[blockId]) - return model.blocks[blockId] + Logging:debug(ModelBuilder.classname, "addRecipeIntoProductionBlock()", model.blocks[current_block]) + return model.blocks[current_block] end end @@ -140,7 +139,7 @@ function ModelBuilder.removeModel(model_id) local models = Model.getModels() local model = Model.getLastModel() if model ~= nil then - Player.getGlobalGui()["model_id"] = model.id + User.setParameter("model_id",model.id) else Model.newModel() end @@ -328,7 +327,6 @@ end -- @param #string from_block_id -- function ModelBuilder.pastModel(from_model_id, from_block_id) - local globalGui = Player.getGlobalGui() local model = Model.getModel() local models = Model.getModels() local from_model = models[from_model_id] @@ -351,15 +349,13 @@ end -- @param #table from_model -- function ModelBuilder.copyModel(from_model) - local globalGui = Player.getGlobalGui() - if from_model ~= nil then local from_block_ids = {} for block_id,block in spairs(from_model.blocks,function(t,a,b) return t[b].index > t[a].index end) do table.insert(from_block_ids, block_id) end for _,block_id in ipairs(from_block_ids) do - globalGui.currentBlock = "new" + User.setParameter("current_block","new") local from_block = from_model.blocks[block_id] ModelBuilder.copyBlock(from_model, from_block) end @@ -375,9 +371,8 @@ end -- @param #table from_block_id -- function ModelBuilder.copyBlock(from_model, from_block) - local globalGui = Player.getGlobalGui() local model = Model.getModel() - local to_block_id = globalGui.currentBlock + local to_block_id = User.getParameter("current_block") if from_model ~= nil and from_block ~= nil then local from_recipe_ids = {} @@ -406,7 +401,7 @@ function ModelBuilder.copyBlock(from_model, from_block) model.blocks[to_block.id] = to_block to_block_id = to_block.id - globalGui.currentBlock = to_block_id + User.setParameter("current_block",to_block_id) end diff --git a/core/ModelCompute.lua b/core/ModelCompute.lua index f417c7ca..4d06511b 100644 --- a/core/ModelCompute.lua +++ b/core/ModelCompute.lua @@ -449,7 +449,7 @@ function ModelCompute.computeSimplexBlock(block) local mA, row_headers, col_headers = ModelCompute.getBlockMatrix(block) if mA ~= nil then - if Player.getSettings("debug", true) ~= "none" then + if User.getModGlobalSetting("debug") ~= "none" then block.matrix2 = {} block.matrix2.col_headers = col_headers block.matrix2.row_headers = row_headers @@ -462,7 +462,7 @@ function ModelCompute.computeSimplexBlock(block) mB = Simplex.getMx() Logging:debug(ModelCompute.classname, "----> matrix B", mB) - if Player.getSettings("debug", true) ~= "none" then + if User.getModGlobalSetting("debug") ~= "none" then block.matrix2.mB = mB block.matrix2.mC = mC end @@ -735,7 +735,7 @@ function ModelCompute.getBlockMatrix(block) table.insert(row_headers, {name="Z", type="none"}) Logging:debug(ModelCompute.classname, "----> matrix A", mA) - if Player.getSettings("debug", true) ~= "none" then + if User.getModGlobalSetting("debug") ~= "none" then local row_headers2 = {} for _,row in pairs(row_headers) do table.insert(row_headers2, row.name) @@ -768,7 +768,7 @@ function ModelCompute.computeBlock2(block) local mA, row_headers, col_headers = ModelCompute.getBlockMatrix(block) if mA ~= nil then - if Player.getSettings("debug", true) ~= "none" then + if User.getModGlobalSetting("debug") ~= "none" then block.matrix1 = {} block.matrix1.col_headers = col_headers block.matrix1.row_headers = row_headers @@ -784,7 +784,7 @@ function ModelCompute.computeBlock2(block) Logging:debug(ModelCompute.classname, "----> matrix B", mB) Logging:debug(ModelCompute.classname, "----> matrix C", mC) - if Player.getSettings("debug", true) ~= "none" then + if User.getModGlobalSetting("debug") ~= "none" then block.matrix1.mB = mB block.matrix1.mC = mC end @@ -1441,9 +1441,8 @@ function ModelCompute.updateVersion_0_6_0() local model = Model.getModel() if model.version == nil or model.version < "0.6.0" then Logging:debug(Model.classname , "********** updating version 0.6.0") - local globalGui = Player.getGlobalGui() for _, block in pairs(model.blocks) do - globalGui.currentBlock = block.id + User.setParameter("current_block",block.id) for _, recipe in pairs(block.recipes) do local recipe_type = RecipePrototype.find(recipe).type() if recipe.is_resource then recipe_type = "resource" end diff --git a/core/defines.lua b/core/defines.lua index 54572484..ed7c7c19 100644 --- a/core/defines.lua +++ b/core/defines.lua @@ -53,7 +53,7 @@ helmod_settings_mod = { localised_name = {"helmod_settings.debug"}, localised_description = {"helmod_settings.debug-desc"}, default_value = "none", - allowed_values = {"none","info","error","debug","trace"}, + allowed_values = {"none","error","warn","info","debug","trace"}, order = "a0" }, debug_filter = { diff --git a/core/logging.lua b/core/logging.lua index 86159848..fff54390 100644 --- a/core/logging.lua +++ b/core/logging.lua @@ -2,12 +2,12 @@ Logging = {} local append_log=false -function Logging:new(log) +function Logging:new() self.limit = 5 self.filename="helmod\\helmod.log" self.logClass = {} - self.debug_values = {none=0,info=1,error=2,debug=3,trace=4} + self.debug_values = {none=0,error=1,warn=2,info=3,debug=4,trace=5} end function Logging:checkClass(logClass) @@ -18,22 +18,27 @@ end function Logging:trace(...) local arg = {...} - self:logging("[TRACE]", 4, unpack(arg)) + self:logging("[TRACE]", self.debug_values.trace, unpack(arg)) end function Logging:debug(...) local arg = {...} - self:logging("[DEBUG]", 3, unpack(arg)) + self:logging("[DEBUG]", self.debug_values.debug, unpack(arg)) end function Logging:info(...) - local arg = {...} - self:logging("[INFO]", 2, unpack(arg)) + local arg = {...} + self:logging("[INFO]", self.debug_values.info, unpack(arg)) +end + +function Logging:warn(...) + local arg = {...} + self:logging("[WARN]", self.debug_values.warn, unpack(arg)) end function Logging:error(...) local arg = {...} - self:logging("[ERROR]", 1, unpack(arg)) + self:logging("[ERROR]", self.debug_values.error, unpack(arg)) end function Logging:objectToString(object, level) @@ -66,7 +71,7 @@ function Logging:objectToString(object, level) message = message.."\"".."__table".."\"" end end - return message + return string.gsub(message,"\n","") end function Logging:logging(tag, level, logClass, ...) @@ -79,7 +84,7 @@ function Logging:logging(tag, level, logClass, ...) message = message..self:objectToString(object) end --game.write_file(self.filename, tag.."|"..logClass.."|"..message.."\n", append_log) - log(tag.."|"..logClass.."|"..string.gsub(message,"\n","")) + log(tag.."|"..logClass.."|"..message) if append_log == false then append_log = true end end end diff --git a/dialog/MainMenuPanel.lua b/dialog/MainMenuPanel.lua deleted file mode 100644 index d22f5030..00000000 --- a/dialog/MainMenuPanel.lua +++ /dev/null @@ -1,230 +0,0 @@ -------------------------------------------------------------------------------- --- Class to build main menu form --- --- @module MainMenuPanel --- @extends #Form --- - -MainMenuPanel = setclass("HMMainMenuPanel", Form) - -------------------------------------------------------------------------------- --- Get the parent panel --- --- @function [parent=#MainMenuPanel] getParentPanel --- --- @return #LuaGuiElement --- -function MainMenuPanel.methods:getParentPanel() - return Controller.getMenuPanel() -end - -------------------------------------------------------------------------------- --- Get or create model panel --- --- @function [parent=#MainMenuPanel] getMenuPanel --- -function MainMenuPanel.methods:getMenuPanel() - local parent_panel = self:getPanel() - if parent_panel["menu_panel"] ~= nil then - return parent_panel["menu_panel"] - end - local panel = ElementGui.addGuiFrameV(parent_panel, "menu_panel", helmod_frame_style.panel) - ElementGui.setStyle(panel, "data", "width") - return panel -end - -------------------------------------------------------------------------------- --- Get or create menu panel --- --- @function [parent=#MainMenuPanel] getTabPanel --- -function MainMenuPanel.methods:getTabPanel() - local parent_panel = self:getMenuPanel() - if parent_panel["tab_panel"] ~= nil and parent_panel["tab_panel"].valid then - return parent_panel["tab_panel"] - end - local panel = ElementGui.addGuiTable(parent_panel, "tab_panel", 20, helmod_table_style.tab) - return panel -end - -------------------------------------------------------------------------------- --- Get or create action panel --- --- @function [parent=#MainMenuPanel] getActionPanel --- -function MainMenuPanel.methods:getActionPanel() - local parent_panel = self:getMenuPanel() - if parent_panel["action_panel"] ~= nil and parent_panel["action_panel"].valid then - return parent_panel["action_panel"] - end - local panel = ElementGui.addGuiTable(parent_panel, "action_panel", 10, helmod_table_style.list) - return panel -end - -------------------------------------------------------------------------------- --- Get or create index panel --- --- @function [parent=#MainMenuPanel] getIndexPanel --- -function MainMenuPanel.methods:getIndexPanel() - local parent_panel = self:getMenuPanel() - if parent_panel["index_panel"] ~= nil and parent_panel["index_panel"].valid then - return parent_panel["index_panel"] - end - local panel = ElementGui.addGuiTable(parent_panel, "index_panel", ElementGui.getIndexColumnNumber(), helmod_table_style.list) - return panel -end - -------------------------------------------------------------------------------- --- On update --- --- @function [parent=#MainMenuPanel] onUpdate --- --- @param #LuaEvent event --- @param #string action action name --- @param #string item first item name --- @param #string item2 second item name --- @param #string item3 third item name --- -function MainMenuPanel.methods:onUpdate(event, action, item, item2, item3) - self:updateMenuPanel(item, item2, item3) - self:updateIndexPanel(item, item2, item3) -end - -------------------------------------------------------------------------------- --- Update menu panel --- --- @function [parent=#MainMenuPanel] updateMenuPanel --- --- @param #string item first item name --- @param #string item2 second item name --- @param #string item3 third item name --- -function MainMenuPanel.methods:updateMenuPanel(item, item2, item3) - Logging:debug(self:classname(), "updateMenuPanel():", item, item2, item3) - local models = Model.getModels() - local model = Model.getModel() - local model_id = Player.getGlobalGui("model_id") - local globalGui = Player.getGlobalGui() - local current_tab = Player.getGlobalUI("data") - - -- tab menu panel - local menu_panel = self:getTabPanel() - menu_panel.clear() - - for _, form in pairs(Controller.getViews()) do - if string.find(form:classname(), "Tab") and form:isVisible() then - local style = "helmod_button_tab" - if form:classname() == current_tab then style = "helmod_button_tab_selected" end - ElementGui.addGuiFrameH(menu_panel,form:classname().."_separator",helmod_frame_style.tab).style.width = 5 - ElementGui.addGuiButton(menu_panel, self:classname().."=change-tab=ID=", form:classname(), style, form:getButtonCaption()) - end - end - -- action panel - local action_panel = self:getActionPanel() - action_panel.clear() - - if current_tab == "HMAdminTab" then - ElementGui.addGuiButton(action_panel, "HMRuleEdition=", "OPEN", "helmod_button_default", ({"helmod_result-panel.add-button-rule"})) - ElementGui.addGuiButton(action_panel, self:classname().."=reset-rules=", nil, "helmod_button_default", ({"helmod_result-panel.reset-button-rule"})) - elseif current_tab == "HMPropertiesTab" then - ElementGui.addGuiButton(action_panel, "HMEntitySelector=", "OPEN", "helmod_button_default", ({"helmod_result-panel.select-button-entity"})) - ElementGui.addGuiButton(action_panel, "HMItemSelector=", "OPEN", "helmod_button_default", ({"helmod_result-panel.select-button-item"})) - ElementGui.addGuiButton(action_panel, "HMFluidSelector=", "OPEN", "helmod_button_default", ({"helmod_result-panel.select-button-fluid"})) - ElementGui.addGuiButton(action_panel, "HMRecipeSelector=", "OPEN", "helmod_button_default", ({"helmod_result-panel.select-button-recipe"})) - ElementGui.addGuiButton(action_panel, "HMTechnologySelector=", "OPEN", "helmod_button_default", ({"helmod_result-panel.select-button-technology"})) - elseif current_tab == "HMPrototypeFiltersTab" then - else - -- add recipe - local block_id = globalGui.currentBlock or "new" - ElementGui.addGuiButton(action_panel, "HMRecipeSelector=OPEN=ID=", block_id, "helmod_button_default", ({"helmod_result-panel.add-button-recipe"})) - ElementGui.addGuiButton(action_panel, "HMTechnologySelector=OPEN=ID=", block_id, "helmod_button_default", ({"helmod_result-panel.add-button-technology"})) - ElementGui.addGuiButton(action_panel, "HMContainerSelector=OPEN=ID=", block_id, "helmod_button_default", ({"helmod_result-panel.select-button-container"})) - -- copy past - ElementGui.addGuiButton(action_panel, self:classname().."=copy-model=ID=", model.id, "helmod_button_icon_copy", nil, ({"helmod_button.copy"})) - ElementGui.addGuiButton(action_panel, self:classname().."=past-model=ID=", model.id, "helmod_button_icon_past", nil, ({"helmod_button.past"})) - -- download - if current_tab == "HMProductionLineTab" then - ElementGui.addGuiButton(action_panel, "HMDownload=OPEN=ID=", "download", "helmod_button_icon_download", nil, ({"helmod_result-panel.download-button-production-line"})) - ElementGui.addGuiButton(action_panel, "HMDownload=OPEN=ID=", "upload", "helmod_button_icon_upload", nil, ({"helmod_result-panel.upload-button-production-line"})) - end - -- delete control - if Player.isAdmin() or model.owner == Player.native().name or (model.share ~= nil and bit32.band(model.share, 4) > 0) then - if current_tab == "HMProductionLineTab" then - ElementGui.addGuiButton(action_panel, self:classname().."=remove-model=ID=", model.id, "helmod_button_icon_delete_red", nil, ({"helmod_result-panel.remove-button-production-line"})) - end - if current_tab == "HMProductionBlockTab" then - ElementGui.addGuiButton(action_panel, self:classname().."=production-block-remove=ID=", block_id, "helmod_button_icon_delete_red", nil, ({"helmod_result-panel.remove-button-production-block"})) - end - end - -- refresh control - ElementGui.addGuiButton(action_panel, self:classname().."=refresh-model=ID=", model.id, "helmod_button_icon_refresh", nil, ({"helmod_result-panel.refresh-button"})) - -- pin control - if current_tab == "HMProductionBlockTab" then - ElementGui.addGuiButton(action_panel, "HMPinPanel=OPEN=ID=", block_id, "helmod_button_icon_pin", nil, ({"helmod_result-panel.tab-button-pin"})) - local block = model.blocks[block_id] - if block ~= nil then - local style = "helmod_button_icon_settings" - if block.solver == true then style = "helmod_button_icon_settings_selected" end - ElementGui.addGuiButton(action_panel, self:classname().."=production-block-solver=ID=", block_id, style, nil, ({"helmod_button.matrix-solver"})) - end - end - -- pin info - if current_tab == "HMStatisticTab" then - ElementGui.addGuiButton(action_panel, "HMStatusPanel=OPEN=ID=", block_id, "helmod_button_icon_pin", nil, ({"helmod_result-panel.tab-button-pin"})) - end - end -end - -------------------------------------------------------------------------------- --- Update index panel --- --- @function [parent=#MainMenuPanel] updateIndexPanel --- --- @param #string item first item name --- @param #string item2 second item name --- @param #string item3 third item name --- -function MainMenuPanel.methods:updateIndexPanel(item, item2, item3) - Logging:debug(self:classname(), "updateIndexPanel():", item, item2, item3) - local models = Model.getModels() - local model = Model.getModel() - local model_id = Player.getGlobalGui("model_id") - local current_tab = Player.getGlobalUI("data") - local view = Controller.getView(current_tab) - - if view:hasIndexModel() then - -- index panel - local index_panel = self:getIndexPanel() - index_panel.clear() - Logging:debug(self:classname(), "updateIndexPanel():countModel", Model.countModel()) - if Model.countModel() > 0 then - local i = 0 - for _,imodel in pairs(models) do - i = i + 1 - local style = "helmod_button_default" - --if imodel.id == model_id then style = "helmod_button_selected" end - --ElementGui.addGuiButton(indexPanel, self:classname().."=change-model=ID=", imodel.id, style, i) - local element = Model.firstRecipe(imodel.blocks) - if imodel.id == model_id then - if element ~= nil then - ElementGui.addGuiButtonSprite(index_panel, self:classname().."=change-model=ID="..imodel.id.."=", Player.getIconType(element), element.name, imodel.id, RecipePrototype.load(element).getLocalisedName()) - else - ElementGui.addGuiButton(index_panel, self:classname().."=change-model=ID=", imodel.id, "helmod_button_icon_help_selected") - end - else - if element ~= nil then - ElementGui.addGuiButtonSelectSprite(index_panel, self:classname().."=change-model=ID="..imodel.id.."=", Player.getIconType(element), element.name, imodel.id, RecipePrototype.load(element).getLocalisedName()) - else - ElementGui.addGuiButton(index_panel, self:classname().."=change-model=ID=", imodel.id, "helmod_button_icon_help") - end - end - - end - end - ElementGui.addGuiShortButton(index_panel, self:classname().."=change-model=ID=", "new", "helmod_button_default", "+") - else - local index_panel = self:getIndexPanel() - index_panel.clear() - end -end diff --git a/dialog/PinPanel.lua b/dialog/PinPanel.lua index 0bb5c693..0038977e 100644 --- a/dialog/PinPanel.lua +++ b/dialog/PinPanel.lua @@ -28,24 +28,7 @@ local display_level = { function PinPanel.methods:onInit(parent) self.panelCaption = ({"helmod_pin-tab-panel.title"}) self.otherClose = false - self.locate = "pin" -end - - -------------------------------------------------------------------------------- --- Get the parent panel --- --- @function [parent=#PinPanel] getParentPanel --- --- @return #LuaGuiElement --- -function PinPanel.methods:getParentPanel() - local lua_player = Player.native() - local guiMain = lua_player.gui["left"] - if guiMain["helmod_planner_pin_tab"] ~= nil and guiMain["helmod_planner_pin_tab"].valid then - return guiMain["helmod_planner_pin_tab"] - end - return ElementGui.addGuiFrameV(guiMain, "helmod_planner_pin_tab", helmod_frame_style.hidden) + self.parameterLast = string.format("%s_%s",self:classname(),"last") end ------------------------------------------------------------------------------- @@ -62,13 +45,13 @@ end -- @return #boolean if true the next call close dialog -- function PinPanel.methods:onBeforeEvent( event, action, item, item2, item3) - local globalGui = Player.getGlobalGui() local close = (action == "OPEN") -- only on open event if action == "OPEN" then - if globalGui.pinBlock == nil or globalGui.pinBlock ~= item then + if User.getParameter(self.parameterLast) == nil or User.getParameter(self.parameterLast) then close = false end - globalGui.pinBlock = item + User.setParameter(self.parameterLast,item) + User.setParameter("pin_block_id",item) end return close end @@ -87,21 +70,6 @@ function PinPanel.methods:getInfoPanel() return ElementGui.addGuiScrollPane(mainPanel, "scroll-panel", helmod_scroll_style.pin_tab) end -------------------------------------------------------------------------------- --- Get or create header panel --- --- @function [parent=#PinPanel] getHeaderPanel --- -function PinPanel.methods:getHeaderPanel() - local panel = self:getPanel() - if panel["header"] ~= nil and panel["header"].valid then - return panel["header"] - end - local header_panel = ElementGui.addGuiFrameH(panel, "header", helmod_frame_style.panel) - header_panel.style.horizontally_stretchable = true - return header_panel -end - ------------------------------------------------------------------------------- -- On update -- @@ -131,14 +99,14 @@ end -- function PinPanel.methods:updateHeader(event, action, item, item2, item3) Logging:debug(self:classname(), "updateHeader():", action, item, item2, item3) - local header_panel = self:getHeaderPanel() + local left_menu_panel = self:getLeftMenuPanel() local model = Model.getModel() - header_panel.clear() - ElementGui.addGuiButton(header_panel, self:classname().."=CLOSE", nil, "helmod_button_icon_close_red", nil, ({"helmod_button.close"})) - ElementGui.addGuiButton(header_panel, self:classname().."=change-level=ID=down", nil, "helmod_button_icon_arrow_left", nil, ({"helmod_button.decrease"})) - ElementGui.addGuiButton(header_panel, self:classname().."=change-level=ID=up", nil, "helmod_button_icon_arrow_right", nil, ({"helmod_button.expand"})) - ElementGui.addGuiButton(header_panel, self:classname().."=change-level=ID=min", nil, "helmod_button_icon_minimize", nil, ({"helmod_button.minimize"})) - ElementGui.addGuiButton(header_panel, self:classname().."=change-level=ID=max", nil, "helmod_button_icon_maximize", nil, ({"helmod_button.maximize"})) + left_menu_panel.clear() + local group1 = ElementGui.addGuiFlowH(left_menu_panel,"group1",helmod_flow_style.horizontal) + ElementGui.addGuiButton(group1, self:classname().."=change-level=ID=down", nil, "helmod_button_icon_arrow_left", nil, ({"helmod_button.decrease"})) + ElementGui.addGuiButton(group1, self:classname().."=change-level=ID=up", nil, "helmod_button_icon_arrow_right", nil, ({"helmod_button.expand"})) + ElementGui.addGuiButton(group1, self:classname().."=change-level=ID=min", nil, "helmod_button_icon_minimize", nil, ({"helmod_button.minimize"})) + ElementGui.addGuiButton(group1, self:classname().."=change-level=ID=max", nil, "helmod_button_icon_maximize", nil, ({"helmod_button.maximize"})) end @@ -157,20 +125,21 @@ function PinPanel.methods:updateInfo(event, action, item, item2, item3) Logging:debug(self:classname(), "updateInfo():", action, item, item2, item3) local infoPanel = self:getInfoPanel() local model = Model.getModel() - local globalGui = Player.getGlobalGui() + local pin_block_id = User.getParameter("pin_block_id") + local order = User.getParameter("order") infoPanel.clear() - local column = Player.getGlobalSettings("display_pin_level") + 1 + local column = User.getSetting("display_pin_level") + 1 - Logging:debug(self:classname(), "updateInfo", globalGui.pinBlock, model.blocks[globalGui.pinBlock]) - if globalGui.pinBlock ~= nil and model.blocks[globalGui.pinBlock] ~= nil then - local block = model.blocks[globalGui.pinBlock] + Logging:debug(self:classname(), "updateInfo", pin_block_id, model.blocks[pin_block_id]) + if pin_block_id ~= nil and model.blocks[pin_block_id] ~= nil then + local block = model.blocks[pin_block_id] local resultTable = ElementGui.addGuiTable(infoPanel,"list-data",column, "helmod_table-odd") self:addProductionBlockHeader(resultTable) - for _, recipe in spairs(block.recipes, function(t,a,b) if globalGui.order.ascendant then return t[b][globalGui.order.name] > t[a][globalGui.order.name] else return t[b][globalGui.order.name] < t[a][globalGui.order.name] end end) do + for _, recipe in spairs(block.recipes, function(t,a,b) return t[b]["index"] > t[a]["index"] end) do self:addProductionBlockRow(resultTable, block, recipe) end @@ -186,7 +155,7 @@ end -- function PinPanel.methods:addProductionBlockHeader(itable) Logging:debug(self:classname(), "addProductionBlockHeader():", itable) - local display_pin_level = Player.getGlobalSettings("display_pin_level") + local display_pin_level = User.getSetting("display_pin_level") local model = Model.getModel() if display_pin_level > display_level.base then @@ -226,7 +195,7 @@ end -- function PinPanel.methods:addProductionBlockRow(gui_table, block, recipe) Logging:debug(self:classname(), "addProductionBlockRow():", gui_table, block, recipe) - local display_pin_level = Player.getGlobalSettings("display_pin_level") + local display_pin_level = User.getSetting("display_pin_level") local model = Model.getModel() local lua_recipe = RecipePrototype.load(recipe).native() if display_pin_level > display_level.base then @@ -300,16 +269,15 @@ end function PinPanel.methods:onEvent(event, action, item, item2, item3) Logging:debug(self:classname(), "onEvent():", action, item, item2, item3) local model = Model.getModel() - local global_settings = Player.getGlobalSettings() - local global_gui = Player.getGlobalGui() + local pin_block_id = User.getParameter("pin_block_id") if action == "change-level" then - local display_pin_level = Player.getGlobalSettings("display_pin_level") + local display_pin_level = User.getSetting("display_pin_level") Logging:debug(self:classname(), "display_pin_level", display_pin_level) - if item == "down" and display_pin_level > display_pin_level_min then global_settings["display_pin_level"] = display_pin_level - 1 end - if item == "up" and display_pin_level < display_pin_level_max then global_settings["display_pin_level"] = display_pin_level + 1 end - if item == "min" then global_settings["display_pin_level"] = display_pin_level_min end - if item == "max" then global_settings["display_pin_level"] = display_pin_level_max end - self:updateInfo(event, action, global_gui.pinBlock, item2, item3) + if item == "down" and display_pin_level > display_pin_level_min then User.setSetting("display_pin_level",display_pin_level - 1) end + if item == "up" and display_pin_level < display_pin_level_max then User.setSetting("display_pin_level",display_pin_level + 1) end + if item == "min" then User.setParameter("display_pin_level",display_pin_level_min) end + if item == "max" then User.setParameter("display_pin_level",display_pin_level_max) end + self:updateInfo(event, action, pin_block_id, item2, item3) end end diff --git a/dialog/StatusPanel.lua b/dialog/StatusPanel.lua index d304f004..ee6ed3e5 100644 --- a/dialog/StatusPanel.lua +++ b/dialog/StatusPanel.lua @@ -16,17 +16,7 @@ StatusPanel = setclass("HMStatusPanel", Form) -- function StatusPanel.methods:onInit(parent) self.panelCaption = ({"helmod_status-tab-panel.title"}) -end - -------------------------------------------------------------------------------- --- Get the parent panel --- --- @function [parent=#StatusPanel] getParentPanel --- --- @return #LuaGuiElement --- -function StatusPanel.methods:getParentPanel() - return Controller.getPinTabPanel() + self.parameterLast = string.format("%s_%s",self:classname(),"last") end ------------------------------------------------------------------------------- @@ -43,12 +33,11 @@ end -- @return #boolean if true the next call close dialog -- function StatusPanel.methods:onBeforeEvent( event, action, item, item2, item3) - local globalGui = Player.getGlobalGui() local close = true - if globalGui.pinBlock == nil or globalGui.pinBlock ~= item then + if User.getParameter(self.parameterLast) == nil or User.getParameter(self.parameterLast) then close = false end - globalGui.pinBlock = item + User.setParameter(self.parameterLast,item) return close end @@ -58,8 +47,7 @@ end -- @function [parent=#StatusPanel] onClose -- function StatusPanel.methods:onClose() - local globalGui = Player.getGlobalGui() - globalGui.pinBlock = nil + User.setParameter(self.parameterLast,nil) end ------------------------------------------------------------------------------- @@ -68,7 +56,7 @@ end -- @function [parent=#StatusPanel] getInfoPanel -- function StatusPanel.methods:getInfoPanel() - local panel = self:getPanel(player) + local panel = self:getPanel() if panel["info-panel"] ~= nil and panel["info-panel"].valid then return panel["info-panel"]["scroll-panel"] end @@ -154,17 +142,14 @@ end -- function StatusPanel.methods:updateInfo(event, action, item, item2, item3) Logging:debug(self:classname(), "updateInfo():", action, item, item2, item3) - local infoPanel = self:getInfoPanel() + local info_panel = self:getInfoPanel() local model = Model.getModel() - local globalGui = Player.getGlobalGui() - for k,guiName in pairs(infoPanel.children_names) do - infoPanel[guiName].destroy() - end + info_panel.clear() local column = 2 - local resultTable = ElementGui.addGuiTable(infoPanel,"list-data",column, "helmod_table-odd") + local resultTable = ElementGui.addGuiTable(info_panel,"list-data",column, "helmod_table-odd") --self:addProductionBlockHeader(resultTable) local elements = {} @@ -225,16 +210,5 @@ end function StatusPanel.methods:onEvent(event, action, item, item2, item3) Logging:debug(self:classname(), "onEvent():", action, item, item2, item3) local model = Model.getModel() - local global_settings = Player.getGlobalSettings() - local global_gui = Player.getGlobalGui() - - if action == "change-level" then - local display_pin_level = Player.getGlobalSettings("display_pin_level") - Logging:debug(self:classname(), "display_pin_level", display_pin_level) - if item == "down" and display_pin_level > display_pin_level_min then global_settings["display_pin_level"] = display_pin_level - 1 end - if item == "up" and display_pin_level < display_pin_level_max then global_settings["display_pin_level"] = display_pin_level + 1 end - if item == "min" then global_settings["display_pin_level"] = display_pin_level_min end - if item == "max" then global_settings["display_pin_level"] = display_pin_level_max end - self:updateInfo(event, action, global_gui.pinBlock, item2, item3) - end + end diff --git a/edition/AbstractEdition.lua b/edition/AbstractEdition.lua index 7d99c3ac..86bcbdcc 100644 --- a/edition/AbstractEdition.lua +++ b/edition/AbstractEdition.lua @@ -23,18 +23,18 @@ local limit_display_height = 850 -- @return #boolean if true the next call close dialog -- function AbstractEdition.methods:onBeforeEvent(event, action, item, item2, item3) - local player_gui = Player.getGlobalGui() local close = (action == "OPEN") -- only on open event - player_gui.moduleListRefresh = false + User.setParameter("module_list_refresh",false) if item ~= nil and item2 ~= nil then - if player_gui.guiElementLast == nil or player_gui.guiElementLast ~= item..item2 then + local parameter_last = string.format("%s%s",item,item2) + if User.getParameter(self.parameterLast) or User.getParameter(self.parameterLast) ~= parameter_last then close = false - player_gui.factoryGroupSelected = nil - player_gui.beaconGroupSelected = nil - player_gui.moduleListRefresh = true + User.setParameter("factory_group_selected",nil) + User.setParameter("beacon_group_selected",nil) + User.setParameter("module_list_refresh",true) end - player_gui.guiElementLast = item..item2 + User.setParameter(self.parameterLast,item) end return close end @@ -45,9 +45,8 @@ end -- @function [parent=#AbstractEdition] onClose -- function AbstractEdition.methods:onClose() - local player_gui = Player.getGlobalGui() - player_gui.guiElementLast = nil - player_gui.moduleListRefresh = false + User.setParameter(self.parameterLast,nil) + User.setParameter("module_list_refresh",false) end ------------------------------------------------------------------------------- @@ -269,12 +268,11 @@ function AbstractEdition.methods:onOpen(event, action, item, item2, item3) Logging:debug(self:classname(), "onOpen()", action, item, item2, item3) local object = self:getObject(event, action, item, item2, item3) - local player_gui = Player.getGlobalGui() - if player_gui.module_panel == nil then - player_gui.module_panel = true + if User.getParameter("module_panel") == nil then + User.setParameter("module_panel", true) end - if player_gui.factory_tab == nil then - player_gui.factory_tab = true + if User.getParameter("factory_tab") == nil then + User.setParameter("factory_tab", true) end self:updateTitle(event, action, item, item2, item3) @@ -332,7 +330,6 @@ end -- function AbstractEdition.methods:onUpdate(event, action, item, item2, item3) Logging:debug(self:classname(), "onUpdate():", action, item, item2, item3) - local global_gui = Player.getGlobalGui() local display_width, display_height = ElementGui.getDisplaySizes() local object = self:getObject(item, item2, item3) -- header @@ -342,11 +339,11 @@ function AbstractEdition.methods:onUpdate(event, action, item, item2, item3) self:getRightPanel().clear() -- tab menu self:updateTabMenu(item, item2, item3) - if display_height >= limit_display_height or global_gui.factory_tab then + if display_height >= limit_display_height or User.getParameter("factory_tab") then -- factory self:updateFactory(item, item2, item3) end - if display_height >= limit_display_height or not(global_gui.factory_tab) then + if display_height >= limit_display_height or not(User.getParameter("factory_tab")) then -- beacon self:updateBeacon(item, item2, item3) end @@ -378,7 +375,6 @@ end -- function AbstractEdition.methods:updateTabMenu(item, item2, item3) Logging:debug(self:classname(), "updateTabMenu():", item, item2, item3) - local global_gui = Player.getGlobalGui() local tab_left_panel = self:getTabLeftPanel() local tab_right_panel = self:getTabRightPanel() local object = self:getObject(item, item2, item3) @@ -391,13 +387,13 @@ function AbstractEdition.methods:updateTabMenu(item, item2, item3) -- left tab if display_height < limit_display_height then local style = "helmod_button_tab" - if global_gui.factory_tab == true then style = "helmod_button_tab_selected" end + if User.getParameter("factory_tab") == true then style = "helmod_button_tab_selected" end ElementGui.addGuiFrameH(tab_left_panel, self:classname().."_separator_factory",helmod_frame_style.tab).style.width = 5 ElementGui.addGuiButton(tab_left_panel, self:classname().."=edition-change-tab=ID="..item.."="..object.id.."=", "factory", style, {"helmod_common.factory"}, {"helmod_common.factory"}) local style = "helmod_button_tab" - if global_gui.factory_tab == false then style = "helmod_button_tab_selected" end + if User.getParameter("factory_tab") == false then style = "helmod_button_tab_selected" end ElementGui.addGuiFrameH(tab_left_panel, self:classname().."_separator_beacon",helmod_frame_style.tab).style.width = 5 ElementGui.addGuiButton(tab_left_panel, self:classname().."=edition-change-tab=ID="..item.."="..object.id.."=", "beacon", style, {"helmod_common.beacon"}, {"helmod_common.beacon"}) @@ -406,13 +402,13 @@ function AbstractEdition.methods:updateTabMenu(item, item2, item3) end -- right tab local style = "helmod_button_tab" - if global_gui.module_panel == false then style = "helmod_button_tab_selected" end + if User.getParameter("module_panel") == false then style = "helmod_button_tab_selected" end ElementGui.addGuiFrameH(tab_right_panel, self:classname().."_separator_factory",helmod_frame_style.tab).style.width = 5 ElementGui.addGuiButton(tab_right_panel, self:classname().."=change-panel=ID="..item.."="..object.id.."=", "factory", style, {"helmod_common.factory"}, {"tooltip.selector-factory"}) local style = "helmod_button_tab" - if global_gui.module_panel == true then style = "helmod_button_tab_selected" end + if User.getParameter("module_panel") == true then style = "helmod_button_tab_selected" end ElementGui.addGuiFrameH(tab_right_panel, self:classname().."_separator_module",helmod_frame_style.tab).style.width = 5 ElementGui.addGuiButton(tab_right_panel, self:classname().."=change-panel=ID="..item.."="..object.id.."=", "module", style, {"helmod_common.module"}, {"tooltip.selector-module"}) @@ -431,10 +427,9 @@ end -- function AbstractEdition.methods:updateFactory(item, item2, item3) Logging:debug(self:classname(), "updateFactory():", item, item2, item3) - local global_gui = Player.getGlobalGui() self:updateFactoryInfo(item, item2, item3) - if global_gui.module_panel == true then + if User.getParameter("module_panel") == true then self:updateFactoryActivedModules(item, item2, item3) self:updateFactoryModulesSelector(item, item2, item3) else @@ -453,10 +448,9 @@ end -- function AbstractEdition.methods:updateBeacon(item, item2, item3) Logging:debug(self:classname(), "updateBeacon():", item, item2, item3) - local global_gui = Player.getGlobalGui() self:updateBeaconInfo(item, item2, item3) - if global_gui.module_panel == true then + if User.getParameter("module_panel") == true then self:updateBeaconActivedModules(item, item2, item3) self:updateBeaconModulesSelector(item, item2, item3) else @@ -492,7 +486,6 @@ function AbstractEdition.methods:updateFactoryInfo(item, item2, item3) Logging:debug(self:classname(), "updateFactoryInfo():", item, item2, item3) local infoPanel = self:getFactoryInfoPanel() local object = self:getObject(item, item2, item3) - local global_gui = Player.getGlobalGui() if object ~= nil then Logging:debug(self:classname(), "updateFactoryInfo():object:",object) local factory = object.factory @@ -504,7 +497,7 @@ function AbstractEdition.methods:updateFactoryInfo(item, item2, item3) local headerPanel = ElementGui.addGuiTable(infoPanel,"table-header",2) local tooltip = ({"tooltip.selector-module"}) - if global_gui.module_panel == true then tooltip = ({"tooltip.selector-factory"}) end + if User.getParameter("module_panel") == true then tooltip = ({"tooltip.selector-factory"}) end ElementGui.addGuiButtonSelectSprite(headerPanel, self:classname().."=change-panel=ID="..item.."="..object.id.."=", Player.getIconType(factory), factory.name, factory.name, tooltip, ElementGui.color_button_edit) if EntityPrototype.native() == nil then ElementGui.addGuiLabel(headerPanel, "label", factory.name) @@ -563,7 +556,6 @@ end function AbstractEdition.methods:updateFactoryModulesSelector(item, item2, item3) Logging:debug(self:classname(), "updateFactoryModulesSelector():", item, item2, item3) local selectorPanel = self:getFactoryModulesSelectorPanel() - local player_gui = Player.getGlobalGui() local object = self:getObject(item, item2, item3) selectorPanel.clear() @@ -628,7 +620,6 @@ end function AbstractEdition.methods:updateFactorySelector(item, item2, item3) Logging:debug(self:classname(), "updateFactorySelector():", item, item2, item3) local selectorPanel = self:getFactorySelectorPanel() - local global_gui = Player.getGlobalGui() selectorPanel.clear() @@ -642,7 +633,7 @@ function AbstractEdition.methods:updateFactorySelector(item, item2, item3) local prototype = RecipePrototype.load(object) local category = prototype.getCategory() - if not(Player.getSettings("model_filter_factory", true)) then category = nil end + if not(User.getModGlobalSetting("model_filter_factory")) then category = nil end local factories = Player.getProductionsCrafting(category, object) Logging:debug(self:classname(), "factories:",factories) @@ -663,7 +654,7 @@ function AbstractEdition.methods:updateFactorySelector(item, item2, item3) for group, count in pairs(subgroups) do -- set le groupe - if global_gui.factoryGroupSelected == nil then global_gui.factoryGroupSelected = group end + if User.getParameter("factory_group_selected") == nil then User.setParameter("factory_group_selected",group) end -- ajoute les icons de groupe local action = ElementGui.addGuiButton(groupsPanel, self:classname().."=factory-group=ID="..item.."="..object.id.."=", group, "helmod_button_default", group) end @@ -671,7 +662,7 @@ function AbstractEdition.methods:updateFactorySelector(item, item2, item3) local tablePanel = ElementGui.addGuiTable(scrollPanel, "factory-table", 5) for key, factory in pairs(factories) do - if category ~= nil or (factory.subgroup ~= nil and factory.subgroup.name == global_gui.factoryGroupSelected) then + if category ~= nil or (factory.subgroup ~= nil and factory.subgroup.name == User.getParameter("factory_group_selected")) then local localised_name = EntityPrototype.load(factory.name).getLocalisedName() ElementGui.addGuiButtonSelectSprite(tablePanel, self:classname().."=factory-select=ID="..item.."="..object.id.."=", "entity", factory.name, factory.name, localised_name) end @@ -691,7 +682,6 @@ function AbstractEdition.methods:updateBeaconInfo(item, item2, item3) Logging:debug(self:classname(), "updateBeaconInfo():", item, item2, item3) local infoPanel = self:getBeaconInfoPanel() local object = self:getObject(item, item2, item3) - local global_gui = Player.getGlobalGui() if object ~= nil then local beacon = object.beacon @@ -703,7 +693,7 @@ function AbstractEdition.methods:updateBeaconInfo(item, item2, item3) local headerPanel = ElementGui.addGuiTable(infoPanel,"table-header",2) local tooltip = ({"tooltip.selector-module"}) - if global_gui.module_panel == true then tooltip = ({"tooltip.selector-factory"}) end + if User.getParameter("module_panel") == true then tooltip = ({"tooltip.selector-factory"}) end ElementGui.addGuiButtonSelectSprite(headerPanel, self:classname().."=change-panel=ID="..item.."="..object.id.."=", Player.getIconType(beacon), beacon.name, beacon.name, tooltip, ElementGui.color_button_edit) if beacon_prototype.native() == nil then ElementGui.addGuiLabel(headerPanel, "label", beacon.name) @@ -773,9 +763,8 @@ end function AbstractEdition.methods:updateBeaconModulesSelector(item, item2, item3) Logging:debug(self:classname(), "updateBeaconModulesSelector():", item, item2, item3) local selectorPanel = self:getBeaconModulesSelectorPanel() - local player_gui = Player.getGlobalGui() local object = self:getObject(item, item2, item3) - local model_filter_beacon_module = Player.getSettings("model_filter_beacon_module", true) + local model_filter_beacon_module = User.getModGlobalSetting("model_filter_beacon_module") selectorPanel.clear() @@ -811,7 +800,6 @@ end function AbstractEdition.methods:updateBeaconSelector(item, item2, item3) Logging:debug(self:classname(), "updateBeaconSelector():", item, item2, item3) local selectorPanel = self:getBeaconSelectorPanel() - local global_gui = Player.getGlobalGui() selectorPanel.clear() @@ -822,7 +810,7 @@ function AbstractEdition.methods:updateBeaconSelector(item, item2, item3) local groupsPanel = ElementGui.addGuiTable(scrollPanel, "beacon-groups", 2) local category = "module-beacon" - if not(Player.getSettings("model_filter_beacon", true)) then category = nil end + if not(User.getModGlobalSetting("model_filter_beacon")) then category = nil end -- ajouter de la table des groupes de recipe local factories = Player.getProductionsBeacon() Logging:debug(self:classname(), "factories:",factories) @@ -843,7 +831,7 @@ function AbstractEdition.methods:updateBeaconSelector(item, item2, item3) for group, count in pairs(subgroups) do -- set le groupe - if global_gui.beaconGroupSelected == nil then global_gui.beaconGroupSelected = group end + if User.getParameter("beacon_group_selected") == nil then User.setParameter("beacon_group_selected",group) end -- ajoute les icons de groupe local action = ElementGui.addGuiButton(groupsPanel, self:classname().."=beacon-group=ID="..item.."="..object.id.."=", group, "helmod_button_default", group) end @@ -851,7 +839,7 @@ function AbstractEdition.methods:updateBeaconSelector(item, item2, item3) local tablePanel = ElementGui.addGuiTable(scrollPanel, "beacon-table", 5) for key, beacon in pairs(factories) do - if category ~= nil or (beacon.subgroup ~= nil and beacon.subgroup.name == global_gui.beaconGroupSelected) then + if category ~= nil or (beacon.subgroup ~= nil and beacon.subgroup.name == User.getParameter("beacon_group_selected")) then local localised_name = Player.getLocalisedName(beacon) ElementGui.addGuiButtonSelectSprite(tablePanel, self:classname().."=beacon-select=ID="..item.."="..object.id.."=", "item", beacon.name, beacon.name, localised_name) end @@ -873,25 +861,25 @@ function AbstractEdition.methods:onEvent(event, action, item, item2, item3) Logging:debug(self:classname(), "onEvent():", action, item, item2, item3) local display_width, display_height = ElementGui.getDisplaySizes() local model = Model.getModel() - local global_gui = Player.getGlobalGui() if action == "edition-change-tab" then - global_gui.factory_tab = not(global_gui.factory_tab) + User.setParameter("factory_tab",not(User.getParameter("factory_tab"))) self:onUpdate(event, action, item, item2, item3) end if action == "change-panel" then - global_gui.module_panel = not(global_gui.module_panel) + User.setParameter("module_panel",not(User.getParameter("module_panel"))) self:onUpdate(event, action, item, item2, item3) end if action == "factory-group" then + User.setParameter("factory_group_selected", item3) global_gui.factoryGroupSelected = item3 self:updateFactorySelector(item, item2, item3) end if action == "beacon-group" then - global_gui.beaconGroupSelected = item3 + User.setParameter("beacon_group_selected", item3) self:updateBeaconSelector(item, item2, item3) end @@ -983,7 +971,7 @@ function AbstractEdition.methods:onEvent(event, action, item, item2, item3) ModelBuilder.updateBeacon(item, item2, options) ModelCompute.update() self:updateBeaconInfo(item, item2, item3) - if display_height >= limit_display_height or global_gui.factory_tab then + if display_height >= limit_display_height or User.getParameter("factory_tab") then self:updateFactoryInfo(item, item2, item3) end end @@ -993,7 +981,7 @@ function AbstractEdition.methods:onEvent(event, action, item, item2, item3) ModelCompute.update() self:updateBeaconInfo(item, item2, item3) self:updateBeaconActivedModules(item, item2, item3) - if display_height >= limit_display_height or global_gui.factory_tab then + if display_height >= limit_display_height or User.getParameter("factory_tab") then self:updateFactoryInfo(item, item2, item3) end end @@ -1003,7 +991,7 @@ function AbstractEdition.methods:onEvent(event, action, item, item2, item3) ModelCompute.update() self:updateBeaconInfo(item, item2, item3) self:updateBeaconActivedModules(item, item2, item3) - if display_height >= limit_display_height or global_gui.factory_tab then + if display_height >= limit_display_height or User.getParameter("factory_tab") then self:updateFactoryInfo(item, item2, item3) end end diff --git a/edition/EnergyEdition.lua b/edition/EnergyEdition.lua index 9e7a5827..8a58f08f 100644 --- a/edition/EnergyEdition.lua +++ b/edition/EnergyEdition.lua @@ -16,6 +16,7 @@ EnergyEdition = setclass("HMEnergyEdition", AbstractEdition) -- function EnergyEdition.methods:onInit(parent) self.panelCaption = ({"helmod_energy-edition-panel.title"}) + self.parameterLast = string.format("%s_%s",self:classname(),"last") end ------------------------------------------------------------------------------- @@ -425,7 +426,7 @@ function EnergyEdition.methods:updatePrimarySelector(item, item2, item3) local groupsPanel = ElementGui.addGuiTable(scroll_panel, "primary-groups", 1) local category = "primary" - if not(Player.getSettings("model_filter_generator", true)) then category = nil end + if not(User.getModGlobalSetting("model_filter_generator")) then category = nil end -- ajouter de la table des groupes de recipe local factories = Player.getGenerators("primary") Logging:debug(self:classname(), "factories:",factories) @@ -558,7 +559,7 @@ function EnergyEdition.methods:updateSecondarySelector(item, item2, item3) local groupsPanel = ElementGui.addGuiTable(scroll_panel, "secondary-groups", 1) local category = "secondary" - if not(Player.getSettings("model_filter_generator", true)) then category = nil end + if not(User.getModGlobalSetting("model_filter_generator")) then category = nil end -- ajouter de la table des groupes de recipe local factories = Player.getGenerators("secondary") Logging:debug(self:classname(), "factories:",factories) diff --git a/edition/ProductBlockEdition.lua b/edition/ProductBlockEdition.lua index 60ea3b38..87daa7a2 100644 --- a/edition/ProductBlockEdition.lua +++ b/edition/ProductBlockEdition.lua @@ -17,6 +17,7 @@ ProductBlockEdition = setclass("HMProductBlockEdition", AbstractEdition) function ProductBlockEdition.methods:onInit(parent) self.panelCaption = ({"helmod_result-panel.tab-title-production-block"}) self.panelClose = false + self.parameterLast = string.format("%s_%s",self:classname(),"last") end ------------------------------------------------------------------------------- @@ -33,12 +34,11 @@ end -- @return #boolean if true the next call close dialog -- function ProductBlockEdition.methods:onBeforeEvent(event, action, item, item2, item3) - local player_gui = Player.getGlobalGui() local close = true - if player_gui.guiProductLast == nil or player_gui.guiProductLast ~= item then + if User.getParameter(self.parameterLast) == nil or User.getParameter(self.parameterLast) ~= item then close = false end - player_gui.guiProductLast = item + User.setParameter(self.parameterLast,item) return close end @@ -48,8 +48,7 @@ end -- @function [parent=#ProductBlockEdition] onClose -- function ProductBlockEdition.methods:onClose() - local player_gui = Player.getGlobalGui() - player_gui.guiProductLast = nil + User.setParameter(self.parameterLast,nil) end ------------------------------------------------------------------------------- @@ -143,12 +142,10 @@ end function ProductBlockEdition.methods:updateInfo(item, item2, item3) Logging:debug(self:classname(), "updateInfo", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() - Logging:debug(self:classname(), "model:", model) -- data - local blockId = globalGui.currentBlock or "new" + local current_block = User.getParameter("current_block") or "new" - local countRecipes = Model.countBlockRecipes(blockId) + local countRecipes = Model.countBlockRecipes(current_block) local info_panel = self:getInfoPanel() info_panel.clear() @@ -160,7 +157,7 @@ function ProductBlockEdition.methods:updateInfo(item, item2, item3) -- production block result if countRecipes > 0 then - local element = model.blocks[blockId] + local element = model.blocks[current_block] -- block panel ElementGui.addGuiLabel(block_table, "label-power", ({"helmod_label.electrical-consumption"})) @@ -203,12 +200,10 @@ end function ProductBlockEdition.methods:updateInput(item, item2, item3) Logging:debug(self:classname(), "updateInput", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() - Logging:debug(self:classname(), "model:", model) -- data - local block_id = globalGui.currentBlock or "new" + local current_block = User.getParameter("current_block") or "new" - local countRecipes = Model.countBlockRecipes(block_id) + local countRecipes = Model.countBlockRecipes(current_block) local input_panel = self:getInputPanel() input_panel.clear() @@ -219,7 +214,7 @@ function ProductBlockEdition.methods:updateInput(item, item2, item3) -- production block result if countRecipes > 0 then - local element = model.blocks[block_id] + local element = model.blocks[current_block] -- input panel local input_table = ElementGui.addGuiTable(input_scroll,"input-table", 5, "helmod_table_element") if element.ingredients ~= nil then @@ -229,7 +224,7 @@ function ProductBlockEdition.methods:updateInput(item, item2, item3) if element.count > 1 then ingredient.limit_count = lua_product.count / element.count end - ElementGui.addCellElement(input_table, ingredient, self:classname().."=production-recipe-add=ID="..block_id.."="..element.name.."=", true, "tooltip.ingredient", ElementGui.color_button_add, index) + ElementGui.addCellElement(input_table, ingredient, self:classname().."=production-recipe-add=ID="..current_block.."="..element.name.."=", true, "tooltip.ingredient", ElementGui.color_button_add, index) end end @@ -248,12 +243,11 @@ end function ProductBlockEdition.methods:updateOutput(item, item2, item3) Logging:debug(self:classname(), "updateOutput", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() Logging:debug(self:classname(), "model:", model) -- data - local blockId = globalGui.currentBlock or "new" + local current_block = User.getParameter("current_block") or "new" - local countRecipes = Model.countBlockRecipes(blockId) + local countRecipes = Model.countBlockRecipes(current_block) local output_panel = self:getOutputPanel() output_panel.clear() @@ -265,7 +259,7 @@ function ProductBlockEdition.methods:updateOutput(item, item2, item3) -- production block result if countRecipes > 0 then - local element = model.blocks[blockId] + local element = model.blocks[current_block] -- ouput panel local output_table = ElementGui.addGuiTable(output_scroll,"output-table", 5, "helmod_table_element") diff --git a/edition/ProductEdition.lua b/edition/ProductEdition.lua index 49c7c40b..d5b6e794 100644 --- a/edition/ProductEdition.lua +++ b/edition/ProductEdition.lua @@ -16,6 +16,7 @@ ProductEdition = setclass("HMProductEdition", AbstractEdition) -- function ProductEdition.methods:onInit(parent) self.panelCaption = ({"helmod_product-edition-panel.title"}) + self.parameterLast = string.format("%s_%s",self:classname(),"last") end ------------------------------------------------------------------------------- @@ -32,12 +33,11 @@ end -- @return #boolean if true the next call close dialog -- function ProductEdition.methods:onBeforeEvent(event, action, item, item2, item3) - local player_gui = Player.getGlobalGui() local close = true - if player_gui.guiProductLast == nil or player_gui.guiProductLast ~= item then + if User.getParameter(self.parameterLast) == nil or User.getParameter(self.parameterLast) ~= item then close = false end - player_gui.guiProductLast = item + User.setParameter(self.parameterLast,item) return close end @@ -47,8 +47,7 @@ end -- @function [parent=#ProductEdition] onClose -- function ProductEdition.methods:onClose() - local player_gui = Player.getGlobalGui() - player_gui.guiProductLast = nil + User.setParameter(self.parameterLast,nil) end ------------------------------------------------------------------------------- diff --git a/edition/ProductLineEdition.lua b/edition/ProductLineEdition.lua index 91c490fb..58b7cd32 100644 --- a/edition/ProductLineEdition.lua +++ b/edition/ProductLineEdition.lua @@ -17,6 +17,7 @@ ProductLineEdition = setclass("HMProductLineEdition", AbstractEdition) function ProductLineEdition.methods:onInit(parent) self.panelCaption = ({"helmod_result-panel.tab-title-production-line"}) self.panelClose = false + self.parameterLast = string.format("%s_%s",self:classname(),"last") end ------------------------------------------------------------------------------- @@ -33,12 +34,11 @@ end -- @return #boolean if true the next call close dialog -- function ProductLineEdition.methods:onBeforeEvent(event, action, item, item2, item3) - local player_gui = Player.getGlobalGui() local close = true - if player_gui.guiProductLast == nil or player_gui.guiProductLast ~= item then + if User.getParameter(self.parameterLast) == nil or User.getParameter(self.parameterLast) ~= item then close = false end - player_gui.guiProductLast = item + User.setParameter(self.parameterLast,item) return close end @@ -48,8 +48,7 @@ end -- @function [parent=#ProductLineEdition] onClose -- function ProductLineEdition.methods:onClose() - local player_gui = Player.getGlobalGui() - player_gui.guiProductLast = nil + User.setParameter(self.parameterLast,nil) end ------------------------------------------------------------------------------- @@ -144,7 +143,6 @@ end function ProductLineEdition.methods:updateInfo(item, item2, item3) Logging:debug(self:classname(), "updateInfo", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() Logging:debug(self:classname(), "model:", model) -- data local info_panel = self:getInfoPanel() @@ -198,7 +196,6 @@ end function ProductLineEdition.methods:updateInput(item, item2, item3) Logging:debug(self:classname(), "updateInput", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() Logging:debug("ProductionBlockTab", "model:", model) -- data local input_panel = self:getInputPanel() @@ -232,7 +229,6 @@ end function ProductLineEdition.methods:updateOutput(item, item2, item3) Logging:debug(self:classname(), "updateOutput", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() Logging:debug("ProductionBlockTab", "model:", model) -- data local output_panel = self:getOutputPanel() diff --git a/edition/RecipeEdition.lua b/edition/RecipeEdition.lua index 109ab1c6..4fe6c8e9 100644 --- a/edition/RecipeEdition.lua +++ b/edition/RecipeEdition.lua @@ -18,6 +18,7 @@ RecipeEdition = setclass("HMRecipeEdition", AbstractEdition) -- function RecipeEdition.methods:onInit(parent) self.panelCaption = ({"helmod_recipe-edition-panel.title"}) + self.parameterLast = string.format("%s_%s",self:classname(),"last") end ------------------------------------------------------------------------------- diff --git a/edition/ResourceEdition.lua b/edition/ResourceEdition.lua index 1f5d6375..f7003ac9 100644 --- a/edition/ResourceEdition.lua +++ b/edition/ResourceEdition.lua @@ -18,44 +18,7 @@ ResourceEdition = setclass("HMResourceEdition", AbstractEdition) -- function ResourceEdition.methods:onInit(parent) self.panelCaption = ({"helmod_resource-edition-panel.title"}) -end - -------------------------------------------------------------------------------- --- On before event --- --- @function [parent=#ResourceEdition] onBeforeEvent --- --- @param #LuaEvent event --- @param #string action action name --- @param #string item first item name --- @param #string item2 second item name --- @param #string item3 third item name --- --- @return #boolean if true the next call close dialog --- -function ResourceEdition.methods:onBeforeEvent(event, action, item, item2, item3) - local model = Model.getModel() - local close = true - model.moduleListRefresh = false - if model.guiRecipeLast == nil or model.guiRecipeLast ~= item..item2 then - close = false - model.factoryGroupSelected = nil - model.beaconGroupSelected = nil - model.moduleListRefresh = true - end - model.guiRecipeLast = item..item2 - return close -end - -------------------------------------------------------------------------------- --- On close dialog --- --- @function [parent=#ResourceEdition] onClose --- -function ResourceEdition.methods:onClose() - local model = Model.getModel() - model.guiRecipeLast = nil - model.moduleListRefresh = false + self.parameterLast = string.format("%s_%s",self:classname(),"last") end ------------------------------------------------------------------------------- diff --git a/edition/RuleEdition.lua b/edition/RuleEdition.lua index 5f312680..e18fe401 100644 --- a/edition/RuleEdition.lua +++ b/edition/RuleEdition.lua @@ -15,6 +15,7 @@ RuleEdition = setclass("HMRuleEdition", AbstractEdition) -- function RuleEdition.methods:onInit(parent) self.panelCaption = ({"helmod_rule-edition-panel.title"}) + self.parameterLast = string.format("%s_%s",self:classname(),"last") end ------------------------------------------------------------------------------- diff --git a/graphics/icons/menu_icons.png b/graphics/icons/menu_icons.png index 4ba7cfa409c76ec9d092b5a43a2c067f5f2b6005..947c693732d5f5f978f4bc15eb2562dab2a6005a 100644 GIT binary patch literal 119174 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 mfB literal 118402 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 uD3rP7-Md11-PiDQ6 0) then - if Controller.isActiveForm("HMPropertiesTab") then + if User.isActiveForm("HMPropertiesTab") then if action == "element-select" then - globalPlayer["prototype-properties"] = {type = item, name = item2 } + User.setParameter("prototype_properties",{type = item, name = item2 }) self:close() end else @@ -233,36 +229,36 @@ function AbstractSelector.methods:onEvent(event, action, item, item2, item3) local productionBlock = ModelBuilder.addRecipeIntoProductionBlock(item2, item) ModelCompute.update() self:close() - globalGui["scroll_down"] = true - Controller.setActiveForm("HMProductionBlockTab") + User.setParameter("scroll_down",true) + User.setActiveForm("HMProductionBlockTab") end -- container selector if action == "element-select" and item == "container" then local type = EntityPrototype.load(item2).getType() if type == "container" or type == "logistic-container" then - globalGui.container_solid = item2 + User.setParameter("container_solid",item2) end if type == "storage-tank" then - globalGui.container_fluid = item2 + User.setParameter("container_fluid",item2) end if type == "car" or type == "cargo-wagon" or type == "item-with-entity-data" or type == "logistic-robot" or type == "transport-belt" then - globalGui.vehicle_solid = item2 + User.setParameter("vehicle_solid",item2) end if type == "fluid-wagon" then - globalGui.vehicle_fluid = item2 + User.setParameter("vehicle_fluid",item2) end end end end if action == "recipe-group" then - globalPlayer.recipeGroupSelected = item + User.setParameter("recipe_group_selected",item) Controller.createEvent(event, self:classname(), "UPDATE", item, item2, item3) end if action == "change-boolean-settings" then - if globalSettings[item] == nil then globalSettings[item] = defaultSettings[item] end - globalSettings[item] = not(globalSettings[item]) + if User.getSetting(item) == nil then User.setSetting(item, default_settings[item]) end + User.setSetting(item, not(User.getSetting(item))) self:resetGroups() Controller.createEvent(event, self:classname(), "UPDATE", item, item2, item3) end @@ -273,7 +269,7 @@ function AbstractSelector.methods:onEvent(event, action, item, item2, item3) end if action == "recipe-filter" then - if Player.getSettings("filter_on_text_changed", true) then + if User.getModGlobalSetting("filter_on_text_changed") then filter_prototype = event.element.text Controller.createEvent(event, self:classname(), "UPDATE", item, item2, item3) else @@ -397,15 +393,16 @@ function AbstractSelector.methods:updateFilter(event, action, item, item2, item3 local panel = self:getFilterPanel() if panel["filter"] == nil then + Logging:debug(self:classname(), "build filter") local guiFilter = ElementGui.addGuiTable(panel, "filter", 2) if self.disable_option then - local filter_show_disable = Player.getGlobalSettings("filter_show_disable") + local filter_show_disable = User.getSetting("filter_show_disable") ElementGui.addGuiCheckbox(guiFilter, self:classname().."=change-boolean-settings=ID=filter_show_disable", filter_show_disable) ElementGui.addGuiLabel(guiFilter, "filter_show_disable", ({"helmod_recipe-edition-panel.filter-show-disable"})) end if self.hidden_option then - local filter_show_hidden = Player.getGlobalSettings("filter_show_hidden") + local filter_show_hidden = User.getSetting("filter_show_hidden") ElementGui.addGuiCheckbox(guiFilter, self:classname().."=change-boolean-settings=ID=filter_show_hidden", filter_show_hidden) ElementGui.addGuiLabel(guiFilter, "filter_show_hidden", ({"helmod_recipe-edition-panel.filter-show-hidden"})) end @@ -420,8 +417,9 @@ function AbstractSelector.methods:updateFilter(event, action, item, item2, item3 ElementGui.addGuiLabel(guiFilter, "filter-value", ({"helmod_common.filter"})) local cellFilter = ElementGui.addGuiFrameH(guiFilter,"cell-filter", helmod_frame_style.hidden) - if Player.getSettings("filter_on_text_changed", true) then - ElementGui.addGuiText(cellFilter, self:classname().."=recipe-filter=ID=filter-value", filter_prototype) + if User.getModGlobalSetting("filter_on_text_changed") then + local text_filter = ElementGui.addGuiText(cellFilter, self:classname().."=recipe-filter=ID=filter-value", filter_prototype) + text_filter.lose_focus_on_confirm = false else ElementGui.addGuiText(cellFilter, "filter-text", filter_prototype) ElementGui.addGuiButton(cellFilter, self:classname().."=recipe-filter=ID=", "filter-value", "helmod_button_default", ({"helmod_button.apply"})) @@ -434,7 +432,7 @@ function AbstractSelector.methods:updateFilter(event, action, item, item2, item3 panel["filter"][self:classname().."=recipe-filter-switch=ID=filter-product"].state = filter_prototype_product panel["filter"][self:classname().."=recipe-filter-switch=ID=filter-ingredient"].state = not(filter_prototype_product) if filter_prototype ~= nil and action == "OPEN" then - if Player.getSettings("filter_on_text_changed", true) then + if User.getModGlobalSetting("filter_on_text_changed") then panel["filter"]["cell-filter"][self:classname().."=recipe-filter=ID=filter-value"].text = filter_prototype else panel["filter"]["cell-filter"]["filter-text"].text = filter_prototype @@ -449,19 +447,15 @@ end -- -- @function [parent=#AbstractSelector] getItemList -- --- @param #string item first item name --- @param #string item2 second item name --- @param #string item3 third item name --- -- @return #table -- -function AbstractSelector.methods:getItemList(item, item2, item3) - Logging:trace(self:classname(), "getItemList():",item, item2, item3) - local global_player = Player.getGlobal() +function AbstractSelector.methods:getItemList() + Logging:trace(self:classname(), "getItemList()") local list_selected = {} local list = self:getListPrototype() - if list[global_player.recipeGroupSelected] ~= nil then - list_selected = list[global_player.recipeGroupSelected] + local group_selected = User.getParameter("recipe_group_selected") + if list[group_selected] ~= nil then + list_selected = list[group_selected] end return list_selected end @@ -482,9 +476,7 @@ function AbstractSelector.methods:updateItemList(event, action, item, item2, ite local item_list_panel = self:getItemListPanel() local filter_prototype = self:getFilter() - if item_list_panel["recipe_list"] ~= nil and item_list_panel["recipe_list"].valid then - item_list_panel["recipe_list"].destroy() - end + item_list_panel.clear() -- recuperation recipes et subgroupes local list_item = self:getItemList() @@ -507,24 +499,6 @@ function AbstractSelector.methods:updateItemList(event, action, item, item2, ite end -------------------------------------------------------------------------------- --- Get item list --- --- @function [parent=#AbstractSelector] getItemList --- --- @return #table --- -function AbstractSelector.methods:getItemList() - Logging:trace(self:classname(), "getItemList()") - local global_player = Player.getGlobal() - local list_selected = {} - local list_prototype = self:getListPrototype() - if list_prototype[global_player.recipeGroupSelected] ~= nil then - list_selected = list_prototype[global_player.recipeGroupSelected] - end - return list_selected -end - ------------------------------------------------------------------------------- -- Build prototype tooltip -- @@ -560,24 +534,34 @@ end -- function AbstractSelector.methods:updateGroupSelector(event, action, item, item2, item3) Logging:trace(self:classname(), "updateGroupSelector():", action, item, item2, item3) - local global_player = Player.getGlobal() local panel = self:getGroupsPanel() - if panel["recipe-groups"] ~= nil and panel["recipe-groups"].valid then - panel["recipe-groups"].destroy() - end + panel.clear() local list_group = self:getListGroup() - Logging:trace(self:classname(), "list_group:",list_group) + + Logging:debug(self:classname(), "list_group:",list_group,group_selected) -- ajouter de la table des groupes de recipe local gui_group_panel = ElementGui.addGuiTable(panel, "recipe-groups", 6, "helmod_table_recipe_selector") + + local group_selected = User.getParameter("recipe_group_selected") + local group_selected_checked = false + for _, group in spairs(list_group,function(t,a,b) return t[b]["order"] > t[a]["order"] end) do + if self:checkFilter(group) and group_selected == group.name then + group_selected_checked = true + end + end + + if not(group_selected_checked) then User.setParameter("recipe_group_selected",nil) end + for _, group in spairs(list_group,function(t,a,b) return t[b]["order"] > t[a]["order"] end) do if self:checkFilter(group) then -- set le groupe - if global_player.recipeGroupSelected == nil then global_player.recipeGroupSelected = group.name end + local group_selected = User.getParameter("recipe_group_selected") + if group_selected == nil then User.setParameter("recipe_group_selected",group.name) end local color = nil - if global_player.recipeGroupSelected == group.name then + if User.getParameter("recipe_group_selected") == group.name then color = "yellow" end local tooltip = "item-group-name."..group.name diff --git a/selector/ContainerSelector.lua b/selector/ContainerSelector.lua index 06e51b14..61e5ca60 100644 --- a/selector/ContainerSelector.lua +++ b/selector/ContainerSelector.lua @@ -31,8 +31,8 @@ function ContainerSelector.methods:appendGroups(name, type) Logging:debug(self:classname(), "appendGroups()", name, type) EntityPrototype.load(name, type) local find = self:checkFilter(EntityPrototype.native()) - local filter_show_disable = Player.getGlobalSettings("filter_show_disable") - local filter_show_hidden = Player.getGlobalSettings("filter_show_hidden") + local filter_show_disable = User.getSetting("filter_show_disable") + local filter_show_hidden = User.getSetting("filter_show_hidden") local list_group = Cache.getData(self:classname(), "list_group") local list_prototype = Cache.getData(self:classname(), "list_prototype") diff --git a/selector/EntitySelector.lua b/selector/EntitySelector.lua index 42a51975..6a42586d 100644 --- a/selector/EntitySelector.lua +++ b/selector/EntitySelector.lua @@ -43,8 +43,8 @@ function EntitySelector.methods:appendGroups(name, type) Logging:debug(self:classname(), "appendGroups()", name, type) EntityPrototype.load(name, type) local find = self:checkFilter(EntityPrototype.native()) - local filter_show_disable = Player.getGlobalSettings("filter_show_disable") - local filter_show_hidden = Player.getGlobalSettings("filter_show_hidden") + local filter_show_disable = User.getSetting("filter_show_disable") + local filter_show_hidden = User.getSetting("filter_show_hidden") local list_group = Cache.getData(self:classname(), "list_group") local list_prototype = Cache.getData(self:classname(), "list_prototype") diff --git a/selector/FluidSelector.lua b/selector/FluidSelector.lua index 3c2ef55f..b2fabc8f 100644 --- a/selector/FluidSelector.lua +++ b/selector/FluidSelector.lua @@ -35,8 +35,8 @@ function FluidSelector.methods:appendGroups(name, type) Logging:debug(self:classname(), "appendGroups()", name, type) FluidPrototype.load(name, type) local find = self:checkFilter(FluidPrototype.native()) - local filter_show_disable = Player.getGlobalSettings("filter_show_disable") - local filter_show_hidden = Player.getGlobalSettings("filter_show_hidden") + local filter_show_disable = User.getSetting("filter_show_disable") + local filter_show_hidden = User.getSetting("filter_show_hidden") local list_group = Cache.getData(self:classname(), "list_group") local list_prototype = Cache.getData(self:classname(), "list_prototype") diff --git a/selector/ItemSelector.lua b/selector/ItemSelector.lua index fa533bdf..6ccc4af9 100644 --- a/selector/ItemSelector.lua +++ b/selector/ItemSelector.lua @@ -31,8 +31,8 @@ function ItemSelector.methods:appendGroups(name, type) Logging:debug(self:classname(), "appendGroups()", name, type) ItemPrototype.load(name, type) local find = self:checkFilter(ItemPrototype.native()) - local filter_show_disable = Player.getGlobalSettings("filter_show_disable") - local filter_show_hidden = Player.getGlobalSettings("filter_show_hidden") + local filter_show_disable = User.getSetting("filter_show_disable") + local filter_show_hidden = User.getSetting("filter_show_hidden") local list_group = Cache.getData(self:classname(), "list_group") local list_prototype = Cache.getData(self:classname(), "list_prototype") diff --git a/selector/RecipeSelector.lua b/selector/RecipeSelector.lua index 48419b92..81a1c3ab 100644 --- a/selector/RecipeSelector.lua +++ b/selector/RecipeSelector.lua @@ -43,8 +43,8 @@ end function RecipeSelector.methods:appendGroups(recipe, type) Logging:trace(self:classname(), "appendGroups()", recipe.name, type) RecipePrototype.set(recipe, type) - local filter_show_disable = Player.getGlobalSettings("filter_show_disable") - local filter_show_hidden = Player.getGlobalSettings("filter_show_hidden") + local filter_show_disable = User.getSetting("filter_show_disable") + local filter_show_hidden = User.getSetting("filter_show_hidden") local list_group = Cache.getData(self:classname(), "list_group") local list_prototype = Cache.getData(self:classname(), "list_prototype") @@ -92,15 +92,13 @@ end -- function RecipeSelector.methods:updateGroups(event, action, item, item2, item3) Logging:trace(self:classname(), "updateGroups()", action, item, item2, item3) - local global_player = Player.getGlobal() - local global_gui = Player.getGlobalGui() self:resetGroups() for key, recipe in pairs(Player.getRecipes()) do self:appendGroups(recipe, "recipe") end - if global_gui.currentTab ~= "HMPropertiesTab" then + if not(User.isActiveForm("HMPropertiesTab")) then for key, fluid in pairs(Player.getFluidPrototypes()) do self:appendGroups(fluid, "fluid") end diff --git a/selector/TechnologySelector.lua b/selector/TechnologySelector.lua index 7831da13..93e0a2b4 100644 --- a/selector/TechnologySelector.lua +++ b/selector/TechnologySelector.lua @@ -42,8 +42,8 @@ function TechnologySelector.methods:appendGroups(name, type) Logging:debug(self:classname(), "appendGroups()", name, type) Technology.load(name, type) local find = self:checkFilter(Technology.native()) - local filter_show_disable = Player.getGlobalSettings("filter_show_disable") - local filter_show_hidden = Player.getGlobalSettings("filter_show_hidden") + local filter_show_disable = User.getSetting("filter_show_disable") + local filter_show_hidden = User.getSetting("filter_show_hidden") local list_group = Cache.getData(self:classname(), "list_group") local list_prototype = Cache.getData(self:classname(), "list_prototype") diff --git a/tab/AbstractTab.lua b/tab/AbstractTab.lua index 0bf157c9..8909eaa4 100644 --- a/tab/AbstractTab.lua +++ b/tab/AbstractTab.lua @@ -28,6 +28,17 @@ function AbstractTab.methods:getButtonStyles() return "helmod_button_default","helmod_button_selected" end +------------------------------------------------------------------------------- +-- Get panel name +-- +-- @function [parent=#AbstractTab] getPanelName +-- +-- @return #LuaGuiElement +-- +function AbstractTab.methods:getPanelName() + return "HMTab" +end + ------------------------------------------------------------------------------- -- Get or create index panel -- @@ -165,8 +176,10 @@ function AbstractTab.methods:getResultPanel2() panel.style.horizontally_stretchable = true panel.style.vertically_stretchable = true - local panel1 = ElementGui.addGuiFrameV(panel, "result1", helmod_frame_style.panel) - local panel2 = ElementGui.addGuiFrameV(panel, "result2", helmod_frame_style.panel, self:getButtonCaption()) + local panel1 = ElementGui.addGuiFlowV(panel, "result1", helmod_flow_style.vertical) + local panel2 = ElementGui.addGuiFrameV(panel, "result2", helmod_frame_style.section, self:getButtonCaption()) + panel2.style.horizontally_stretchable = true + panel2.style.vertically_stretchable = true return panel1,panel2 end @@ -200,7 +213,7 @@ function AbstractTab.methods:getResultScrollPanel2() local header_panel2 = ElementGui.addGuiFlowV(parent_panel2, "header-data2", helmod_flow_style.vertical) local scroll_panel1 = ElementGui.addGuiScrollPane(parent_panel1, "scroll-data1", helmod_frame_style.scroll_pane, true, true) --scroll_panel1.style.horizontally_stretchable = true - --scroll_panel1.style.vertically_stretchable = true + scroll_panel1.style.vertically_stretchable = true scroll_panel1.style.width = 70 local scroll_panel2 = ElementGui.addGuiScrollPane(parent_panel2, "scroll-data2", helmod_frame_style.scroll_pane, true, true) scroll_panel2.style.horizontally_stretchable = true @@ -213,14 +226,14 @@ end -- -- @function [parent=#AbstractTab] onUpdate -- +-- @param #LuaEvent event +-- @param #string action action name -- @param #string item first item name -- @param #string item2 second item name -- @param #string item3 third item name -- -function AbstractTab.methods:onUpdate(item, item2, item3) +function AbstractTab.methods:onUpdate(event, action, item, item2, item3) Logging:debug(self:classname(), "update():", item, item2, item3) - Logging:debug(self:classname(), "update():global", global) - local globalGui = Player.getGlobalGui() local panel = self:getPanel() self:beforeUpdate(item, item2, item3) @@ -230,8 +243,8 @@ function AbstractTab.methods:onUpdate(item, item2, item3) self:updateHeader(item, item2, item3) self:updateData(item, item2, item3) - Logging:debug(self:classname(), "debug_mode", Player.getSettings("debug")) - if Player.getSettings("debug", true) ~= "none" then + Logging:debug(self:classname(), "debug_mode", User.getModGlobalSetting("debug")) + if User.getModGlobalSetting("debug") ~= "none" then self:updateDebugPanel() end @@ -250,8 +263,8 @@ function AbstractTab.methods:updateMenuPanel(item, item2, item3) Logging:debug(self:classname(), "updateMenuPanel():", item, item2, item3) local models = Model.getModels() local model = Model.getModel() - local model_id = Player.getGlobalGui("model_id") - local globalGui = Player.getGlobalGui() + local model_id = User.getParameter("model_id") + local current_block = User.getParameter("current_block") -- action panel local action_panel = self:getLeftMenuPanel() @@ -261,7 +274,7 @@ function AbstractTab.methods:updateMenuPanel(item, item2, item3) for _, form in pairs(Controller.getViews()) do if string.find(form:classname(), "Tab") and form:isVisible() and not(form:isSpecial()) then local style, selected_style = form:getButtonStyles() - if Controller.isActiveForm(form:classname()) then style = selected_style end + if User.isActiveForm(form:classname()) then style = selected_style end ElementGui.addGuiButton(group4, self:classname().."=change-tab=ID=", form:classname(), style, nil, form:getButtonCaption()) end end @@ -279,7 +292,7 @@ function AbstractTab.methods:updateMenuPanel(item, item2, item3) else -- add recipe local group1 = ElementGui.addGuiFlowH(action_panel,"group1",helmod_flow_style.horizontal) - local block_id = globalGui.currentBlock or "new" + local block_id = current_block or "new" ElementGui.addGuiButton(group1, "HMRecipeSelector=OPEN=ID=", block_id, "helmod_button_icon_wrench",nil, ({"helmod_result-panel.add-button-recipe"})) ElementGui.addGuiButton(group1, "HMTechnologySelector=OPEN=ID=", block_id, "helmod_button_icon_graduation",nil, ({"helmod_result-panel.add-button-technology"})) ElementGui.addGuiButton(group1, "HMContainerSelector=OPEN=ID=", block_id, "helmod_button_icon_container",nil, ({"helmod_result-panel.select-button-container"})) @@ -294,7 +307,7 @@ function AbstractTab.methods:updateMenuPanel(item, item2, item3) ElementGui.addGuiButton(group2, "HMDownload=OPEN=ID=", "upload", "helmod_button_icon_upload", nil, ({"helmod_result-panel.upload-button-production-line"})) end -- delete control - if Player.isAdmin() or model.owner == Player.native().name or (model.share ~= nil and bit32.band(model.share, 4) > 0) then + if User.isAdmin() or model.owner == User.name() or (model.share ~= nil and bit32.band(model.share, 4) > 0) then if self:classname() == "HMProductionLineTab" then ElementGui.addGuiButton(group2, self:classname().."=remove-model=ID=", model.id, "helmod_button_icon_delete_red", nil, ({"helmod_result-panel.remove-button-production-line"})) end @@ -347,7 +360,7 @@ end function AbstractTab.methods:updateIndexPanel(item, item2, item3) Logging:debug(self:classname(), "updateIndexPanel():", item, item2, item3) local models = Model.getModels() - local model_id = Player.getGlobalGui("model_id") + local model_id = User.getParameter("model_id") if self:hasIndexModel() then -- index panel @@ -411,45 +424,9 @@ end function AbstractTab.methods:addCellHeader(guiTable, name, caption, sorted) Logging:trace(self:classname(), "addCellHeader():", guiTable, name, caption, sorted) - if (name ~= "index" and name ~= "id" and name ~= "name" and name ~= "type") or Player.getSettings("display_data_col_"..name, true) then + if (name ~= "index" and name ~= "id" and name ~= "name" and name ~= "type") or User.getModGlobalSetting("display_data_col_"..name) then local cell = ElementGui.addGuiFrameH(guiTable,"header-"..name, helmod_frame_style.hidden) ElementGui.addGuiLabel(cell, "label", caption) - if sorted ~= nil then - ElementGui.addGuiButton(cell, self:classname().."=change-sort=ID=", sorted, Player.getSortedStyle(sorted)) - end - end -end - -------------------------------------------------------------------------------- --- Add icon in cell element --- --- @function [parent=#AbstractTab] addIconRecipeCell --- --- @param #LuaGuiElement cell --- @param #table element production block --- @param #string action --- @param #boolean select --- @param #string tooltip_name --- @param #string color --- --- @deprecated --- -function AbstractTab.methods:addIconRecipeCell(cell, element, action, select, tooltip_name, color) - Logging:trace(self:classname(), "addIconRecipeCell():", element, action, select, tooltip_name, color) - local display_cell_mod = Player.getSettings("display_cell_mod") - -- ingredient = {type="item", name="steel-plate", amount=8} - if display_cell_mod == "small-icon" then - if cell ~= nil and select == true then - ElementGui.addGuiButtonSelectSpriteM(cell, action, Player.getRecipeIconType(element), element.name, element.name, ({tooltip_name, Player.getRecipeLocalisedName(element)}), color) - else - ElementGui.addGuiButtonSpriteM(cell, action, Player.getRecipeIconType(element), element.name, element.name, ({tooltip_name, Player.getRecipeLocalisedName(element)}), color) - end - else - if cell ~= nil and select == true then - ElementGui.addGuiButtonSelectSprite(cell, action, Player.getRecipeIconType(element), element.name, element.name, ({tooltip_name, Player.getRecipeLocalisedName(element)}), color) - else - ElementGui.addGuiButtonSprite(cell, action, Player.getRecipeIconType(element), element.name, element.name, ({tooltip_name, Player.getRecipeLocalisedName(element)}), color) - end end end diff --git a/tab/AdminTab.lua b/tab/AdminTab.lua index 8b843b35..2ca61952 100644 --- a/tab/AdminTab.lua +++ b/tab/AdminTab.lua @@ -70,7 +70,6 @@ end -- function AdminTab.methods:updateData() Logging:debug(self:classname(), "updatePowers()") - local globalGui = Player.getGlobalGui() -- data local scroll_panel = self:getResultScrollPanel({"helmod_result-panel.tab-title-admin"}) diff --git a/tab/EnergyTab.lua b/tab/EnergyTab.lua index 855fd633..54fc0159 100644 --- a/tab/EnergyTab.lua +++ b/tab/EnergyTab.lua @@ -38,7 +38,7 @@ end function EnergyTab.methods:updateData() Logging:debug(self:classname(), "updatePowers()") local model = Model.getModel() - local globalGui = Player.getGlobalGui() + local order = User.getParameter("order") -- data local scroll_panel = self:getResultScrollPanel() @@ -47,10 +47,9 @@ function EnergyTab.methods:updateData() local countBlock = Model.countPowers() if model.powers ~= nil and countBlock > 0 then - local globalSettings = Player.getGlobal("settings") local extra_cols = 0 - if Player.getSettings("display_data_col_id", true) then + if User.getModGlobalSetting("display_data_col_id") then extra_cols = extra_cols + 1 end local resultTable = ElementGui.addGuiTable(scroll_panel,"list-data",4 + extra_cols, "helmod_table-odd") @@ -58,7 +57,7 @@ function EnergyTab.methods:updateData() self:addTableHeader(resultTable) local i = 0 - for _, element in spairs(model.powers, function(t,a,b) if globalGui.order.ascendant then return t[b][globalGui.order.name] > t[a][globalGui.order.name] else return t[b][globalGui.order.name] < t[a][globalGui.order.name] end end) do + for _, element in spairs(model.powers, function(t,a,b) if order.ascendant then return t[b][order.name] > t[a][order.name] else return t[b][order.name] < t[a][order.name] end end) do self:addTableRow(resultTable, element) end @@ -102,7 +101,7 @@ function EnergyTab.methods:addTableRow(gui_table, power) ElementGui.addGuiButton(cell_action, self:classname().."=power-remove=ID=", power.id, "helmod_button_default", ({"helmod_result-panel.row-button-delete"}), ({"tooltip.remove-element"})) -- col id - if Player.getSettings("display_data_col_id", true) then + if User.getModGlobalSetting("display_data_col_id") then local cell_id = ElementGui.addGuiFrameH(gui_table,"id"..power.id, helmod_frame_style.hidden) ElementGui.addGuiLabel(cell_id, "id", power.id) end diff --git a/tab/ProductionBlockTab.lua b/tab/ProductionBlockTab.lua index 7f10d398..13a388c5 100644 --- a/tab/ProductionBlockTab.lua +++ b/tab/ProductionBlockTab.lua @@ -67,14 +67,14 @@ function ProductionBlockTab.methods:updateDebugPanel(item, item2, item3) Logging:debug("ProductionBlockTab", "updateDebugPanel():", item, item2, item3) local header_panel1, header_panel2,scroll_panel1, scroll_panel2 = self:getResultScrollPanel2({"helmod_result-panel.tab-button-production-block"}) local model = Model.getModel() - local globalGui = Player.getGlobalGui() - - local blockId = globalGui.currentBlock or "new" - local countRecipes = Model.countBlockRecipes(blockId) + + local current_block = User.getParameter("current_block") or "new" + + local countRecipes = Model.countBlockRecipes(current_block) if countRecipes > 0 then - local block = model.blocks[blockId] + local block = model.blocks[current_block] -- input local input_panel = ElementGui.addGuiFrameV(scroll_panel2, "input_panel", helmod_frame_style.hidden, "Input data") @@ -236,12 +236,11 @@ end function ProductionBlockTab.methods:updateInfo(item, item2, item3) Logging:debug(self:classname(), "updateInfo", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() Logging:debug(self:classname(), "model:", model) -- data - local blockId = globalGui.currentBlock or "new" + local current_block = User.getParameter("current_block") or "new" - local countRecipes = Model.countBlockRecipes(blockId) + local countRecipes = Model.countBlockRecipes(current_block) local info_scroll, output_scroll, input_scroll = self:getInfoPanel2() info_scroll.clear() @@ -253,7 +252,7 @@ function ProductionBlockTab.methods:updateInfo(item, item2, item3) -- production block result if countRecipes > 0 then - local element = model.blocks[blockId] + local element = model.blocks[current_block] -- block panel ElementGui.addGuiLabel(block_table, "label-power", ({"helmod_label.electrical-consumption"})) @@ -295,12 +294,11 @@ end function ProductionBlockTab.methods:updateInput(item, item2, item3) Logging:debug(self:classname(), "updateInput", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() Logging:debug(self:classname(), "model:", model) -- data - local block_id = globalGui.currentBlock or "new" + local current_block = User.getParameter("current_block") or "new" - local countRecipes = Model.countBlockRecipes(block_id) + local countRecipes = Model.countBlockRecipes(current_block) local info_scroll, output_scroll, input_scroll = self:getInfoPanel2() input_scroll.clear() @@ -309,7 +307,7 @@ function ProductionBlockTab.methods:updateInput(item, item2, item3) -- production block result if countRecipes > 0 then - local element = model.blocks[block_id] + local element = model.blocks[current_block] -- input panel local input_table = ElementGui.addGuiTable(input_scroll,"input-table", ElementGui.getElementColumnNumber(50), "helmod_table_element") if element.ingredients ~= nil then @@ -319,7 +317,7 @@ function ProductionBlockTab.methods:updateInput(item, item2, item3) if element.count > 1 then ingredient.limit_count = lua_product.count / element.count end - ElementGui.addCellElementM(input_table, ingredient, self:classname().."=production-recipe-add=ID="..block_id.."="..element.name.."=", true, "tooltip.ingredient", ElementGui.color_button_add, index) + ElementGui.addCellElementM(input_table, ingredient, self:classname().."=production-recipe-add=ID="..current_block.."="..element.name.."=", true, "tooltip.ingredient", ElementGui.color_button_add, index) end end @@ -338,12 +336,11 @@ end function ProductionBlockTab.methods:updateOutput(item, item2, item3) Logging:debug(self:classname(), "updateOutput", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() Logging:debug(self:classname(), "model:", model) -- data - local blockId = globalGui.currentBlock or "new" + local current_block = User.getParameter("current_block") or "new" - local countRecipes = Model.countBlockRecipes(blockId) + local countRecipes = Model.countBlockRecipes(current_block) local info_scroll, output_scroll, input_scroll = self:getInfoPanel2() output_scroll.clear() @@ -352,7 +349,7 @@ function ProductionBlockTab.methods:updateOutput(item, item2, item3) -- production block result if countRecipes > 0 then - local element = model.blocks[blockId] + local element = model.blocks[current_block] -- ouput panel local output_table = ElementGui.addGuiTable(output_scroll,"output-table", ElementGui.getElementColumnNumber(50), "helmod_table_element") @@ -391,12 +388,8 @@ end function ProductionBlockTab.methods:updateData(item, item2, item3) Logging:debug("ProductionBlockTab", "updateData():", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() Logging:debug("ProductionBlockTab", "model:", model) - local block_id = "new" - if globalGui.currentBlock ~= nil then - block_id = globalGui.currentBlock - end + local current_block = User.getParameter("current_block") or "new" self:updateInfo(item, item2, item3) self:updateOutput(item, item2, item3) @@ -415,18 +408,18 @@ function ProductionBlockTab.methods:updateData(item, item2, item3) -- col recipe local color = "gray" local cell_recipe = ElementGui.addCell(recipe_table, "recipe-new") - if block_id == "new" then + if current_block == "new" then last_element = cell_recipe color = "orange" end local block_new = {name = "helmod_button_icon_robot_flat2" ,count = 0,localised_name = "helmod_result-panel.add-button-production-block"} ElementGui.addCellProduct(cell_recipe, block_new, self:classname().."=change-tab=ID=HMProductionBlockTab=new=", true, "tooltip.edit-block", color) - for _, block in spairs(model.blocks, function(t,a,b) if globalGui.order.ascendant then return t[b][globalGui.order.name] > t[a][globalGui.order.name] else return t[b][globalGui.order.name] < t[a][globalGui.order.name] end end) do + for _, block in spairs(model.blocks, function(t,a,b) return t[b]["index"] > t[a]["index"] end) do -- col recipe local color = "gray" local cell_recipe = ElementGui.addCell(recipe_table, "recipe"..block.id) - if block_id == block.id then + if current_block == block.id then last_element = cell_recipe color = "orange" end @@ -436,38 +429,31 @@ function ProductionBlockTab.methods:updateData(item, item2, item3) scroll_panel1.scroll_to_element(last_element) end - local countRecipes = Model.countBlockRecipes(block_id) + local countRecipes = Model.countBlockRecipes(current_block) -- production block result if countRecipes > 0 then - local element = model.blocks[block_id] + local elements = model.blocks[current_block] -- data panel local extra_cols = 0 - if Player.getSettings("display_data_col_index", true) then - extra_cols = extra_cols + 1 - end - if Player.getSettings("display_data_col_id", true) then - extra_cols = extra_cols + 1 - end - if Player.getSettings("display_data_col_name", true) then - extra_cols = extra_cols + 1 - end - if Player.getSettings("display_data_col_type", true) then - extra_cols = extra_cols + 1 + for _,parameter in pairs({"display_data_col_index","display_data_col_id","display_data_col_name","display_data_col_type"}) do + if User.getModGlobalSetting(parameter) then + extra_cols = extra_cols + 1 + end end local result_table = ElementGui.addGuiTable(scroll_panel2,"list-data",7 + extra_cols, "helmod_table-odd") result_table.vertical_centering = false self:addTableHeader(result_table) local last_element = nil - for _, recipe in spairs(model.blocks[block_id].recipes, function(t,a,b) if globalGui.order.ascendant then return t[b][globalGui.order.name] > t[a][globalGui.order.name] else return t[b][globalGui.order.name] < t[a][globalGui.order.name] end end) do - last_element = self:addTableRow(result_table, element, recipe) + for _, recipe in spairs(elements.recipes, function(t,a,b) return t[b]["index"] > t[a]["index"] end) do + last_element = self:addTableRow(result_table, elements, recipe) end - if globalGui["scroll_down"] then + if User.getParameter("scroll_down") then scroll_panel2.scroll_to_element(last_element) - globalGui["scroll_down"] = false + User.setParameter("scroll_down", false) end end @@ -510,28 +496,27 @@ end function ProductionBlockTab.methods:addTableRow(gui_table, block, recipe) Logging:debug("ProductionBlockTab", "addTableRow():", gui_table, block, recipe) local lua_recipe = RecipePrototype.load(recipe).native() - local display_cell_mod = Player.getSettings("display_cell_mod") -- col action local cell_action = ElementGui.addCell(gui_table, "action"..recipe.id, 2) - ElementGui.addGuiButton(cell_action, self:classname().."=production-recipe-up=ID="..block.id.."=", recipe.id, "helmod_button_icon_arrow_top_sm", nil, ({"tooltip.up-element", Player.getSettings("row_move_step")})) + ElementGui.addGuiButton(cell_action, self:classname().."=production-recipe-up=ID="..block.id.."=", recipe.id, "helmod_button_icon_arrow_top_sm", nil, ({"tooltip.up-element", User.getModSetting("row_move_step")})) ElementGui.addGuiButton(cell_action, self:classname().."=production-recipe-remove=ID="..block.id.."=", recipe.id, "helmod_button_icon_delete_sm_red", nil, ({"tooltip.remove-element"})) - ElementGui.addGuiButton(cell_action, self:classname().."=production-recipe-down=ID="..block.id.."=", recipe.id, "helmod_button_icon_arrow_down_sm", nil, ({"tooltip.down-element", Player.getSettings("row_move_step")})) + ElementGui.addGuiButton(cell_action, self:classname().."=production-recipe-down=ID="..block.id.."=", recipe.id, "helmod_button_icon_arrow_down_sm", nil, ({"tooltip.down-element", User.getModSetting("row_move_step")})) -- col index - if Player.getSettings("display_data_col_index", true) then + if User.getModGlobalSetting("display_data_col_index") then ElementGui.addGuiLabel(gui_table, "value_index"..recipe.id, recipe.index, "helmod_label_row_right_40") end -- col id - if Player.getSettings("display_data_col_id", true) then + if User.getModGlobalSetting("display_data_col_id") then ElementGui.addGuiLabel(gui_table, "value_id"..recipe.id, recipe.id) end -- col name - if Player.getSettings("display_data_col_name", true) then + if User.getModGlobalSetting("display_data_col_name") then ElementGui.addGuiLabel(gui_table, "value_name"..recipe.id, recipe.name) end -- col type - if Player.getSettings("display_data_col_type", true) then + if User.getModGlobalSetting("display_data_col_type") then ElementGui.addGuiLabel(gui_table, "value_type"..recipe.id, recipe.type) end -- col recipe @@ -566,7 +551,7 @@ function ProductionBlockTab.methods:addTableRow(gui_table, block, recipe) ElementGui.addCellFactory(cell_beacon, beacon, "HMRecipeEdition=OPEN=ID="..block.id.."="..recipe.id.."=", false, "tooltip.edit-recipe", "gray") -- products - local display_product_cols = Player.getSettings("display_product_cols") + local display_product_cols = User.getModSetting("display_product_cols") local cell_products = ElementGui.addCell(gui_table,"products_"..recipe.id, display_product_cols) for index, lua_product in pairs(RecipePrototype.getProducts()) do local product = Product.load(lua_product).new() @@ -578,7 +563,7 @@ function ProductionBlockTab.methods:addTableRow(gui_table, block, recipe) end -- ingredients - local display_ingredient_cols = Player.getSettings("display_ingredient_cols") + local display_ingredient_cols = User.getModSetting("display_ingredient_cols") local cell_ingredients = ElementGui.addCell(gui_table,"ingredients_"..recipe.id, display_ingredient_cols) for index, lua_ingredient in pairs(RecipePrototype.getIngredients(recipe.factory)) do local ingredient = Product.load(lua_ingredient).new() diff --git a/tab/ProductionLineTab.lua b/tab/ProductionLineTab.lua index cce34456..c0d165ea 100644 --- a/tab/ProductionLineTab.lua +++ b/tab/ProductionLineTab.lua @@ -42,7 +42,6 @@ end function ProductionLineTab.methods:updateInfo(item, item2, item3) Logging:debug(self:classname(), "updateInfo", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() Logging:debug(self:classname(), "model:", model) -- data local info_scroll, output_scroll, input_scroll = self:getInfoPanel() @@ -95,7 +94,6 @@ end function ProductionLineTab.methods:updateInput(item, item2, item3) Logging:debug(self:classname(), "updateInput", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() Logging:debug("ProductionBlockTab", "model:", model) -- data local info_scroll, output_scroll, input_scroll = self:getInfoPanel() @@ -128,8 +126,6 @@ end function ProductionLineTab.methods:updateOutput(item, item2, item3) Logging:debug(self:classname(), "updateOutput", item, item2, item3) local model = Model.getModel() - local globalGui = Player.getGlobalGui() - Logging:debug("ProductionBlockTab", "model:", model) -- data local info_scroll, output_scroll, input_scroll = self:getInfoPanel() output_scroll.clear() @@ -161,7 +157,6 @@ end -- function ProductionLineTab.methods:updateData(item, item2, item3) Logging:debug(self:classname(), "updateData():", item, item2, item3) - local globalGui = Player.getGlobalGui() local model = Model.getModel() self:updateInfo(item, item2, item3) @@ -173,25 +168,21 @@ function ProductionLineTab.methods:updateData(item, item2, item3) local countBlock = Model.countBlocks() if countBlock > 0 then - local globalSettings = Player.getGlobal("settings") -- data panel local extra_cols = 0 - if Player.getSettings("display_data_col_index", true) then - extra_cols = extra_cols + 1 - end - if Player.getSettings("display_data_col_id", true) then - extra_cols = extra_cols + 1 - end - if Player.getSettings("display_data_col_name", true) then - extra_cols = extra_cols + 1 + for _,parameter in pairs({"display_data_col_index","display_data_col_id","display_data_col_name"}) do + if User.getModGlobalSetting(parameter) then + extra_cols = extra_cols + 1 + end end + local result_table = ElementGui.addGuiTable(scrollPanel,"list-data",5 + extra_cols, "helmod_table-odd") result_table.vertical_centering = false self:addTableHeader(result_table) local i = 0 - for _, element in spairs(model.blocks, function(t,a,b) if globalGui.order.ascendant then return t[b][globalGui.order.name] > t[a][globalGui.order.name] else return t[b][globalGui.order.name] < t[a][globalGui.order.name] end end) do + for _, element in spairs(model.blocks, function(t,a,b) return t[b]["index"] > t[a]["index"] end) do self:addTableRow(result_table, element) end end @@ -232,16 +223,15 @@ function ProductionLineTab.methods:addTableRow(gui_table, block) Logging:debug(self:classname(), "addTableRow()", block) local model = Model.getModel() - local globalSettings = Player.getGlobal("settings") local unlinked = block.unlinked and true or false if block.index == 0 then unlinked = true end -- col action local cell_action = ElementGui.addCell(gui_table, "action"..block.id, 2) - ElementGui.addGuiButton(cell_action, self:classname().."=production-block-up=ID=", block.id, "helmod_button_icon_arrow_top_sm", nil, ({"tooltip.up-element", Player.getSettings("row_move_step")})) + ElementGui.addGuiButton(cell_action, self:classname().."=production-block-up=ID=", block.id, "helmod_button_icon_arrow_top_sm", nil, ({"tooltip.up-element", User.getModGlobalSetting("row_move_step")})) ElementGui.addGuiButton(cell_action, self:classname().."=production-block-remove=ID=", block.id, "helmod_button_icon_delete_sm_red", nil, ({"tooltip.remove-element"})) - ElementGui.addGuiButton(cell_action, self:classname().."=production-block-down=ID=", block.id, "helmod_button_icon_arrow_down_sm", nil, ({"tooltip.down-element", Player.getSettings("row_move_step")})) + ElementGui.addGuiButton(cell_action, self:classname().."=production-block-down=ID=", block.id, "helmod_button_icon_arrow_down_sm", nil, ({"tooltip.down-element", User.getModGlobalSetting("row_move_step")})) if unlinked then ElementGui.addGuiButton(cell_action, self:classname().."=production-block-unlink=ID=", block.id, "helmod_button_icon_unlink_sm", nil, ({"tooltip.unlink-element"})) else @@ -249,15 +239,15 @@ function ProductionLineTab.methods:addTableRow(gui_table, block) end -- col index - if Player.getSettings("display_data_col_index", true) then + if User.getModGlobalSetting("display_data_col_index") then ElementGui.addCellLabel(gui_table, "cell_index"..block.id, block.index) end -- col id - if Player.getSettings("display_data_col_id", true) then + if User.getModGlobalSetting("display_data_col_id") then ElementGui.addCellLabel(gui_table, "cell_id"..block.id, block.id) end -- col name - if Player.getSettings("display_data_col_name", true) then + if User.getModGlobalSetting("display_data_col_name") then ElementGui.addCellLabel(gui_table, "cell_name"..block.id, block.name) end @@ -270,7 +260,7 @@ function ProductionLineTab.methods:addTableRow(gui_table, block) ElementGui.addCellEnergy(cell_energy, block, self:classname().."=change-tab=ID=HMProductionBlockTab="..block.id.."=", true, "tooltip.edit-block", "gray") -- products - local display_product_cols = Player.getSettings("display_product_cols") + 1 + local display_product_cols = User.getModSetting("display_product_cols") + 1 local cell_products = ElementGui.addCell(gui_table,"products_"..block.id, display_product_cols) if block.products ~= nil then for index, product in pairs(block.products) do @@ -288,7 +278,7 @@ function ProductionLineTab.methods:addTableRow(gui_table, block) end end -- ingredients - local display_ingredient_cols = Player.getSettings("display_ingredient_cols") + 2 + local display_ingredient_cols = User.getModSetting("display_ingredient_cols") + 2 local cell_ingredients = ElementGui.addCell(gui_table,"ingredients_"..block.id, display_ingredient_cols) if block.ingredients ~= nil then for index, ingredient in pairs(block.ingredients) do diff --git a/tab/PropertiesTab.lua b/tab/PropertiesTab.lua index 9fff6696..afa4ef33 100644 --- a/tab/PropertiesTab.lua +++ b/tab/PropertiesTab.lua @@ -38,7 +38,7 @@ end -- @return boolean -- function PropertiesTab.methods:isVisible() - return Player.getSettings("properties_tab", true) + return User.getModGlobalSetting("properties_tab") end ------------------------------------------------------------------------------- @@ -111,16 +111,15 @@ end -- function PropertiesTab.methods:updateData() Logging:debug(self:classname(), "updateData()") - local globalGui = Player.getGlobalGui() -- data local resultPanel = self:getResultPanel({"helmod_result-panel.tab-title-properties"}) local listPanel = ElementGui.addGuiFrameH(resultPanel, "list-element", helmod_frame_style.hidden) local scrollPanel = self:getResultScrollPanel() - local globalPlayer = Player.getGlobal() - if globalPlayer["prototype-properties"] ~= nil and globalPlayer["prototype-properties"].name ~= nil then - local prototype_name = globalPlayer["prototype-properties"].name - local prototype_type = globalPlayer["prototype-properties"].type + local prototype_properties = User.getParameter("prototype_properties") + if prototype_properties ~= nil and prototype_properties.name ~= nil then + local prototype_name = prototype_properties.name + local prototype_type = prototype_properties.type local prototype = nil if prototype_type == "entity" then EntityPrototype.load(prototype_name) diff --git a/tab/PrototypeFiltersTab.lua b/tab/PrototypeFiltersTab.lua index 29387243..a0e96f4f 100644 --- a/tab/PrototypeFiltersTab.lua +++ b/tab/PrototypeFiltersTab.lua @@ -38,7 +38,7 @@ end -- @return boolean -- function PrototypeFiltersTab.methods:isVisible() - return Player.getSettings("prototype_filters_tab", true) + return User.getModGlobalSetting("prototype_filters_tab") end ------------------------------------------------------------------------------- @@ -139,7 +139,6 @@ end -- function PrototypeFiltersTab.methods:updateData() Logging:debug(self:classname(), "updateData()") - local globalGui = Player.getGlobalGui() -- data local scrollPanel = self:getResultScrollPanel() @@ -212,7 +211,6 @@ end -- function PrototypeFiltersTab.methods:onEvent(event, action, item, item2, item3) Logging:debug(self:classname(), "onEvent():", action, item, item2, item3) - local globalPlayer = Player.getGlobal() if action == "change-prototype-filter-type" and drop_down_prototype_filter_type ~= nil then local index = drop_down_prototype_filter_type.selected_index Logging:debug(self:classname(), "--> change-prototype-filter-type", prototype_filter_types[index]) diff --git a/tab/ResourceTab.lua b/tab/ResourceTab.lua index df3972c1..78ec1297 100644 --- a/tab/ResourceTab.lua +++ b/tab/ResourceTab.lua @@ -62,12 +62,12 @@ function ResourceTab.methods:addTableRow(guiTable, ingredient) local model = Model.getModel() -- col index - if Player.getSettings("display_data_col_index", true) then + if User.getModGlobalSetting("display_data_col_index") then local guiIndex = ElementGui.addGuiFrameH(guiTable,"index"..ingredient.name, helmod_frame_style.hidden) ElementGui.addGuiLabel(guiIndex, "index", ingredient.index, "helmod_label_row_right_40") end -- col name - if Player.getSettings("display_data_col_name", true) then + if User.getModGlobalSetting("display_data_col_name") then local guiName = ElementGui.addGuiFrameH(guiTable,"name"..ingredient.name, helmod_frame_style.hidden) ElementGui.addGuiLabel(guiName, "name_", ingredient.name) end @@ -93,16 +93,16 @@ end function ResourceTab.methods:updateData() Logging:debug(self:classname(), "updateData()") local model = Model.getModel() - local globalGui = Player.getGlobalGui() + local order = User.getParameter("order") -- data local scrollPanel = self:getResultScrollPanel({"helmod_result-panel.tab-title-energy"}) local extra_cols = 0 - if Player.getSettings("display_data_col_index", true) then + if User.getModGlobalSetting("display_data_col_index") then extra_cols = extra_cols + 1 end - if Player.getSettings("display_data_col_name", true) then + if User.getModGlobalSetting("display_data_col_name") then extra_cols = extra_cols + 1 end local resultTable = ElementGui.addGuiTable(scrollPanel,"table-resources",3 + extra_cols) @@ -110,7 +110,7 @@ function ResourceTab.methods:updateData() self:addTableHeader(resultTable) - for _, recipe in spairs(model.ingredients, function(t,a,b) if globalGui.order.ascendant then return t[b][globalGui.order.name] > t[a][globalGui.order.name] else return t[b][globalGui.order.name] < t[a][globalGui.order.name] end end) do + for _, recipe in spairs(model.ingredients, function(t,a,b) if order.ascendant then return t[b][order.name] > t[a][order.name] else return t[b][order.name] < t[a][order.name] end end) do self:addTableRow(resultTable, recipe) end end