159 lines
5.2 KiB
Lua
159 lines
5.2 KiB
Lua
-------------------------------------------------------------------------------
|
|
---Class to build ArrangeModels panel
|
|
---@class Form
|
|
ArrangeModels = newclass(Form)
|
|
|
|
-------------------------------------------------------------------------------
|
|
---Initialization
|
|
function ArrangeModels:onInit()
|
|
self.panelCaption = ({"helmod_panel.arrange-models"})
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On Bind Dispatcher
|
|
function ArrangeModels:onBind()
|
|
Dispatcher:bind("on_gui_location", self, self.updateLocation)
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On event
|
|
---@param event LuaEvent
|
|
function ArrangeModels:onEvent(event)
|
|
|
|
end
|
|
|
|
local elements = nil
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On Style
|
|
---@param styles table
|
|
---@param width_main number
|
|
---@param height_main number
|
|
function ArrangeModels:onStyle(styles, width_main, height_main)
|
|
styles.flow_panel = {
|
|
minimal_width = 50,
|
|
maximal_width = width_main,
|
|
minimal_height = 100,
|
|
maximal_height = 100
|
|
}
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On update
|
|
---@param event LuaEvent
|
|
function ArrangeModels:onUpdate(event)
|
|
local parent_panel = self:getPanel()
|
|
if elements == nil then
|
|
elements = {}
|
|
local models = Model.getModels()
|
|
local index = 0
|
|
local table_index = GuiElement.add(parent_panel, GuiTable("table_index"):column(GuiElement.getIndexColumnNumber()):style("helmod_table_list"))
|
|
for _,model in pairs(models) do
|
|
self:addModelButton(table_index, model, index)
|
|
index = index + 1
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On update
|
|
---@param index number
|
|
---@param model table
|
|
function ArrangeModels:addModelButton(parent_panel, model, index)
|
|
local element = Model.firstRecipe(model.blocks)
|
|
local button
|
|
if element ~= nil then
|
|
button = GuiElement.add(parent_panel, GuiButtonSelectSprite(self.classname, "move-item", model.id, index):sprite(element.type, element.name):tooltip(tooltip):color())
|
|
else
|
|
button = GuiElement.add(parent_panel, GuiButton(self.classname, "move-item", model.id, index):sprite("menu", defines.sprites.status_help.black, defines.sprites.status_help.black):style("helmod_button_menu"))
|
|
button.style.width = 36
|
|
--button.style.height = 36
|
|
end
|
|
button.style.padding = 0
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On update
|
|
---@param index number
|
|
---@param model table
|
|
function ArrangeModels:addModelFrame(index, model)
|
|
local parent_panel = self:getPanel()
|
|
local element = Model.firstRecipe(model.blocks)
|
|
local screen = Player.getGui("screen")
|
|
|
|
local flow = GuiElement.add(screen, GuiFrameV(self.classname, "flow", model.id):style("frame"))
|
|
flow.style.padding = -4
|
|
flow.style.margin = 0
|
|
flow.style.size = 36
|
|
|
|
local position = parent_panel.location
|
|
position.x = position.x + 15 + index * 38
|
|
position.y = position.y + 50
|
|
flow.location = position
|
|
|
|
local tooltip = GuiTooltipModel("tooltip.info-model"):element(model)
|
|
|
|
local grip = GuiElement.add(flow, GuiEmptyWidget(self.classname, "grip", model.id):tooltip(tooltip))
|
|
grip.drag_target = flow
|
|
grip.style.size = 36
|
|
--button.drag_target = flow
|
|
|
|
local button
|
|
if element ~= nil then
|
|
button = GuiElement.add(grip, GuiButtonSelectSprite(self.classname, "move-flow", model.id):sprite(element.type, element.name):tooltip(tooltip):color())
|
|
else
|
|
button = GuiElement.add(grip, GuiButton(self.classname, "move-flow", model.id):sprite("menu", defines.sprites.status_help.black, defines.sprites.status_help.black):style("helmod_button_menu"))
|
|
button.style.width = 36
|
|
--button.style.height = 36
|
|
end
|
|
button.style.padding = 0
|
|
button.ignored_by_interaction = true
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On update
|
|
---@param event LuaEvent
|
|
function ArrangeModels:updateLocation(event)
|
|
if elements == nil then return end
|
|
local frame = event.element
|
|
if frame.name ~= self.classname and frame.name:find(self.classname) then
|
|
end
|
|
if frame.name == self.classname then
|
|
for _, frame in pairs(elements) do
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On close dialog
|
|
function ArrangeModels:onClose()
|
|
local screen = Player.getGui("screen")
|
|
for _, frame in pairs(screen.children) do
|
|
if frame.name:find(self.classname) then frame.destroy() end
|
|
end
|
|
elements = nil
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On close dialog
|
|
function ArrangeModels:Clean()
|
|
local screen = Player.getGui("screen")
|
|
for _, frame in pairs(screen.children) do
|
|
if frame.name:find(string.format("%s-%s", self.classname, "flow")) then frame.destroy() end
|
|
end
|
|
elements = nil
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
---On event
|
|
---@param event LuaEvent
|
|
function ArrangeModels:onEvent(event)
|
|
local models = Model.getModels()
|
|
if event.action == "move-item" then
|
|
self:Clean()
|
|
local model_id = event.item1
|
|
local model = models[model_id]
|
|
local index = event.item2
|
|
self:addModelFrame(index, model)
|
|
end
|
|
end |