Revamp options UI: dropdown-based class picker and per-character override tab

Replaces the 21-tab class sidebar with a single Classes tab driven by a
dropdown plus Hide All/Show All bulk actions. Reworks the old Profiles tab
into "Character Override": a single toggle that lets a character's frame
hide/show choices bypass its class settings, backed by a new
characterOverrides table alongside the existing profile data. Adds an
empty About tab, restyles sidebar tabs gold/white, and drops the unused
subtitle line.
This commit is contained in:
2026-07-07 23:23:25 +02:00
parent 920b1b234b
commit ea4849fc10
2 changed files with 285 additions and 312 deletions
+86 -5
View File
@@ -181,6 +181,75 @@ end
HideCoA.DeleteProfile = DeleteProfile
local function EnsureCharacterOverride(charKey)
if not HideCoADB.characterOverrides then
HideCoADB.characterOverrides = {}
end
local override = HideCoADB.characterOverrides[charKey]
if not override then
override = { enabled = false, frameSettings = {} }
HideCoADB.characterOverrides[charKey] = override
end
for _, frameName in ipairs(HideCoA.FRAMES) do
if override.frameSettings[frameName] == nil then
override.frameSettings[frameName] = true
end
end
return override
end
local function GetCharacterOverride()
return EnsureCharacterOverride(GetCharacterKey())
end
HideCoA.GetCharacterOverride = GetCharacterOverride
local function SetCharacterOverrideEnabled(enabled)
GetCharacterOverride().enabled = enabled
HideCoA.ApplySetting()
end
HideCoA.SetCharacterOverrideEnabled = SetCharacterOverrideEnabled
local function SetCharacterOverrideFrameHidden(frameName, hide)
GetCharacterOverride().frameSettings[frameName] = hide
HideCoA.ApplySetting()
end
HideCoA.SetCharacterOverrideFrameHidden = SetCharacterOverrideFrameHidden
local function SetAllClassesHidden(hide)
local classSettings = GetActiveClassSettings()
for _, class in ipairs(HideCoA.CUSTOM_CLASSES) do
for _, frameName in ipairs(HideCoA.FRAMES) do
classSettings[class][frameName] = hide
end
end
end
local function HideAllFrames()
SetAllClassesHidden(true)
HideCoA.ApplySetting()
end
HideCoA.HideAllFrames = HideAllFrames
local function ShowAllFrames()
SetAllClassesHidden(false)
HideCoA.ApplySetting()
end
HideCoA.ShowAllFrames = ShowAllFrames
local function ShouldHideForClass(playerClass, frameName)
local classSettings = GetActiveClassSettings()[playerClass]
@@ -193,13 +262,24 @@ local function ShouldHideForClass(playerClass, frameName)
end
local function ShouldHideFrame(frameName)
local override = GetCharacterOverride()
if override.enabled then
return override.frameSettings[frameName]
end
local _, playerClass = UnitClass("player")
return ShouldHideForClass(playerClass, frameName)
end
local hookedFrames = {}
local seenNaturalShow = {}
local function ApplySetting()
local _, playerClass = UnitClass("player")
for _, frameName in ipairs(HideCoA.FRAMES) do
local frame = _G[frameName]
@@ -210,8 +290,7 @@ local function ApplySetting()
frame:HookScript("OnShow", function(self)
seenNaturalShow[frameName] = true
local _, currentClass = UnitClass("player")
if ShouldHideForClass(currentClass, frameName) then
if ShouldHideFrame(frameName) then
self:Hide()
end
end)
@@ -220,7 +299,7 @@ local function ApplySetting()
end
local hide = ShouldHideForClass(playerClass, frameName)
local hide = ShouldHideFrame(frameName)
if hide then
frame:Hide()
@@ -304,6 +383,8 @@ f:SetScript("OnEvent", function(self, event, arg1)
HideCoADB.charProfile[charKey] = charKey
end
EnsureCharacterOverride(charKey)
HideCoADB.selectedProfile = nil
elseif event == "PLAYER_LOGIN" then