Move frame-override storage from per-character to per-profile

The Character Override tab's enabled toggle and frame checkboxes now
live on each named profile (profiles[name].override) instead of being
keyed by character. This lets the tab's new profile-list dropdown pick
which profile's override to view/edit without touching which profile
is actually assigned/active for the character - selecting an entry
only changes what you're editing. Existing per-character override data
is migrated into the character's currently active profile on load.

Also style the profile dropdown with ElvUI when available, matching
the rest of the options panel.
This commit is contained in:
2026-07-08 00:18:44 +02:00
parent 3d048cb081
commit 83a1cda15c
2 changed files with 110 additions and 32 deletions
+55 -23
View File
@@ -181,48 +181,64 @@ end
HideCoA.DeleteProfile = DeleteProfile
local function EnsureCharacterOverride(charKey)
local function EnsureProfileOverride(name)
if not HideCoADB.characterOverrides then
HideCoADB.characterOverrides = {}
local profile = HideCoADB.profiles[name]
if not profile then
profile = { classSettings = CreateDefaultClassSettings() }
HideCoADB.profiles[name] = profile
end
local override = HideCoADB.characterOverrides[charKey]
if not override then
override = { enabled = false, frameSettings = {} }
HideCoADB.characterOverrides[charKey] = override
if not profile.override then
profile.override = { enabled = false, frameSettings = {} }
end
for _, frameName in ipairs(HideCoA.FRAMES) do
if override.frameSettings[frameName] == nil then
override.frameSettings[frameName] = true
if profile.override.frameSettings[frameName] == nil then
profile.override.frameSettings[frameName] = true
end
end
return override
return profile.override
end
local function GetCharacterOverride()
return EnsureCharacterOverride(GetCharacterKey())
local function GetProfileOverride(name)
return EnsureProfileOverride(name)
end
HideCoA.GetCharacterOverride = GetCharacterOverride
HideCoA.GetProfileOverride = GetProfileOverride
local function SetCharacterOverrideEnabled(enabled)
GetCharacterOverride().enabled = enabled
local function SetProfileOverrideEnabled(name, enabled)
GetProfileOverride(name).enabled = enabled
HideCoA.ApplySetting()
end
HideCoA.SetCharacterOverrideEnabled = SetCharacterOverrideEnabled
HideCoA.SetProfileOverrideEnabled = SetProfileOverrideEnabled
local function SetCharacterOverrideFrameHidden(frameName, hide)
GetCharacterOverride().frameSettings[frameName] = hide
local function SetProfileOverrideFrameHidden(name, frameName, hide)
GetProfileOverride(name).frameSettings[frameName] = hide
HideCoA.ApplySetting()
end
HideCoA.SetCharacterOverrideFrameHidden = SetCharacterOverrideFrameHidden
HideCoA.SetProfileOverrideFrameHidden = SetProfileOverrideFrameHidden
local function GetProfileNames()
local names = {}
for name in pairs(HideCoADB.profiles) do
table.insert(names, name)
end
table.sort(names)
return names
end
HideCoA.GetProfileNames = GetProfileNames
local function SetAllClassesHidden(hide)
@@ -264,7 +280,7 @@ end
local function ShouldHideFrame(frameName)
local override = GetCharacterOverride()
local override = GetProfileOverride(GetActiveProfileName())
if override.enabled then
return override.frameSettings[frameName]
@@ -372,18 +388,34 @@ f:SetScript("OnEvent", function(self, event, arg1)
HideCoADB.profiles[charKey] = { classSettings = CreateDefaultClassSettings() }
end
for _, profile in pairs(HideCoADB.profiles) do
for name, profile in pairs(HideCoADB.profiles) do
if not profile.classSettings then
profile.classSettings = CreateDefaultClassSettings()
end
EnsureClassSettingsComplete(profile.classSettings)
EnsureProfileOverride(name)
end
if not HideCoADB.charProfile[charKey] then
HideCoADB.charProfile[charKey] = charKey
end
EnsureCharacterOverride(charKey)
-- The override toggle used to live per-character; fold any existing
-- per-character override into whichever profile is currently active
-- for this character so nobody's existing choice silently vanishes.
if HideCoADB.characterOverrides and HideCoADB.characterOverrides[charKey] then
local activeName = GetActiveProfileName()
local activeProfile = HideCoADB.profiles[activeName]
if activeProfile and not activeProfile.override then
activeProfile.override = HideCoADB.characterOverrides[charKey]
EnsureProfileOverride(activeName)
end
HideCoADB.characterOverrides[charKey] = nil
end
HideCoADB.selectedProfile = nil