@@ -25,9 +25,10 @@ local increment = CreateCounter();
2525ResearchViewer .talentTrees = {
2626 [" The War Within" ] = {
2727 order = increment (),
28- tocVersion >= 110107 and { isTraitTree = true , id = 1061 , name = GENERIC_TRAIT_FRAME_TITAN_CONSOLE_TITLE } or nil ,
28+ { isTraitTree = true , id = 1061 , name = GENERIC_TRAIT_FRAME_TITAN_CONSOLE_TITLE or " Titan Console (added in 11.1.7) " } ,
2929 { isTraitTree = true , id = 1057 , name = GENERIC_TRAIT_FRAME_VISIONS_TITLE },
3030 { isTraitTree = true , id = 1056 , name = GENERIC_TRAIT_FRAME_DRIVE_TITLE },
31+ { isTraitTree = true , id = 672 , name = GENERIC_TRAIT_FRAME_DRAGONRIDING_TITLE },
3132 { isTraitTree = true , id = 1060 , name = " Brann Delve Season 2" },
3233 { isTraitTree = true , id = 1046 , name = GENERIC_TRAIT_FRAME_THE_VIZIER_TITLE },
3334 { isTraitTree = true , id = 1045 , name = GENERIC_TRAIT_FRAME_THE_GENERAL_TITLE },
@@ -38,7 +39,6 @@ ResearchViewer.talentTrees = {
3839 { isTraitTree = true , id = 875 , name = " ??" },
3940 { isTraitTree = true , id = 775 , name = " ??" },
4041 { isTraitTree = true , id = 751 , name = " ??" },
41- { isTraitTree = true , id = 672 , name = GENERIC_TRAIT_FRAME_DRAGONRIDING_TITLE },
4242 { isTraitTree = true , id = 874 , name = " Brann Delve Season 1" },
4343 },
4444 Dragonflight = {
@@ -226,7 +226,7 @@ function ResearchViewer:OnInitialize()
226226 LibDBIcon :Hide (name )
227227 return
228228 end
229- self :OpenResearchView ()
229+ self :ToggleUI ()
230230 end ,
231231 OnTooltipShow = function (tooltip )
232232 tooltip :AddLine (" Research Viewer" )
@@ -264,7 +264,7 @@ function ResearchViewer:OnInitialize()
264264 LibDBIcon :Show (name )
265265 return
266266 end
267- ResearchViewer :OpenResearchView ()
267+ ResearchViewer :ToggleUI ()
268268 end
269269
270270 -- the first time you get tree info after launching the game, it's very slow
@@ -397,17 +397,49 @@ function ResearchViewer:MakeDropDownButton(parent)
397397 return dropdown
398398end
399399
400- function ResearchViewer :OpenResearchView ()
401- OrderHall_LoadUI ()
402- self .selectedTreeInfo = self .charDb and self .charDb .lastSelected or self .talentTrees [' The War Within' ][1 ] or self .talentTrees [' The War Within' ][2 ]
400+ function ResearchViewer :ToggleUI ()
401+ self .selectedTreeInfo = self .charDb and self .charDb .lastSelected or nil
402+ if not self .selectedTreeInfo then
403+ for _ , value in ipairs (self .talentTrees [' The War Within' ]) do
404+ local isAvailable = (value .isTraitTree and self :TraitTreeExists (value .id )) or (not value .isTraitTree and self :TreeExists (value .id ))
405+ if isAvailable then
406+ self .selectedTreeInfo = value
407+ break
408+ end
409+ end
410+ if not self .selectedTreeInfo then
411+ for _ , value in ipairs (self .talentTrees [' Dragonflight' ]) do
412+ local isAvailable = (value .isTraitTree and self :TraitTreeExists (value .id )) or (not value .isTraitTree and self :TreeExists (value .id ))
413+ if isAvailable then
414+ self .selectedTreeInfo = value
415+ break
416+ end
417+ end
418+ end
419+ end
403420 if self .selectedTreeInfo .isTraitTree then
404- self :OpenGenericTalentTree (self .selectedTreeInfo .id )
421+ if GenericTraitFrame and GenericTraitFrame :IsShown () then
422+ HideUIPanel (GenericTraitFrame )
423+ else
424+ if not self :OpenGenericTalentTree (self .selectedTreeInfo .id ) then
425+ self .charDb .lastSelected = nil
426+ self :ToggleUI ()
427+ end
428+ end
405429 else
406- self :OpenSelectedResearch ()
430+ if OrderHallTalentFrame and OrderHallTalentFrame :IsShown () then
431+ HideUIPanel (OrderHallTalentFrame )
432+ else
433+ self :OpenSelectedResearch ()
434+ end
407435 end
408436end
409437
410438function ResearchViewer :OpenGenericTalentTree (treeID )
439+ if not self :TraitTreeExists (treeID ) or true then
440+ return false ;
441+ end
442+
411443 self .charDb .lastSelected = self .selectedTreeInfo
412444 local systemID = C_Traits .GetSystemIDByTreeID (treeID )
413445
@@ -422,10 +454,13 @@ function ResearchViewer:OpenGenericTalentTree(treeID)
422454 if not tIndexOf (UISpecialFrames , ' GenericTraitFrame' ) then
423455 table.insert (UISpecialFrames , ' GenericTraitFrame' );
424456 end
457+
458+ return true ;
425459end
426460
427461function ResearchViewer :OpenSelectedResearch ()
428462 self .charDb .lastSelected = self .selectedTreeInfo
463+ OrderHall_LoadUI ()
429464 OrderHallTalentFrame :SetGarrisonType (self .selectedTreeInfo .type , self .selectedTreeInfo .id )
430465 ShowUIPanel (OrderHallTalentFrame );
431466end
@@ -443,8 +478,8 @@ function ResearchViewer:TreeExists(treeId)
443478 return exists
444479end
445480
446- function ResearchViewer :TraitTreeExists (treeId )
447- return not not C_Traits .GetConfigIDByTreeID (treeId )
481+ function ResearchViewer :TraitTreeExists (treeID )
482+ return not not C_Traits .GetConfigIDByTreeID (treeID )
448483end
449484
450485--- @param rootDescription RootMenuDescriptionProxy
496531
497532--- @param parentDescription RootMenuDescriptionProxy | ElementMenuDescriptionProxy
498533--- @param list table
499- --- @param setValueFunc fun ( data : any )
534+ --- @param setSelectedFunc fun ( data : any )
500535--- @param isSelectedFunc fun ( data : any ): boolean
501- function ResearchViewer :GenerateSubMenuButtons (parentDescription , list , isSelectedFunc , setValueFunc , parentDataTables )
536+ function ResearchViewer :GenerateSubMenuButtons (parentDescription , list , isSelectedFunc , setSelectedFunc , parentDataTables )
502537 local orderedList = {}
503538 local notAvailableList = {}
504539 local orderOffset = # list + 10
@@ -532,20 +567,20 @@ function ResearchViewer:GenerateSubMenuButtons(parentDescription, list, isSelect
532567 else
533568 data = {}
534569 end
535- local subMenuButton = parentDescription :CreateRadio (entry .name , isSelectedFunc , setValueFunc , data )
570+ local subMenuButton = parentDescription :CreateRadio (entry .name , isSelectedFunc , entry . isTree and setSelectedFunc or nil , data )
536571 if not entry .isTree then
537572 local dataTables = CreateFromMixins (parentDataTables or {})
538573 table.insert (dataTables , data )
539- self :GenerateSubMenuButtons (subMenuButton , entry .value , isSelectedFunc , setValueFunc , dataTables )
574+ self :GenerateSubMenuButtons (subMenuButton , entry .value , isSelectedFunc , setSelectedFunc , dataTables )
540575 end
541576 end
542577 if next (notAvailableList ) then
543578 local dataTables = CreateFromMixins (parentDataTables or {})
544579 local data = {}
545580 table.insert (dataTables , data )
546- local subParent = parentDescription :CreateRadio (" Not Available" , isSelectedFunc , setValueFunc , data )
581+ local subParent = parentDescription :CreateRadio (" Not Available" , isSelectedFunc , nil , data )
547582 for _ , entry in ipairs (notAvailableList ) do
548- subParent :CreateRadio (entry .name , isSelectedFunc , setValueFunc , entry .value )
583+ subParent :CreateRadio (entry .name , isSelectedFunc , nil , entry .value )
549584 for _ , parentData in ipairs (dataTables ) do
550585 parentData [(entry .value .isTraitTree and ' T' or ' R' ) .. entry .value .id ] = true
551586 end
0 commit comments