initial commit
This commit is contained in:
254
Core/DevToolsWindow.lua
Normal file
254
Core/DevToolsWindow.lua
Normal file
@@ -0,0 +1,254 @@
|
||||
local ADDON_NAME = "HailMaryGuildTools"
|
||||
local HMGT = _G[ADDON_NAME]
|
||||
if not HMGT then return end
|
||||
|
||||
local L = HMGT.L or LibStub("AceLocale-3.0"):GetLocale(ADDON_NAME)
|
||||
local AceGUI = LibStub("AceGUI-3.0", true)
|
||||
if not AceGUI then return end
|
||||
|
||||
local function GetOrderedLevels()
|
||||
return { "error", "trace" }
|
||||
end
|
||||
|
||||
local function GetOrderedScopes()
|
||||
local values = HMGT:GetDevToolsScopeOptions() or {}
|
||||
local scopes = { "ALL" }
|
||||
for scope in pairs(values) do
|
||||
if scope ~= "ALL" then
|
||||
scopes[#scopes + 1] = scope
|
||||
end
|
||||
end
|
||||
table.sort(scopes, function(a, b)
|
||||
if a == "ALL" then return true end
|
||||
if b == "ALL" then return false end
|
||||
return tostring(values[a] or a) < tostring(values[b] or b)
|
||||
end)
|
||||
return scopes, values
|
||||
end
|
||||
|
||||
local function SetFilterButtonText(buttonWidget, prefix, valueLabel)
|
||||
if not buttonWidget then
|
||||
return
|
||||
end
|
||||
buttonWidget:SetText(string.format("%s: %s", tostring(prefix or ""), tostring(valueLabel or "")))
|
||||
end
|
||||
|
||||
local function AdvanceLevel(step)
|
||||
local levels = GetOrderedLevels()
|
||||
local current = HMGT:GetConfiguredDevToolsLevel()
|
||||
local nextIndex = 1
|
||||
for index, value in ipairs(levels) do
|
||||
if value == current then
|
||||
nextIndex = index + (step or 1)
|
||||
break
|
||||
end
|
||||
end
|
||||
if nextIndex < 1 then
|
||||
nextIndex = #levels
|
||||
elseif nextIndex > #levels then
|
||||
nextIndex = 1
|
||||
end
|
||||
HMGT:GetDevToolsSettings().level = levels[nextIndex]
|
||||
HMGT:RefreshDevToolsWindow()
|
||||
end
|
||||
|
||||
local function AdvanceScope(step)
|
||||
local scopes = GetOrderedScopes()
|
||||
local current = HMGT:GetDevToolsSettings().scope or "ALL"
|
||||
local nextIndex = 1
|
||||
for index, value in ipairs(scopes) do
|
||||
if value == current then
|
||||
nextIndex = index + (step or 1)
|
||||
break
|
||||
end
|
||||
end
|
||||
if nextIndex < 1 then
|
||||
nextIndex = #scopes
|
||||
elseif nextIndex > #scopes then
|
||||
nextIndex = 1
|
||||
end
|
||||
HMGT:GetDevToolsSettings().scope = scopes[nextIndex]
|
||||
HMGT:RefreshDevToolsWindow()
|
||||
end
|
||||
|
||||
function HMGT:EnsureDevToolsWindow()
|
||||
if self.devToolsWindow then
|
||||
return self.devToolsWindow
|
||||
end
|
||||
|
||||
local settings = self:GetDevToolsSettings()
|
||||
local window = self:CreateAceWindow("devTools", {
|
||||
title = L["DEVTOOLS_WINDOW_TITLE"] or "HMGT Developer Tools",
|
||||
statusText = L["DEVTOOLS_WINDOW_HINT"] or "Structured developer events for the current session",
|
||||
statusTable = settings.window,
|
||||
width = settings.window.width or 920,
|
||||
height = settings.window.height or 420,
|
||||
minimizable = true,
|
||||
minimizedHeight = 64,
|
||||
})
|
||||
if not window then
|
||||
return nil
|
||||
end
|
||||
|
||||
local content = window:GetContent()
|
||||
|
||||
local clearButton = AceGUI:Create("Button")
|
||||
clearButton:SetText(L["OPT_DEVTOOLS_CLEAR"] or "Clear developer log")
|
||||
clearButton:SetWidth(140)
|
||||
clearButton:SetCallback("OnClick", function()
|
||||
HMGT:ClearDevToolsLog()
|
||||
end)
|
||||
clearButton.frame:SetParent(content)
|
||||
clearButton.frame:ClearAllPoints()
|
||||
clearButton.frame:SetPoint("TOPRIGHT", content, "TOPRIGHT", 0, -2)
|
||||
clearButton.frame:Show()
|
||||
window.clearButton = clearButton
|
||||
window:RegisterMinimizeTarget(clearButton)
|
||||
|
||||
local selectButton = AceGUI:Create("Button")
|
||||
selectButton:SetText(L["OPT_DEVTOOLS_SELECT_ALL"] or "Select all")
|
||||
selectButton:SetWidth(120)
|
||||
selectButton:SetCallback("OnClick", function()
|
||||
if window.editBox then
|
||||
window.editBox:SetFocus()
|
||||
window.editBox:HighlightText(0)
|
||||
end
|
||||
end)
|
||||
selectButton.frame:SetParent(content)
|
||||
selectButton.frame:ClearAllPoints()
|
||||
selectButton.frame:SetPoint("TOPRIGHT", clearButton.frame, "TOPLEFT", -6, 0)
|
||||
selectButton.frame:Show()
|
||||
window.selectButton = selectButton
|
||||
window:RegisterMinimizeTarget(selectButton)
|
||||
|
||||
local levelFilter = AceGUI:Create("Button")
|
||||
levelFilter:SetWidth(150)
|
||||
levelFilter:SetCallback("OnClick", function()
|
||||
AdvanceLevel(1)
|
||||
end)
|
||||
levelFilter.frame:SetParent(content)
|
||||
levelFilter.frame:ClearAllPoints()
|
||||
levelFilter.frame:SetPoint("TOPLEFT", content, "TOPLEFT", 0, 0)
|
||||
levelFilter.frame:Show()
|
||||
window.levelFilter = levelFilter
|
||||
window:RegisterMinimizeTarget(levelFilter)
|
||||
|
||||
local scopeFilter = AceGUI:Create("Button")
|
||||
scopeFilter:SetWidth(200)
|
||||
scopeFilter:SetCallback("OnClick", function()
|
||||
AdvanceScope(1)
|
||||
end)
|
||||
scopeFilter.frame:SetParent(content)
|
||||
scopeFilter.frame:ClearAllPoints()
|
||||
scopeFilter.frame:SetPoint("TOPLEFT", levelFilter.frame, "TOPRIGHT", 8, 0)
|
||||
scopeFilter.frame:Show()
|
||||
window.scopeFilter = scopeFilter
|
||||
window:RegisterMinimizeTarget(scopeFilter)
|
||||
|
||||
local logWidget = AceGUI:Create("MultiLineEditBox")
|
||||
logWidget:SetLabel("")
|
||||
logWidget:DisableButton(true)
|
||||
logWidget:SetNumLines(20)
|
||||
logWidget:SetText("")
|
||||
logWidget.frame:SetParent(content)
|
||||
logWidget.frame:ClearAllPoints()
|
||||
logWidget.frame:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -54)
|
||||
logWidget.frame:SetPoint("BOTTOMRIGHT", content, "BOTTOMRIGHT", 0, 0)
|
||||
logWidget.frame:Show()
|
||||
logWidget.editBox:SetScript("OnKeyDown", function(selfBox, key)
|
||||
if IsControlKeyDown() and (key == "A" or key == "a") then
|
||||
selfBox:HighlightText(0)
|
||||
end
|
||||
end)
|
||||
window.logWidget = logWidget
|
||||
window.editBox = logWidget.editBox
|
||||
window:RegisterMinimizeTarget(logWidget)
|
||||
|
||||
self.devToolsWindow = window
|
||||
window:SetMinimized(settings.window.minimized)
|
||||
return window
|
||||
end
|
||||
|
||||
function HMGT:RefreshDevToolsWindow()
|
||||
local window = self:EnsureDevToolsWindow()
|
||||
if not window or not window.editBox or not window.logWidget then
|
||||
return
|
||||
end
|
||||
|
||||
local levelOptions = self:GetDevToolsLevelOptions()
|
||||
SetFilterButtonText(window.levelFilter, L["OPT_DEVTOOLS_LEVEL"] or "Capture level", levelOptions[self:GetConfiguredDevToolsLevel()])
|
||||
|
||||
local scopeValues = self:GetDevToolsScopeOptions()
|
||||
local currentScope = self:GetDevToolsSettings().scope or "ALL"
|
||||
SetFilterButtonText(window.scopeFilter, L["OPT_DEVTOOLS_SCOPE"] or "Scope", scopeValues[currentScope] or currentScope)
|
||||
|
||||
local text = table.concat(self:GetFilteredDevToolsLines(), "\n")
|
||||
window.logWidget:SetText(text)
|
||||
window.editBox:SetCursorPosition(window.editBox:GetNumLetters())
|
||||
end
|
||||
|
||||
function HMGT:OpenDevToolsWindow()
|
||||
if not self:IsDevToolsEnabled() then
|
||||
self:Print(L["OPT_DEVTOOLS_DISABLED"] or "HMGT: developer tools are not enabled.")
|
||||
return
|
||||
end
|
||||
local window = self:EnsureDevToolsWindow()
|
||||
if not window then
|
||||
return
|
||||
end
|
||||
window:Show()
|
||||
window:Raise()
|
||||
self:RefreshDevToolsWindow()
|
||||
end
|
||||
|
||||
function HMGT:ToggleDevToolsWindow()
|
||||
if not self:IsDevToolsEnabled() then
|
||||
self:Print(L["OPT_DEVTOOLS_DISABLED"] or "HMGT: developer tools are not enabled.")
|
||||
return
|
||||
end
|
||||
local window = self:EnsureDevToolsWindow()
|
||||
if not window then
|
||||
return
|
||||
end
|
||||
if window:IsShown() then
|
||||
window:Hide()
|
||||
return
|
||||
end
|
||||
window:Show()
|
||||
window:Raise()
|
||||
self:RefreshDevToolsWindow()
|
||||
end
|
||||
|
||||
function HMGT:UpdateDevToolsWindowVisibility()
|
||||
local window = self.devToolsWindow
|
||||
if not window then
|
||||
return
|
||||
end
|
||||
if not self:IsDevToolsEnabled() then
|
||||
window:Hide()
|
||||
return
|
||||
end
|
||||
if window:IsShown() then
|
||||
self:RefreshDevToolsWindow()
|
||||
end
|
||||
end
|
||||
|
||||
function HMGT:RefreshDebugWindow()
|
||||
self:RefreshDevToolsWindow()
|
||||
end
|
||||
|
||||
function HMGT:UpdateDebugWindowVisibility()
|
||||
self:UpdateDevToolsWindowVisibility()
|
||||
end
|
||||
|
||||
function HMGT:ClearDebugLog()
|
||||
self:ClearDevToolsLog()
|
||||
end
|
||||
|
||||
function HMGT:ToggleDebugWindowShortcut()
|
||||
self:ToggleDevToolsWindow()
|
||||
end
|
||||
|
||||
function HMGT:DumpDebugLog(maxLines)
|
||||
self:DumpDevToolsLog(maxLines)
|
||||
end
|
||||
Reference in New Issue
Block a user