155 lines
5.7 KiB
Lua
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) |