You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
5.8 KiB

MoveIt.GUI.Options = {}
function MoveIt.GUI.Options:Create(container)
self.editboxFrameName = AceGUI:Create("EditBox")
self.editboxFrameName:SetLabel("Add Frame:")
self.editboxFrameName:SetRelativeWidth(0.5)
--[[self.editboxFrameName:SetCallback("OnTextChanged", function()
local text = self.editboxFrameName:GetText()
if text ~= "" then
local searchResults = MoveIt:FrameSearch(text)
if string.len(searchResults) > 100 then text = string.sub(searchResults, 1, 97) .. "..." end
self.labelSearchResults:SetText(searchResults)
end
end)]]
self.editboxFrameName:SetCallback("OnEnterPressed", function(_, _, value)
self.buttonAddFrame:SetDisabled(true)
if value == "" then return end
if MoveIt.db.profile.frames[value] ~= nil then
MoveIt.GUI:StatusMessage("Frame '" .. value .. "' is already in the list!")
return
end
if not MoveIt:IsValidFrame(value) then
MoveIt.GUI:StatusMessage("No valid frame found named '" .. value .. "'")
return
end
self.buttonAddFrame:SetDisabled(false)
end)
container:AddChild(self.editboxFrameName)
self.buttonAddFrame = AceGUI:Create("Button")
self.buttonAddFrame:SetText("Add Frame")
self.buttonAddFrame:SetRelativeWidth(0.2)
self.buttonAddFrame:SetDisabled(true)
self.buttonAddFrame:SetCallback("OnClick", function() self:OnAddFrame() end)
container:AddChild(self.buttonAddFrame)
self.buttonFramestack = AceGUI:Create("Button")
self.buttonFramestack:SetText("Toggle Frame Stack")
self.buttonFramestack:SetRelativeWidth(0.3)
self.buttonFramestack:SetCallback("OnClick", function()
UIParentLoadAddOn("Blizzard_DebugTools")
FrameStackTooltip_Toggle(true, true, false)
end)
container:AddChild(self.buttonFramestack)
self.labelSearchResults = AceGUI:Create("Label")
self.labelSearchResults:SetRelativeWidth(0.5)
container:AddChild(self.labelSearchResults)
self.checkboxOverlay = AceGUI:Create("CheckBox")
self.checkboxOverlay:SetType("checkbox")
self.checkboxOverlay:SetLabel("Show Overlay")
self.checkboxOverlay:SetValue(true)
self.checkboxOverlay:SetRelativeWidth(0.2)
self.checkboxOverlay:SetCallback("OnValueChanged",
function(_, _, value)
if value == false then MoveIt.Overlay:UpdateOverlay(nil) else MoveIt.Overlay:UpdateOverlay(self.selectedFrame) end
end)
container:AddChild(self.checkboxOverlay)
self.buttonReloadUI = AceGUI:Create("Button")
self.buttonReloadUI:SetText("Reload UI")
self.buttonReloadUI:SetRelativeWidth(0.3)
self.buttonReloadUI:SetCallback("OnClick", function() ReloadUI() end)
container:AddChild(self.buttonReloadUI)
MoveIt.GUI:CreateDivider(container)
self.treegroupFrameList = AceGUI:Create("TreeGroup")
self.treegroupFrameList:SetRelativeWidth(1)
self.treegroupFrameList:SetLayout("Flow")
self.treegroupFrameList:SetFullHeight(true)
self.treegroupFrameList:SetCallback("OnGroupSelected", function (_, _, value) self:OnFrameSelected(value) end)
MoveIt.GUI.FrameSettings:Create(self.treegroupFrameList)
self.treegroupFrameList:SetTree(self:GetFrameTree())
container:AddChild(self.treegroupFrameList)
self.selectedFrame = nil
end
function MoveIt.GUI.Options:OnFrameSelected(value)
self.selectedFrame = value
local handle = MoveIt:GetFrameHandle(value)
if handle == nil then
MoveIt.GUI:StatusMessage("WARNING: Frame no longer exists, editing disabled")
MoveIt.GUI.FrameSettings.buttonRemoveFrame:SetDisabled(false)
MoveIt.Overlay:UpdateOverlay()
return
end
MoveIt.Overlay:UpdateOverlay(value)
MoveIt.GUI.FrameSettings:Update(self.selectedFrame)
self:ShowProtectedWarning(handle)
end
function MoveIt.GUI.Options:GetFrameTree()
if MoveIt.db.profile.frames == nil then return nil end
local tree = {}
for i, _ in pairs(MoveIt.db.profile.frames) do
table.insert(tree, { value = i, text = i })
end
table.sort(tree, function(a, b) return a.value < b.value end)
return tree
end
function MoveIt.GUI.Options:OnAddFrame()
local frameName = self.editboxFrameName:GetText()
local handle = MoveIt:GetFrameHandle(frameName)
frameName = MoveIt:GetFrameName(handle)
if MoveIt.db.profile.frames == nil then MoveIt.db.profile.frames = {} end
if MoveIt.db.profile.frames[frameName] == nil then
MoveIt.db.profile.frames[frameName] = {}
MoveIt.originalSettings[frameName] = {}
for k, v in pairs(MoveIt.Modules) do
MoveIt.originalSettings[frameName][k] = v:GetOriginalSettings(frameName)
MoveIt:SetFrameSettings(frameName, k, v:GetOriginalSettings(frameName))
end
self.treegroupFrameList:SetTree(self:GetFrameTree())
self.treegroupFrameList:SelectByValue(frameName)
self:OnFrameSelected(frameName)
self.editboxFrameName:SetText("")
MoveIt:UpdateHooks()
else
self.windowMain:SetStatusText("Frame '" .. frameName .. "' is already in the list!")
end
end
function MoveIt.GUI.Options:OnRemoveFrame()
if MoveIt:GetFrameHandle(self.selectedFrame) == nil then
MoveIt:DeleteSettings(self.selectedFrame)
MoveIt.GUI.FrameSettings:Update()
self.selectedFrame = nil
self.treegroupFrameList:SetTree(self:GetFrameTree())
return
end
for k, _ in pairs(MoveIt.Modules) do
pcall(function() MoveIt.Modules[k]:Revert(self.selectedFrame) end)
end
MoveIt:DeleteSettings(self.selectedFrame)
self.selectedFrame = nil
self.treegroupFrameList:SetTree(self:GetFrameTree())
MoveIt.GUI.FrameSettings:Update()
MoveIt:UpdateHooks()
MoveIt.Overlay:UpdateOverlay(nil)
end
function MoveIt.GUI.Options:ShowProtectedWarning(handle)
local isProtected, isProtectedExplicitly = handle:IsProtected()
if isProtectedExplicitly then MoveIt.GUI.windowMain:SetStatusText("WARNING: Frame is protected and can't be modified during combat") else MoveIt.GUI.windowMain:SetStatusText("") end
end