160 lines
6.7 KiB
Lua
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 |