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:
+86
-5
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user