Skip to content

Commit 8b53193

Browse files
committed
Handle unknown Generic Trees more cleanly, and fix errors when clicking on menu headers
1 parent a1da168 commit 8b53193

File tree

1 file changed

+52
-17
lines changed

1 file changed

+52
-17
lines changed

ResearchViewer.lua

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@ local increment = CreateCounter();
2525
ResearchViewer.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
398398
end
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
408436
end
409437

410438
function 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;
425459
end
426460

427461
function ResearchViewer:OpenSelectedResearch()
428462
self.charDb.lastSelected = self.selectedTreeInfo
463+
OrderHall_LoadUI()
429464
OrderHallTalentFrame:SetGarrisonType(self.selectedTreeInfo.type, self.selectedTreeInfo.id)
430465
ShowUIPanel(OrderHallTalentFrame);
431466
end
@@ -443,8 +478,8 @@ function ResearchViewer:TreeExists(treeId)
443478
return exists
444479
end
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)
448483
end
449484

450485
--- @param rootDescription RootMenuDescriptionProxy
@@ -496,9 +531,9 @@ end
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

Comments
 (0)