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