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