You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

862 lines
33 KiB

local PetJournalEnhanced = LibStub("AceAddon-3.0"):GetAddon("PetJournalEnhanced")
local DropDown = PetJournalEnhanced:NewModule("DropDown")
local Config = PetJournalEnhanced:GetModule("Config")
local Sorting = PetJournalEnhanced:GetModule("Sorting")
local ASCENDING = 1
local DESCENDING = 2
local breedInfo = LibStub("LibPetBreedInfo-1.0")
-- local ZoneFiltering = PetJournalEnhanced:GetModule("ZoneFiltering")
local L = LibStub("AceLocale-3.0"):GetLocale("PetJournalEnhanced")
-- luacheck: globals UIDropDownMenu_Initialize UIDropDownMenu_CreateInfo UIDropDownMenu_AddButton UIDROPDOWNMENU_MENU_VALUE
-- luacheck: globals UIDropDownMenu_Refresh UIDropDownMenu_EnableButton UIDropDownMenu_DisableButton
local FILTER_CURRENT_ZONE = L["Filter pets by current zone"]
local FILTER_BREED = L["Breed"]
local FILTER_SHOW_HIDDEN = L["Show player hidden pets"]
local FILTER_RESET_HIDDEN = L["Reset player hidden pets"]
local FILTER_SORTING = L["Sorting"]
local FILTER_RESET = L["Reset Filters"]
local FILTER_CAN_BATTLE = L["Can Battle"]
local FILTER_CANT_BATTLE = L["Can't Battle"]
local FILTER_CAN_TRADE = L["Can Trade"]
local FILTER_CANT_TRADE = L["Can't Trade"]
local FILTER_UNKNOWN_ZONE = L["Unknown Zone"]
local FILTER_SORT_FAVORITES = L["Sort favorites to the top"]
local FILTER_SORT_DIRECTION = L["Sort Direction:"]
local FILTER_SORT_ASCENDING = L["Sort Ascending"]
local FILTER_SORT_DESCENDING = L["Sort Descending"]
local FILTER_SORT_ORDER = L["Sort Order:"]
local levelBrackets = {"1","2-10","11-20","21-24","25"}
local specializations = {
L["Balanced"],
FAST,
L["Resilient"],
L["Powerful"],
}
local sortTypes = {
LEVEL,
NAME,
TYPE,
RARITY,
L["Highest Stat"],
}--,["Added to Pet Journal"]=SORT_PETID}
local FILTER_MENU_NAMES = {
MISCELLANEOUS,
LEVEL,
L["Ability Type"],
L["Zones"],
QUALITY,
SPECIALIZATION,
L["Quantity"],
}
local FILTER_MENU_VALUES = {10, 11, 12, 3, 6, 4, 8}
local function CreateDropdownMenu(self, level)
if level == 1 then
--create check boxes
local info = UIDropDownMenu_CreateInfo()
info.keepShownOnClick = true
info.text = COLLECTED
info.func = function(_, _, _, value)
C_PetJournal.SetFilterChecked(LE_PET_JOURNAL_FILTER_COLLECTED, value)
if (value) then
UIDropDownMenu_EnableButton(1, 2)
else
UIDropDownMenu_DisableButton(1, 2)
end
Sorting:UpdatePets()
end
info.checked = C_PetJournal.IsFilterChecked(LE_PET_JOURNAL_FILTER_COLLECTED)
info.isNotRadio = true
UIDropDownMenu_AddButton(info, level)
info.text = FAVORITES_FILTER
info.func = function(_, _, _, value)
Sorting.filtering.favoritesOnly = value
Sorting:UpdatePets()
end
info.checked = Sorting.filtering.favoritesOnly
info.isNotRadio = true
info.leftPadding = 16
UIDropDownMenu_AddButton(info, level)
info.leftPadding = 0
info.disabled = nil
info.text = NOT_COLLECTED
info.func = function(_, _, _, value)
C_PetJournal.SetFilterChecked(LE_PET_JOURNAL_FILTER_NOT_COLLECTED, value)
Sorting:UpdatePets()
end
info.checked = C_PetJournal.IsFilterChecked(LE_PET_JOURNAL_FILTER_NOT_COLLECTED)
info.isNotRadio = true
UIDropDownMenu_AddButton(info, level)
info.leftPadding = 0
info.disabled = nil
info.text = FILTER_CURRENT_ZONE
info.func = function(_, _, _, value)
Sorting.filtering.currentZone = not Sorting.filtering.currentZone
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.currentZone
end
UIDropDownMenu_AddButton(info, level)
--create sub menu headers
info.checked = nil
info.isNotRadio = nil
info.func = nil
info.hasArrow = true
info.notCheckable = true
info.text = PET_FAMILIES
info.value = 1
UIDropDownMenu_AddButton(info, level)
info.text = SOURCES
info.value = 2
UIDropDownMenu_AddButton(info, level)
for i=1,#FILTER_MENU_NAMES do
info.text = FILTER_MENU_NAMES[i]
info.value = FILTER_MENU_VALUES[i]
UIDropDownMenu_AddButton(info, level)
end
if Config.display.breedInfo then
info.text = FILTER_BREED
info.value = 9
UIDropDownMenu_AddButton(info, level)
end
info.text = FILTER_SORTING
info.value = 5
UIDropDownMenu_AddButton(info, level)
info.notCheckable = true
info.text = FILTER_RESET
info.value = 7
info.func = function()
Sorting:Reset()
end
UIDropDownMenu_AddButton(info, level)
end
if level == 2 then
local info = UIDropDownMenu_CreateInfo()
info.keepShownOnClick = true
if Config.display.breedInfo and UIDROPDOWNMENU_MENU_VALUE == 9 then --breed filter
info.notCheckable = true
info.text = CHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.breed do
Sorting.filtering.breed[i] = true
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.text = UNCHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.breed do
Sorting.filtering.breed[i] = false
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
for i,breedName in breedInfo:IterateBreedNames() do
info.notCheckable = false
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = true
info.text = breedName
info.func = function(_, _, _, value)
Sorting.filtering.breed[i] = not Sorting.filtering.breed[i]
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.breed[i]
end
UIDropDownMenu_AddButton(info, level)
end
elseif UIDROPDOWNMENU_MENU_VALUE == 11 then -- Level filter
info.notCheckable = true
info.text = CHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.level do
Sorting.filtering.level[i] = true
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.text = UNCHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.level do
Sorting.filtering.level[i] = false
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.notCheckable = false
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = true
for i=1,#levelBrackets do
info.text = levelBrackets[i]
info.func = function(_, _, _, value)
Sorting.filtering.level[i] = not Sorting.filtering.level[i]
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.level[i]
end
info.isNotRadio = true
UIDropDownMenu_AddButton(info, level)
end
elseif UIDROPDOWNMENU_MENU_VALUE == 10 then -- misc filter
info.notCheckable = true
info.text = CHECK_ALL
info.func = function()
Sorting.filtering.canBattle = true
Sorting.filtering.cantBattle = true
Sorting.filtering.canTrade = true
Sorting.filtering.cantTrade = true
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.text = UNCHECK_ALL
info.func = function()
Sorting.filtering.canBattle = false
Sorting.filtering.cantBattle = false
Sorting.filtering.canTrade = false
Sorting.filtering.cantTrade = false
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.notCheckable = false
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = true
info.text = FILTER_CAN_BATTLE
info.func = function(_, _, _, value)
Sorting.filtering.canBattle = not Sorting.filtering.canBattle
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.canBattle
end
info.isNotRadio = true
UIDropDownMenu_AddButton(info, level)
info.text = FILTER_CANT_BATTLE
info.func = function(_, _, _, value)
Sorting.filtering.cantBattle = not Sorting.filtering.cantBattle
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.cantBattle
end
info.isNotRadio = true
UIDropDownMenu_AddButton(info, level)
info.text = FILTER_CAN_TRADE
info.func = function(_, _, _, value)
Sorting.filtering.canTrade = not Sorting.filtering.canTrade
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.canTrade
end
UIDropDownMenu_AddButton(info, level)
info.text = FILTER_CANT_TRADE
info.func = function(_, _, _, value)
Sorting.filtering.cantTrade = not Sorting.filtering.cantTrade
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.cantTrade
end
UIDropDownMenu_AddButton(info, level)
info.text = FILTER_SHOW_HIDDEN
info.func = function(_, _, _, value)
Sorting.filtering.hiddenSpecies = not Sorting.filtering.hiddenSpecies
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.hiddenSpecies
end
UIDropDownMenu_AddButton(info, level)
info.notCheckable = true
info.text = FILTER_RESET_HIDDEN
info.func = function(_, _, _, value)
Sorting:ResetSpeciesHidden()
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
elseif UIDROPDOWNMENU_MENU_VALUE == 12 then -- ability type filter
info.notCheckable = true
info.text = CHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.abilityType do
Sorting.filtering.abilityType[i] = true
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.text = UNCHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.abilityType do
Sorting.filtering.abilityType[i] = false
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
for i=1, C_PetJournal.GetNumPetTypes() do
info.notCheckable = false
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = true
info.text = _G["BATTLE_PET_NAME_"..i]
info.func = function(_, _, _, value)
Sorting.filtering.abilityType[i] = not Sorting.filtering.abilityType[i]
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.abilityType[i]
end
UIDropDownMenu_AddButton(info, level)
end
elseif UIDROPDOWNMENU_MENU_VALUE == 8 then --quantity
info.notCheckable = true
info.text = CHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.quantity do
Sorting.filtering.quantity[i] = true
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.text = UNCHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.quantity do
Sorting.filtering.quantity[i] = false
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
for i=1,#Sorting.filtering.quantity do
info.notCheckable = false
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = true
info.text = i
info.func = function(_, _, _, value)
Sorting.filtering.quantity[i] = not Sorting.filtering.quantity[i]
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.quantity[i]
end
UIDropDownMenu_AddButton(info, level)
end
elseif UIDROPDOWNMENU_MENU_VALUE == 1 then --blizzard pet families
info.hasArrow = false
info.isNotRadio = true
info.notCheckable = true
info.text = CHECK_ALL
info.func = function()
C_PetJournal.SetAllPetTypesChecked(true)
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.text = UNCHECK_ALL
info.func = function()
C_PetJournal.SetAllPetTypesChecked(false)
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.notCheckable = false
local numTypes = C_PetJournal.GetNumPetTypes()
for i=1,numTypes do
info.text = _G["BATTLE_PET_NAME_"..i]
info.func = function(_, _, _, value)
C_PetJournal.SetPetTypeFilter(i, value)
Sorting:UpdatePets()
end
info.checked = function()
return C_PetJournal.IsPetTypeChecked(i)
end
UIDropDownMenu_AddButton(info, level)
end
elseif UIDROPDOWNMENU_MENU_VALUE == 2 then --blizzard pet sources
info.hasArrow = false
info.isNotRadio = true
info.notCheckable = true
info.text = CHECK_ALL
info.func = function()
C_PetJournal.SetAllPetSourcesChecked(true)
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 2, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.text = UNCHECK_ALL
info.func = function()
C_PetJournal.SetAllPetSourcesChecked(false)
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 2, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.notCheckable = false
local numSources = C_PetJournal.GetNumPetSources()
for i=1,numSources do
info.text = _G["BATTLE_PET_SOURCE_"..i]
info.func = function(_, _, _, value)
C_PetJournal.SetPetSourceChecked(i, value)
Sorting:UpdatePets()
end
info.checked = function()
return C_PetJournal.IsPetSourceChecked(i)
end
UIDropDownMenu_AddButton(info, level)
end
-- elseif UIDROPDOWNMENU_MENU_VALUE == 3 then --zone filter
-- local info = UIDropDownMenu_CreateInfo()
-- local zoneTree = ZoneFiltering:GetZoneGroupMapping()
-- info.hasArrow = false
-- info.isNotRadio = true
-- info.notCheckable = true
-- info.keepShownOnClick = true
-- info.text = CHECK_ALL
-- info.func = function()
-- ZoneFiltering:SetAllFiltered(true)
-- Sorting.filtering.unknownZone = true
-- Sorting:UpdatePets()
-- UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
-- end
-- UIDropDownMenu_AddButton(info, level)
-- info.text = UNCHECK_ALL
-- info.func = function()
-- ZoneFiltering:SetAllFiltered(false)
-- Sorting.filtering.unknownZone = false
-- Sorting:UpdatePets()
-- UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
-- end
-- UIDropDownMenu_AddButton(info, level)
-- info.notCheckable = false
-- info.keepShownOnClick = true
-- info.checked = false
-- info.isNotRadio = true
-- info.text = FILTER_UNKNOWN_ZONE
-- info.func = function(_, _, _, value)
-- Sorting.filtering.unknownZone = not Sorting.filtering.unknownZone
-- UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
-- Sorting:UpdatePets()
-- end
-- info.checked = function()
-- return Sorting.filtering.unknownZone
-- end
-- UIDropDownMenu_AddButton(info, level)
-- local ZoneGroupMap = ZoneFiltering:GetZoneGroupMapping()
-- for i=1,ZoneFiltering:GetNumZoneGroups() do
-- info.hasArrow = true
-- info.notCheckable = true
-- info.keepShownOnClick = true
-- info.checked = false
-- info.isNotRadio = true
-- info.text = ZoneFiltering:GetZoneGroupNames(i)
-- info.value = i
-- info.func = nil
-- info.checked = nil
-- UIDropDownMenu_AddButton(info, level)
-- end
elseif UIDROPDOWNMENU_MENU_VALUE == 4 then --pet specialization
local info = UIDropDownMenu_CreateInfo()
info.hasArrow = false
info.isNotRadio = true
info.notCheckable = true
info.keepShownOnClick = true
info.text = CHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.specialization do
Sorting.filtering.specialization[i] = true
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.text = UNCHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.specialization do
Sorting.filtering.specialization[i] = false
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
for i=1,4 do
info.notCheckable = false
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = true
info.text = specializations[i]
info.func = function(_, _, _, value)
Sorting.filtering.specialization[i] = not Sorting.filtering.specialization[i]
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.specialization[i]
end
UIDropDownMenu_AddButton(info, level)
end
elseif UIDROPDOWNMENU_MENU_VALUE == 5 then --sorting menu
info.keepShownOnClick = true
info.text = FILTER_SORT_FAVORITES
info.func = function(_, _, _, value)
Sorting.sorting.favoritesFirst = not Sorting.sorting.favoritesFirst
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.sorting.favoritesFirst
end
info.isNotRadio = true
info.notCheckable = false
UIDropDownMenu_AddButton(info, level)
info.keepShownOnClick = true
info.text = FILTER_SORT_ORDER
info.func = nil
info.notCheckable = true
UIDropDownMenu_AddButton(info, level)
info.notCheckable = false
--create sort menu options
for i=1,#sortTypes do
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = false
info.text = sortTypes[i]
info.func = function(_, _, _, value)
Sorting.sorting.selection = i
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.sorting.selection == i
end
UIDropDownMenu_AddButton(info, level)
end
if Config.display.breedInfo then
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = false
info.text = FILTER_BREED
info.func = function(_, _, _, value)
Sorting.sorting.selection = #sortTypes + 1
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.sorting.selection == #sortTypes + 1
end
UIDropDownMenu_AddButton(info, level)
end
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = false
info.text = FILTER_SORT_DIRECTION
info.func = nil
info.notCheckable = true
UIDropDownMenu_AddButton(info, level)
info.notCheckable = false
info.text = FILTER_SORT_ASCENDING
info.func = function(_, _, _, value)
Sorting.sorting.order = ASCENDING
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.sorting.order == ASCENDING
end
UIDropDownMenu_AddButton(info, level)
info.text = FILTER_SORT_DESCENDING
info.func = function(_, _, _, value)
Sorting.sorting.order = DESCENDING
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.sorting.order == DESCENDING
end
UIDropDownMenu_AddButton(info, level)
elseif UIDROPDOWNMENU_MENU_VALUE == 6 then
local info = UIDropDownMenu_CreateInfo()
info.hasArrow = false
info.isNotRadio = true
info.notCheckable = true
info.keepShownOnClick = true
info.text = CHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.rarity do
Sorting.filtering.rarity[i] = true
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.text = UNCHECK_ALL
info.func = function()
for i=1,#Sorting.filtering.rarity do
Sorting.filtering.rarity[i] = false
end
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
for i=1,4 do
local r,g,b,hex = GetItemQualityColor(i-1)
info.notCheckable = false
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = true
info.text = string.format("|c%s%s|r",hex,_G["BATTLE_PET_BREED_QUALITY"..i])
info.func = function(_, _, _, value)
Sorting.filtering.rarity[i] = not Sorting.filtering.rarity[i]
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 2)
Sorting:UpdatePets()
end
info.checked = function()
return Sorting.filtering.rarity[i]
end
UIDropDownMenu_AddButton(info, level)
end
end
end
if level == 3 then
if UIDROPDOWNMENU_MENU_VALUE >= 1 and UIDROPDOWNMENU_MENU_VALUE <= ZoneFiltering:GetNumZoneGroups() then
local info = UIDropDownMenu_CreateInfo()
info.hasArrow = false
info.isNotRadio = true
info.notCheckable = true
info.keepShownOnClick = true
info.text = CHECK_ALL
info.func = function()
ZoneFiltering:SetAllGroupFiltered(UIDROPDOWNMENU_MENU_VALUE,true)
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 3)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
info.text = UNCHECK_ALL
info.func = function()
ZoneFiltering:SetAllGroupFiltered(UIDROPDOWNMENU_MENU_VALUE,false)
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 3)
Sorting:UpdatePets()
end
UIDropDownMenu_AddButton(info, level)
local zoneIDs = ZoneFiltering:GetZoneGroup(UIDROPDOWNMENU_MENU_VALUE)
for i=1, #zoneIDs do
local zoneID = zoneIDs[i]
info.hasArrow = false
info.notCheckable = false
info.keepShownOnClick = true
info.checked = false
info.isNotRadio = true
info.text = GetMapNameByID(zoneID)
info.value = zoneID
info.func = function(_, _, _, value)
local isEnabled = ZoneFiltering:GetFiltered(zoneID)
ZoneFiltering:SetFiltered(zoneID,not isEnabled)
UIDropDownMenu_Refresh(PetJournalFilterDropDown, 1, 3)
Sorting:UpdatePets()
end
info.checked = function()
return ZoneFiltering:GetFiltered(zoneID)
end
UIDropDownMenu_AddButton(info, level)
end
end
end
end
local function PetOptionsMenu_Init(self, level)
local pet = DropDown.petOptionsMenu.pet
local info = UIDropDownMenu_CreateInfo()
info.notCheckable = true
local isRevoked = pet and pet.petID and C_PetJournal.PetIsRevoked(pet.petID)
local isLockedForConvert = pet and pet.petID and C_PetJournal.PetIsLockedForConvert(pet.petID)
if (pet and pet.petID and not isRevoked and not isLockedForConvert) then
info.text = BATTLE_PET_SUMMON
if (pet.petID and C_PetJournal.GetSummonedPetGUID() == pet.petID) then
info.text = PET_DISMISS
end
info.func = function() C_PetJournal.SummonPetByGUID(pet.petID) end
if (pet.petID and not C_PetJournal.PetIsSummonable(pet.petID)) then
info.disabled = true
end
UIDropDownMenu_AddButton(info, level)
info.disabled = nil
end
if (pet and pet.petID and not isRevoked and not isLockedForConvert) then
info.text = BATTLE_PET_RENAME
info.func = function()
StaticPopup_Show("BATTLE_PET_RENAME", nil, nil, pet.petID)
end
info.disabled = not C_PetJournal.IsJournalUnlocked()
UIDropDownMenu_AddButton(info, level)
info.disabled = nil
end
local isFavorite = pet and pet.petID and C_PetJournal.PetIsFavorite(pet.petID)
if pet and pet.petID and (isFavorite or (not isRevoked and not isLockedForConvert)) then
if (isFavorite) then
info.text = BATTLE_PET_UNFAVORITE
info.func = function()
C_PetJournal.SetFavorite(pet.petID, 0)
end
else
info.text = BATTLE_PET_FAVORITE
info.func = function()
C_PetJournal.SetFavorite(pet.petID, 1)
end
end
info.disabled = not C_PetJournal.IsJournalUnlocked()
UIDropDownMenu_AddButton(info, level)
info.disabled = nil
end
if(pet and pet.petID and C_PetJournal.PetCanBeReleased(pet.petID)) then
info.text = BATTLE_PET_RELEASE
info.func = function() StaticPopup_Show("BATTLE_PET_RELEASE", PetJournalUtil_GetDisplayName(pet.petID), nil, pet.petID) end
if (C_PetJournal.PetIsSlotted(pet.petID) or C_PetBattles.IsInBattle() or not C_PetJournal.IsJournalUnlocked()) then
info.disabled = true
else
info.disabled = nil
end
UIDropDownMenu_AddButton(info, level)
info.disabled = nil
end
if(pet and pet.petID and pet.petID and C_PetJournal.PetIsTradable(pet.petID)) then
info.text = BATTLE_PET_PUT_IN_CAGE
info.func = function() StaticPopup_Show("BATTLE_PET_PUT_IN_CAGE", nil, nil, pet.petID) end
--only if it isn't in a battle slot and has full health
info.disabled = nil
if (not info.disabled and C_PetJournal.PetIsSlotted(pet.petID)) then
info.disabled = true
info.text = BATTLE_PET_PUT_IN_CAGE_SLOTTED
end
if (not info.disabled and C_PetJournal.PetIsHurt(pet.petID)) then
info.disabled = true
info.text = BATTLE_PET_PUT_IN_CAGE_HEALTH
end
UIDropDownMenu_AddButton(info, level)
info.disabled = nil
end
if (pet and pet.speciesID) then
local isSpciesHidden = Sorting:IsSpeciesHidden(pet.speciesID)
local hideSpeciesName = isSpciesHidden and SHOW or HIDE
info.text = hideSpeciesName
info.func = function()
Sorting:SetSpeciesHidden(pet.speciesID, not isSpciesHidden)
Sorting:UpdatePets()
end
info.disabled = nil
UIDropDownMenu_AddButton(info, level)
end
info.text = CANCEL
info.func = nil
UIDropDownMenu_AddButton(info, level)
end
function DropDown:OnInitialize()
PetJournalFilterButton:Hide()
self.menuFrame = CreateFrame("Frame","PetJournalEnhancedFilterDropDown",PetJournal,"UIDropDownMenuTemplate")
self.petOptionsMenu = CreateFrame("Frame","PetJournalEnhancedPetMenu",PetJournal,"UIDropDownMenuTemplate")
self.filterButton = CreateFrame("Button","PetJournalEnhancedFilterButton",PetJournal,"UIMenuButtonStretchTemplate")
self.filterButton:SetText(FILTER)
self.filterButton:SetAllPoints("PetJournalFilterButton")
UIDropDownMenu_Initialize(self.menuFrame, CreateDropdownMenu , "MENU")
UIDropDownMenu_Initialize(self.petOptionsMenu, PetOptionsMenu_Init , "MENU")
self.filterButton:SetScript("OnClick",function()
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
ToggleDropDownMenu(1, nil, self.menuFrame, "PetJournalEnhancedFilterButton", 74, 15)
end)
end