Files
Puppeteer/gui/component/MultiEditor.lua
T
2026-10-30 16:27:05 +00:00

155 lines
5.7 KiB
Lua

PTMultiEditor = PTGuiComponent:Extend("puppeteer_multi_editor")
function PTMultiEditor:New()
local obj = setmetatable({}, self)
local frame = CreateFrame("Frame", self:GenerateName())
obj:SetHandle(frame)
obj:SetSimpleBackground(PTGuiComponent.BACKGROUND_DIALOG)
local title = PTGuiLib.Get("title", frame)
:SetSize(192, 36)
:SetPoint("CENTER", frame, "TOP")
:SetText("Edit Multi Binding")
obj:AddComponent("title", title)
local interface = PTGuiLib.Get("puppeteer_spell_bind_interface", frame)
:SetPoint("TOPLEFT", frame, "TOPLEFT", 5, -75)
:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -5, 60)
:SetLeftLabel("Controls")
obj:AddComponent("BindInterface", interface)
local margin = 120
local yPos = -30
local titleTooltip = {"The title of the Multi-menu, leave blank for no title",
"If there's no custom tooltip text set, this title will be", "used in the spells tooltip"}
local titleLabel = PTGuiLib.GetText(frame, "Menu Title")
:SetPoint("RIGHT", frame, "TOPLEFT", margin, yPos)
:ApplyTooltip(titleTooltip)
local titleEditbox = PTGuiLib.Get("editbox", frame)
:SetPoint("LEFT", titleLabel, "RIGHT", 5, 0)
:SetSize(140, 20)
:ApplyTooltip(titleTooltip)
:SetScript("OnTextChanged", function(self)
obj.Binding.Data.Title = self:GetText() ~= "" and self:GetText() or nil
end)
obj:AddComponent("TitleEditbox", titleEditbox)
yPos = yPos - 25
local titleColorTooltip = "Use a custom color for the title"
local titleColorLabel = PTGuiLib.GetText(frame, "Title Color")
:SetPoint("RIGHT", frame, "TOPLEFT", margin, yPos)
:ApplyTooltip(titleColorTooltip)
local titleColorCheckbox = PTGuiLib.Get("checkbox", frame)
:SetPoint("LEFT", titleColorLabel, "RIGHT", 5, 0)
:SetSize(20, 20)
:ApplyTooltip(titleColorTooltip)
:OnClick(function(self)
if self:GetChecked() then
local color = Puppeteer.BindTypeTooltipColors[obj.Binding.Type]
obj:GetTitleColorSelect():SetColorRGB(color[1], color[2], color[3])
obj.Binding.Data.TitleColor = {color[1], color[2], color[3]}
else
obj.Binding.Data.TitleColor = nil
end
obj:UpdateTitleTextColor()
end)
obj:AddComponent("TitleColorCheckbox", titleColorCheckbox)
local titleColorSelect = PTGuiLib.Get("color_select", frame)
:SetPoint("LEFT", titleColorCheckbox, "RIGHT", 5, 0)
:SetSize(30, 20)
:SetColorSelectHandler(function(self)
obj.Binding.Data.TitleColor = self:GetColor()
end)
obj:AddComponent("TitleColorSelect", titleColorSelect)
local multiKeepOpenTooltip = {"If enabled, the Multi-menu will stay open after clicking a binding",
"It will still close if a different menu is triggered"}
local multiKeepOpenLabel = PTGuiLib.GetText(frame, "Keep Open")
:SetPoint("LEFT", titleEditbox, "RIGHT", 30, 0)
:ApplyTooltip(multiKeepOpenTooltip)
local multiKeepOpenCheckbox = PTGuiLib.Get("checkbox", frame)
:SetPoint("LEFT", multiKeepOpenLabel, "RIGHT", 5, 0)
:SetSize(20, 20)
:ApplyTooltip(multiKeepOpenTooltip)
:OnClick(function(self)
if self:GetChecked() then
obj.Binding.Data.KeepOpen = true
else
obj.Binding.Data.KeepOpen = nil
end
end)
obj:AddComponent("KeepOpenCheckbox", multiKeepOpenCheckbox)
local done = PTGuiLib.Get("button", frame)
:SetPoint("BOTTOM", frame, "BOTTOM", 0, 5)
:SetSize(200, 20)
:SetText("Done")
:OnClick(function()
obj:Dispose()
end)
local add = PTGuiLib.Get("button", frame)
:SetPoint("BOTTOM", done, "TOP", 0, 5)
:SetSize(200, 20)
:SetText("Add Binding")
:OnClick(function()
if table.getn(interface.Bindings) >= 20 then
Puppeteer.Info("Cannot add any more bindings!")
return
end
local binding = {}
table.insert(interface.Bindings, binding)
local line = interface:AddSpellLine()
line:SetMode(PTSpellLine.MODE_ORDERED)
line:SetBinding(binding)
interface:UpdateLinePositions()
end)
return obj
end
function PTMultiEditor:OnAcquire()
self.super.OnAcquire(self)
self:SetSize(425, 360)
self:GetBindInterface():GetScrollFrame():FixNextUpdate()
end
function PTMultiEditor:OnDispose()
self.super.OnDispose(self)
self:GetBindInterface():ClearSpellLines()
end
PTMultiEditor:CreateGetter("BindInterface")
PTMultiEditor:CreateGetter("TitleEditbox")
PTMultiEditor:CreateGetter("TitleColorCheckbox")
PTMultiEditor:CreateGetter("TitleColorSelect")
PTMultiEditor:CreateGetter("KeepOpenCheckbox")
PTMultiEditor.UpdateTitleTextColor = PTGuiUtil.CreateColorUpdater(
PTMultiEditor.GetTitleColorCheckbox,
PTMultiEditor.GetTitleColorSelect,
function(self) return self.Binding.Data.TitleColor end)
function PTMultiEditor:SetBinding(multiBinding)
self.Binding = multiBinding
local interface = self:GetBindInterface()
if not multiBinding.Data then
multiBinding.Data = {Bindings = {}}
end
interface:SetBindings(multiBinding.Data.Bindings)
for i, binding in ipairs(multiBinding.Data.Bindings) do
local line = interface:AddSpellLine(i, "")
line:SetMode(PTSpellLine.MODE_ORDERED)
line:SetBinding(binding)
end
self:GetTitleEditbox():SetText(multiBinding.Data.Title or "")
self:UpdateTitleTextColor()
self:GetKeepOpenCheckbox():SetChecked(multiBinding.Data.KeepOpen)
end
PTGuiLib.RegisterComponent(PTMultiEditor)