160 lines
6.7 KiB
Lua

-------------------------------------------------------------------------------
---Class to build pin tab dialog
---@class RichTextPanel
RichTextPanel = newclass(Form)
-------------------------------------------------------------------------------
---On initialization
function RichTextPanel:onInit()
self.panelCaption = ({"helmod_panel.richtext"})
self.otherClose = false
end
-------------------------------------------------------------------------------
---On Style
---@param styles table
---@param width_main number
---@param height_main number
function RichTextPanel:onStyle(styles, width_main, height_main)
styles.flow_panel = {
minimal_width = 322,
maximal_width = 322,
minimal_height = 300,
maximal_height = height_main
}
end
------------------------------------------------------------------------------
---Get Button Sprites
---@return string, string
function RichTextPanel:getButtonSprites()
return defines.sprites.text_block.white,defines.sprites.text_block.black
end
-------------------------------------------------------------------------------
---Is tool
---@return boolean
function RichTextPanel:isTool()
return true
end
-------------------------------------------------------------------------------
---On update
---@param event LuaEvent
function RichTextPanel:onUpdate(event)
self:updateHeader(event)
self:updateInput(event)
self:updateHistory(event)
end
-------------------------------------------------------------------------------
---Update information
---@param event LuaEvent
function RichTextPanel:updateHeader(event)
local header_panel = self:getTopPanel()
header_panel.clear()
local element_list = {}
table.insert(element_list, {type="item", localized_name={"helmod_common.item"}})
table.insert(element_list, {type="fluid", localized_name={"helmod_common.fluid"}})
table.insert(element_list, {type="recipe", localized_name={"helmod_common.recipe"}})
table.insert(element_list, {type="entity", localized_name={"helmod_common.entity"}})
table.insert(element_list, {type="technology", localized_name={"helmod_common.technology"}})
local selectors = GuiElement.add(header_panel, GuiTable("selection"):column(#element_list))
selectors.style.horizontal_spacing = 10
for _,element in pairs(element_list) do
GuiElement.add(selectors, GuiLabel("label", element.type):caption(element.localized_name))
end
for _,element in pairs(element_list) do
GuiElement.add(selectors, GuiButtonSelectSprite(self.classname, "element-select", element.type):choose(element.type):color("gray"):tooltip({"helmod_button.choose-element"}))
end
end
-------------------------------------------------------------------------------
---Update input
---@param event LuaEvent
function RichTextPanel:updateInput(event)
local input_panel = self:getFramePanel("input-panel")
local richtext_text = User.getParameter("richtext_text")
input_panel.clear()
---rich text
local text_panel = GuiElement.add(input_panel, GuiTable("text_panel"):column(3))
text_panel.style.cell_padding = 3
local text_field = GuiElement.add(text_panel, GuiTextField(self.classname, "input-text", "onchange"):text(richtext_text))
text_field.style.width = 200
text_field.lose_focus_on_confirm = false
text_field.focus()
GuiElement.add(text_panel, GuiButton(self.classname, "richtext-clear"):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_actived_red"):tooltip({"helmod_button.clear"}))
GuiElement.add(text_panel, GuiButton(self.classname, "richtext-save"):sprite("menu", defines.sprites.save.black, defines.sprites.save.black):style("helmod_button_menu_sm_actived_green"):tooltip({"helmod_button.save"}))
end
-------------------------------------------------------------------------------
---Update history
---@param event LuaEvent
function RichTextPanel:updateHistory(event)
local history_panel = self:getScrollPanel("history-panel")
local richtext_text = User.getParameter("richtext_text")
history_panel.clear()
history_panel.style.vertically_stretchable = true
---history
local richtext_history = User.getParameter("richtext_history") or {}
local table_panel = GuiElement.add(history_panel, GuiTable("table_panel"):column(2))
for index,value in pairs(richtext_history) do
local button = GuiElement.add(table_panel, GuiButton(self.classname, "richtext-history-use", index):caption(value):style("helmod_button_left"):tooltip({"helmod_button.use"}))
button.style.width = 250
GuiElement.add(table_panel, GuiButton(self.classname, "richtext-history-delete", index):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_actived_red"):tooltip({"helmod_button.delete"}))
end
end
-------------------------------------------------------------------------------
---On event
---@param event LuaEvent
function RichTextPanel:onEvent(event)
if event.action == "element-select" then
local element_type = event.element.elem_type
local element_name = event.element.elem_value
event.element.elem_value = nil
if element_name ~= nil then
local richtext_text = User.getParameter("richtext_text") or ""
richtext_text = string.format("%s[%s=%s]",richtext_text, element_type, element_name)
User.setParameter("richtext_text", richtext_text)
self:onUpdate(event)
end
end
if event.action == "input-text" then
User.setParameter("richtext_text", event.element.text)
end
if event.action == "richtext-clear" then
User.setParameter("richtext_text", "")
self:onUpdate(event)
end
if event.action == "richtext-save" then
local text_field_name = table.concat({self.classname, "input-text", "onchange"},"=")
if event.element.parent ~= nil and event.element.parent[text_field_name] ~= nil then
local richtext_history = User.getParameter("richtext_history") or {}
local richtext_text = event.element.parent[text_field_name].text
table.insert(richtext_history, richtext_text)
User.setParameter("richtext_history", richtext_history)
self:onUpdate(event)
end
end
if event.action == "richtext-history-use" then
local richtext_history = User.getParameter("richtext_history")
local index = tonumber(event.item1)
if richtext_history ~= nil and richtext_history[index] ~= nil then
User.setParameter("richtext_text", richtext_history[index])
self:onUpdate(event)
end
end
if event.action == "richtext-history-delete" then
local richtext_history = User.getParameter("richtext_history")
local index = tonumber(event.item1)
if richtext_history ~= nil and richtext_history[index] ~= nil then
table.remove(richtext_history, index)
User.setParameter("richtext_history", richtext_history)
self:onUpdate(event)
end
end
end