---@type QuestieJourney local QuestieJourney = QuestieLoader:CreateModule("QuestieJourney") local _QuestieJourney = QuestieJourney.private ------------------------- --Import modules. ------------------------- ---@type QuestieJourneyUtils local QuestieJourneyUtils = QuestieLoader:ImportModule("QuestieJourneyUtils") ---@type QuestiePlayer local QuestiePlayer = QuestieLoader:ImportModule("QuestiePlayer") ---@type QuestieProfessions local QuestieProfessions = QuestieLoader:ImportModule("QuestieProfessions") ---@type QuestieDB local QuestieDB = QuestieLoader:ImportModule("QuestieDB") ---@type l10n local l10n = QuestieLoader:ImportModule("l10n") local AceGUI = LibStub("AceGUI-3.0") local RESET = -1000 local _CreateContinentDropdown, _CreateZoneDropdown local _HandleContinentSelection, _HandleZoneSelection local selectedContinentId local contDropdown, zoneDropdown, treegroup -- function that draws the Tab for Zone Quests function _QuestieJourney.questsByZone:DrawTab(container) ---@class AceSimpleGroup treegroup = AceGUI:Create("SimpleGroup") -- Header local header = AceGUI:Create("Heading") header:SetText(l10n('Select Your Continent and Zone')) header:SetFullWidth(true) container:AddChild(header) QuestieJourneyUtils:Spacer(container) contDropdown = _CreateContinentDropdown() container:AddChild(contDropdown) zoneDropdown = _CreateZoneDropdown() container:AddChild(zoneDropdown) QuestieJourneyUtils:Spacer(container) header = AceGUI:Create("Heading") header:SetText(l10n('Zone Quests')) header:SetFullWidth(true) container:AddChild(header) QuestieJourneyUtils:Spacer(container) treegroup:SetFullHeight(true) treegroup:SetFullWidth(true) treegroup:SetLayout("fill") container:AddChild(treegroup) end _CreateContinentDropdown = function() local dropdown = AceGUI:Create("Dropdown") dropdown:SetList(QuestieJourney.continents) dropdown:SetText(l10n('Select Your Continent')) dropdown:SetCallback("OnValueChanged", _HandleContinentSelection) local currentContinentId = QuestiePlayer:GetCurrentContinentId() -- This mapping translates the actual continent ID to the keys of l10n.continentLookup if currentContinentId == 0 then -- Eastern Kingdom selectedContinentId = 1 elseif currentContinentId == 1 then -- Kalimdor selectedContinentId = 2 elseif currentContinentId == 530 then -- Outland selectedContinentId = 3 elseif currentContinentId == 571 then -- Northrend selectedContinentId = 4 elseif l10n.zoneLookup[currentContinentId] then -- Dungeon selectedContinentId = 5 end if _QuestieJourney.lastZoneSelection[1] then selectedContinentId = _QuestieJourney.lastZoneSelection[1] end dropdown:SetValue(selectedContinentId) return dropdown end _CreateZoneDropdown = function() local dropdown = AceGUI:Create("Dropdown") local currentZoneId = QuestiePlayer:GetCurrentZoneId() if _QuestieJourney.lastZoneSelection[2] then currentZoneId = _QuestieJourney.lastZoneSelection[2] end local zones = QuestieJourney.zones[selectedContinentId] if currentZoneId and currentZoneId > 0 and zones then local sortedZones = QuestieJourneyUtils:GetSortedZoneKeys(zones) dropdown:SetList(zones, sortedZones) dropdown:SetValue(currentZoneId) local zoneTree = _QuestieJourney.questsByZone:CollectZoneQuests(currentZoneId) _QuestieJourney.questsByZone:ManageTree(treegroup, zoneTree) elseif currentZoneId == RESET and zones then dropdown:SetText(l10n('Select Your Zone')) local sortedZones = QuestieJourneyUtils:GetSortedZoneKeys(zones) dropdown:SetList(zones, sortedZones) else dropdown:SetDisabled(true) end dropdown:SetCallback("OnValueChanged", _HandleZoneSelection) return dropdown end _HandleContinentSelection = function(key, _) if (key.value == QuestieJourney.questCategoryKeys.CLASS) then local _, class, _ = UnitClass("player") local classKey = QuestieDB:GetZoneOrSortForClass(class) local zoneTree = _QuestieJourney.questsByZone:CollectZoneQuests(classKey) _QuestieJourney.questsByZone:ManageTree(treegroup, zoneTree) zoneDropdown.frame:Hide() elseif (key.value == QuestieJourney.questCategoryKeys.PROFESSIONS) then local professionList = QuestieJourney.zones[key.value] local playerProfessions = QuestieProfessions:GetPlayerProfessionNames() local relevantProfessions = {} for id, possibleName in pairs(professionList) do for _, name in pairs(playerProfessions) do if possibleName == name then relevantProfessions[id] = professionList[id] break end end end local text = l10n('Select Your Profession') if (not next(relevantProfessions)) then text = l10n('No Quests found') zoneDropdown:SetDisabled(true) else zoneDropdown:SetDisabled(false) end zoneDropdown:SetList(relevantProfessions) zoneDropdown:SetText(text) zoneDropdown.frame:Show() else local sortedZones = QuestieJourneyUtils:GetSortedZoneKeys(QuestieJourney.zones[key.value]) zoneDropdown:SetList(QuestieJourney.zones[key.value], sortedZones) zoneDropdown:SetText(l10n("Select Your Zone")) zoneDropdown:SetDisabled(false) zoneDropdown.frame:Show() end _QuestieJourney.lastZoneSelection[2] = RESET _QuestieJourney.lastZoneSelection[1] = key.value end _HandleZoneSelection = function(key, _) local zoneTree = _QuestieJourney.questsByZone:CollectZoneQuests(key.value) _QuestieJourney.questsByZone:ManageTree(treegroup, zoneTree) _QuestieJourney.lastZoneSelection[2] = key.value end