@@ -63,28 +63,55 @@ local function GetAuraFilterToggleOrder(auraDB)
6363 return auraFilters
6464end
6565
66- local function ParseAuraFilterSelections (auraDB , filterString )
66+ local function ResolveAuraFilterSelectionKey (auraDB , filterString )
6767 local auraFilterConfig = GetAuraFilterConfig (auraDB )
6868 local baseFilter = GetAuraBaseFilter (auraDB )
69- local selectedFilters = {}
70- if type (filterString ) ~= " string" then return selectedFilters end
69+ if type (filterString ) ~= " string" then return nil end
7170 local decodedFilterString = filterString :gsub (" ||" , " |" )
71+
72+ if decodedFilterString ~= baseFilter and auraFilterConfig [decodedFilterString ] then
73+ return decodedFilterString
74+ end
75+
7276 for filterType in decodedFilterString :gmatch (" [^|]+" ) do
73- if filterType ~= baseFilter and auraFilterConfig [filterType ] then
74- selectedFilters [filterType ] = true
77+ if filterType ~= baseFilter then
78+ if auraFilterConfig [filterType ] then
79+ return filterType
80+ end
81+ local baseQualifiedFilter = baseFilter .. " |" .. filterType
82+ if auraFilterConfig [baseQualifiedFilter ] then
83+ return baseQualifiedFilter
84+ end
7585 end
7686 end
87+
88+ return nil
89+ end
90+
91+ local function ParseAuraFilterSelections (auraDB , filterString )
92+ local selectedFilters = {}
93+ local selectedFilter = ResolveAuraFilterSelectionKey (auraDB , filterString )
94+ if selectedFilter then selectedFilters [selectedFilter ] = true end
7795 return selectedFilters
7896end
7997
80- local function BuildAuraFilterString (baseFilter , selectedFilters , orderedFilters )
81- local filterParts = {baseFilter }
98+ local function GetSelectedAuraFilter (selectedFilters , orderedFilters )
8299 for _ , filterType in ipairs (orderedFilters ) do
83100 if selectedFilters [filterType ] then
84- filterParts [ # filterParts + 1 ] = filterType
101+ return filterType
85102 end
86103 end
87- return table.concat (filterParts , " |" )
104+ end
105+
106+ local function SetSelectedAuraFilter (selectedFilters , orderedFilters , selectedFilter )
107+ for _ , filterType in ipairs (orderedFilters ) do
108+ selectedFilters [filterType ] = filterType == selectedFilter and true or nil
109+ end
110+ end
111+
112+ local function BuildAuraFilterString (baseFilter , selectedFilters , orderedFilters )
113+ local selectedFilter = GetSelectedAuraFilter (selectedFilters , orderedFilters )
114+ return selectedFilter or baseFilter
88115end
89116
90117local function EncodeAuraFilterStringForStorage (filterString )
@@ -2275,6 +2302,8 @@ local function CreateSpecificAuraSettings(containerParent, unit, auraDB)
22752302 local auraFilterConfig = GetAuraFilterConfig (auraDB )
22762303 local auraFilterOrder = GetAuraFilterToggleOrder (auraDB )
22772304 local auraFilterSelections = ParseAuraFilterSelections (auraDB , AuraDB .Filter or auraBaseFilter )
2305+ local auraFilterToggles = {}
2306+ local isUpdatingAuraFilterToggles = false
22782307
22792308 local function UpdateAuraFilter ()
22802309 local builtFilter = BuildAuraFilterString (auraBaseFilter , auraFilterSelections , auraFilterOrder )
@@ -2286,6 +2315,19 @@ local function CreateSpecificAuraSettings(containerParent, unit, auraDB)
22862315 end
22872316 end
22882317
2318+ local function RefreshAuraFilterToggles ()
2319+ local selectedFilter = GetSelectedAuraFilter (auraFilterSelections , auraFilterOrder )
2320+ isUpdatingAuraFilterToggles = true
2321+ for _ , filterType in ipairs (auraFilterOrder ) do
2322+ local filterToggle = auraFilterToggles [filterType ]
2323+ if filterToggle then
2324+ filterToggle :SetValue (auraFilterSelections [filterType ] or false )
2325+ filterToggle :SetDisabled (selectedFilter and selectedFilter ~= filterType )
2326+ end
2327+ end
2328+ isUpdatingAuraFilterToggles = false
2329+ end
2330+
22892331 local normalizedAuraFilter = EncodeAuraFilterStringForStorage (BuildAuraFilterString (auraBaseFilter , auraFilterSelections , auraFilterOrder ))
22902332 if AuraDB .Filter ~= normalizedAuraFilter then
22912333 AuraDB .Filter = normalizedAuraFilter
@@ -2307,11 +2349,19 @@ local function CreateSpecificAuraSettings(containerParent, unit, auraDB)
23072349 FilterToggle :SetValue (auraFilterSelections [filterType ] or false )
23082350 FilterToggle :SetRelativeWidth (1.0 )
23092351 FilterToggle :SetCallback (" OnValueChanged" , function (_ , _ , value )
2310- auraFilterSelections [filterType ] = value and true or nil
2352+ if isUpdatingAuraFilterToggles then return end
2353+ if value then
2354+ SetSelectedAuraFilter (auraFilterSelections , auraFilterOrder , filterType )
2355+ else
2356+ auraFilterSelections [filterType ] = nil
2357+ end
2358+ RefreshAuraFilterToggles ()
23112359 UpdateAuraFilter ()
23122360 end )
2361+ auraFilterToggles [filterType ] = FilterToggle
23132362 AuraContainer :AddChild (FilterToggle )
23142363 end
2364+ RefreshAuraFilterToggles ()
23152365
23162366 local LayoutContainer = GUIWidgets .CreateInlineGroup (containerParent , " Layout & Positioning" )
23172367
@@ -2452,6 +2502,7 @@ local function CreateSpecificAuraSettings(containerParent, unit, auraDB)
24522502 GUIWidgets .DeepDisable (AuraContainer , false , Toggle )
24532503 GUIWidgets .DeepDisable (LayoutContainer , false , Toggle )
24542504 GUIWidgets .DeepDisable (CountContainer , false , Toggle )
2505+ RefreshAuraFilterToggles ()
24552506 else
24562507 GUIWidgets .DeepDisable (AuraContainer , true , Toggle )
24572508 GUIWidgets .DeepDisable (LayoutContainer , true , Toggle )
0 commit comments