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.
793 lines
49 KiB
793 lines
49 KiB
--[[ Pet Panel Filter menus ]]
|
|
|
|
local _,L = ...
|
|
local rematch = Rematch
|
|
local roster = rematch.Roster
|
|
local settings
|
|
local rmf = {}
|
|
|
|
rematch:InitModule(function()
|
|
settings = RematchSettings
|
|
|
|
rematch.favoriteFilterMenu = {} -- this is rebuilt as favorite filters are added/removed
|
|
rmf:UpdateFavoriteFilterMenu() -- by this function no less
|
|
rematch:RegisterMenu("FavoriteFilters",rematch.favoriteFilterMenu,rematch.UpdateRoster)
|
|
|
|
-- if no script filters defined, then create some default scripts
|
|
if #settings.ScriptFilters==0 then
|
|
settings.ScriptFilters = {
|
|
{ L["Unnamed Pets"], L["-- Collected pets that still have their original name.\n\nreturn owned and not customName"] },
|
|
{ L["Partially Leveled"], L["-- Pets that have earned some xp in battle.\n\nreturn xp and xp>0"] },
|
|
{ L["Unique Abilities"], L["-- Pets with abilities not shared by other pets.\n\nif not count then\n -- create count of each ability per species\n count = {}\n for speciesID in AllSpeciesIDs() do\n for abilityID in AllAbilities(speciesID) do\n if not count[abilityID] then\n count[abilityID] = 0\n end\n count[abilityID] = count[abilityID] + 1\n end\n end\nend\n\nfor _,abilityID in ipairs(abilityList) do\n if count[abilityID]==1 then\n return true\n end\nend"] },
|
|
{ L["Pets Without Rares"], L["-- Collected battle pets that have no rare version.\n\nif not rares then\n rares = {}\n for petID in AllPetIDs() do\n if select(5,C_PetJournal.GetPetStats(petID))==4 then\n rares[C_PetJournal.GetPetInfoByPetID(petID)]=true\n end\n end\nend\n\nif canBattle and owned and not rares[speciesID] then\n return true\nend"] },
|
|
{ L["Hybrid Counters"], L["-- Pets with three or more attack types different than their pet type.\n\nlocal count = 0\nfor _,abilityID in ipairs(abilityList) do\n local abilityType,noHints = select(7, C_PetBattles.GetAbilityInfoByID(abilityID) )\n if not noHints and abilityType~=petType then\n count = count + 1\n end\nend\n\nreturn count>=3\n"] },
|
|
}
|
|
end
|
|
|
|
rematch.scriptFilterMenu = {} -- this is rebuilt as scripts are added/removed
|
|
rematch:UpdateScriptFilterMenu() -- by this function (really)
|
|
rematch:RegisterMenu("ScriptFilters",rematch.scriptFilterMenu,rematch.UpdateRoster)
|
|
|
|
|
|
-- loadout slots have their own menu to handle special slots
|
|
-- instead of a petID, the subject is a slot, so many functions are different than normal pet menus
|
|
-- also, this menu is guaranteed to be shown only for valid, slotted petIDs
|
|
rematch:RegisterMenu("LoadoutMenu", {
|
|
{ title=true, -- title of menu is the slotted pet's name'
|
|
text = function(self,slot)
|
|
local petID = C_PetJournal.GetPetLoadOutInfo(slot)
|
|
return rematch.petInfo:Fetch(petID).name
|
|
end },
|
|
{ text = rmf.GetSpecialLabel, type="leveling", hidden=rmf.IsSpecialHidden, petID=0, func=rmf.SetSpecialSlot },
|
|
{ text = rmf.GetSpecialLabel, type="random", subMenu=function(entry,slot) return rematch:GetSpecialSlot(slot)~="random" and "RandomSlot" end, hidden = rmf.IsSpecialHidden },
|
|
{ text = rmf.GetSpecialLabel, type="ignored", hidden=rmf.IsSpecialHidden, petID="ignored", func=rmf.SetSpecialSlot },
|
|
{ text = rmf.GetSpecialLabel, type="random", hidden=rmf.IsSpecialNotRandom, func=rmf.SetSpecialSlot },
|
|
{ spacer = true },
|
|
{ text = function(entry,slot) -- Summon/Dismiss
|
|
return C_PetJournal.GetSummonedPetGUID()==C_PetJournal.GetPetLoadOutInfo(slot) and PET_ACTION_DISMISS or SUMMON
|
|
end,
|
|
func=function(entry,slot)
|
|
local petID = C_PetJournal.GetPetLoadOutInfo(slot)
|
|
C_PetJournal.SummonPetByGUID(petID)
|
|
end },
|
|
{ text=L["Set Notes"], -- Set Notes
|
|
func=function(self,slot)
|
|
rematch.Notes.locked = true
|
|
rematch:ShowNotes("pet",(C_PetJournal.GetPetLoadOutInfo(slot)),true)
|
|
rematch.Notes.Content.ScrollFrame.EditBox:SetFocus(true)
|
|
end },
|
|
{ text=L["Find Similar"], -- Find Similar
|
|
func=function(entry,slot)
|
|
local speciesID = rematch.petInfo:Fetch((C_PetJournal.GetPetLoadOutInfo(slot))).speciesID
|
|
roster:SetSimilarFilter(speciesID)
|
|
end },
|
|
{ text=BATTLE_PET_RENAME, -- Rename
|
|
func=function(entry,slot)
|
|
local petID = C_PetJournal.GetPetLoadOutInfo(slot)
|
|
local dialog = rematch:ShowDialog("Rename",300,180,BATTLE_PET_RENAME,L["Enter a new name"],ACCEPT,function() C_PetJournal.SetCustomName(petID,rematch.Dialog.EditBox:GetText()) end,CANCEL,nil,PET_RENAME_DEFAULT_LABEL,function() C_PetJournal.SetCustomName(petID,"") rematch.Dialog:Hide() end)
|
|
dialog.Pet:SetPoint("TOPRIGHT",-12,-28)
|
|
rematch:FillPetListButton(dialog.Pet,petID)
|
|
dialog.Pet:Show()
|
|
dialog.EditBox:SetPoint("TOP",0,-84)
|
|
dialog.EditBox:SetText(rematch:GetPetName(petID)) -- set starting name
|
|
dialog.EditBox:Show()
|
|
end,
|
|
},
|
|
{
|
|
text=function(entry,slot) -- Set/Remove Favorite
|
|
return rematch.petInfo:Fetch((C_PetJournal.GetPetLoadOutInfo(slot))).isFavorite and BATTLE_PET_UNFAVORITE or BATTLE_PET_FAVORITE
|
|
end,
|
|
func=function(entry,slot)
|
|
local petID = C_PetJournal.GetPetLoadOutInfo(slot)
|
|
C_PetJournal.SetFavorite(petID,rematch.petInfo:Fetch(petID).isFavorite and 0 or 1)
|
|
end },
|
|
{ spacer = true },
|
|
{ text = CANCEL },
|
|
})
|
|
|
|
rematch:RegisterMenu("RandomSlot", {
|
|
{ text = L["Any Type"], type="random", var=0, icon="Interface\\Buttons\\UI-GroupLoot-Dice-Up", petID="random:0", func=rmf.SetSpecialSlot },
|
|
{ text = BATTLE_PET_NAME_1, type="random", var=1, icon=rmf.GetIcon, petID="random:1", func=rmf.SetSpecialSlot },
|
|
{ text = BATTLE_PET_NAME_2, type="random", var=2, icon=rmf.GetIcon, petID="random:2", func=rmf.SetSpecialSlot },
|
|
{ text = BATTLE_PET_NAME_3, type="random", var=3, icon=rmf.GetIcon, petID="random:3", func=rmf.SetSpecialSlot },
|
|
{ text = BATTLE_PET_NAME_4, type="random", var=4, icon=rmf.GetIcon, petID="random:4", func=rmf.SetSpecialSlot },
|
|
{ text = BATTLE_PET_NAME_5, type="random", var=5, icon=rmf.GetIcon, petID="random:5", func=rmf.SetSpecialSlot },
|
|
{ text = BATTLE_PET_NAME_6, type="random", var=6, icon=rmf.GetIcon, petID="random:6", func=rmf.SetSpecialSlot },
|
|
{ text = BATTLE_PET_NAME_7, type="random", var=7, icon=rmf.GetIcon, petID="random:7", func=rmf.SetSpecialSlot },
|
|
{ text = BATTLE_PET_NAME_8, type="random", var=8, icon=rmf.GetIcon, petID="random:8", func=rmf.SetSpecialSlot },
|
|
{ text = BATTLE_PET_NAME_9, type="random", var=9, icon=rmf.GetIcon, petID="random:9", func=rmf.SetSpecialSlot },
|
|
{ text = BATTLE_PET_NAME_10, type="random", var=10, icon=rmf.GetIcon, petID="random:10", func=rmf.SetSpecialSlot },
|
|
})
|
|
|
|
-- this is the universal right-click menu for a pet: petpanel, queuepanel and loadoutpanel
|
|
rematch:RegisterMenu("PetMenu", {
|
|
{ title=true, maxWidth=200, text=function(entry,petID) return rematch:GetPetName(petID) end },
|
|
{ text=function(entry,petID) -- Summon/Dismiss
|
|
return C_PetJournal.GetSummonedPetGUID()==petID and PET_ACTION_DISMISS or SUMMON
|
|
end,
|
|
hidden=function(entry,petID)
|
|
return rematch:GetIDType(petID)~="pet"
|
|
end,
|
|
func=function(entry,petID)
|
|
C_PetJournal.SummonPetByGUID(petID)
|
|
end },
|
|
{ text=L["Set Notes"], func=function(self,petID)
|
|
rematch.Notes.locked = true
|
|
rematch:ShowNotes("pet",petID,true)
|
|
rematch.Notes.Content.ScrollFrame.EditBox:SetFocus(true)
|
|
end },
|
|
{ text=L["Find Similar"],
|
|
hidden = rmf.PetCantBattle,
|
|
func=function(entry,petID)
|
|
if rematch:GetIDType(petID)=="species" then
|
|
roster:SetSimilarFilter(petID)
|
|
else
|
|
local speciesID = C_PetJournal.GetPetInfoByPetID(petID)
|
|
roster:SetSimilarFilter(speciesID)
|
|
end
|
|
end },
|
|
{ text=L["Find Moveset"],
|
|
hidden = rmf.PetCantBattle,
|
|
func=function(entry,petID)
|
|
local petInfo = rematch.petInfo:Fetch(petID)
|
|
if petInfo.speciesID then
|
|
roster:SetMovesetFilter(petInfo.speciesID)
|
|
end
|
|
end,
|
|
},
|
|
{ text=BATTLE_PET_RENAME, -- Rename
|
|
hidden=function(entry,petID)
|
|
return rematch:GetIDType(petID)~="pet"
|
|
end,
|
|
func=function(entry,petID)
|
|
local dialog = rematch:ShowDialog("Rename",300,180,BATTLE_PET_RENAME,L["Enter a new name"],ACCEPT,function() C_PetJournal.SetCustomName(petID,rematch.Dialog.EditBox:GetText()) end,CANCEL,nil,PET_RENAME_DEFAULT_LABEL,function() C_PetJournal.SetCustomName(petID,"") rematch.Dialog:Hide() end)
|
|
dialog.Pet:SetPoint("TOPRIGHT",-12,-28)
|
|
rematch:FillPetListButton(dialog.Pet,petID)
|
|
dialog.Pet:Show()
|
|
dialog.EditBox:SetPoint("TOP",0,-84)
|
|
dialog.EditBox:SetText(rematch:GetPetName(petID)) -- set starting name
|
|
dialog.EditBox:Show()
|
|
end,
|
|
},
|
|
{ text=function(entry,petID) -- Set/Remove Favorite
|
|
return (rematch:GetIDType(petID)=="pet" and C_PetJournal.PetIsFavorite(petID)) and BATTLE_PET_UNFAVORITE or BATTLE_PET_FAVORITE
|
|
end,
|
|
hidden=function(entry,petID)
|
|
return rematch:GetIDType(petID)~="pet"
|
|
end,
|
|
func=function(entry,petID)
|
|
C_PetJournal.SetFavorite(petID,C_PetJournal.PetIsFavorite(petID) and 0 or 1)
|
|
end },
|
|
{ text=function(self,petID)
|
|
return format(L["List %d Teams"],rematch.petInfo:Fetch(petID).numTeams)
|
|
end,
|
|
hidden=function(self,petID)
|
|
return not rematch.petInfo:Fetch(petID).inTeams
|
|
end,
|
|
func=function(self,petID)
|
|
if rematch:GetIDType(petID)=="pet" then
|
|
rematch.TeamPanel:SetTeamSearch(petID)
|
|
else
|
|
rematch.TeamPanel:SetTeamSearch(rematch:GetPetName(petID))
|
|
end
|
|
rematch:ShowTeam()
|
|
end },
|
|
{ text=L["Hide Pet"], hidden=function(self,petID) return not settings.AllowHiddenPets or (not rmf:ForPetPanel() or rmf:PetIsHidden(petID)) end, func=rmf.ShowHidePetDialog },
|
|
{ text=L["Unhide Pet"], hidden=function(self,petID) return not settings.AllowHiddenPets or (not rmf:ForPetPanel() or not rmf:PetIsHidden(petID)) end, func=function(self,petID) roster:SetHidePet(petID,false) end },
|
|
{ text=BATTLE_PET_RELEASE, -- Release
|
|
hidden=function(entry,petID)
|
|
return rematch:GetIDType(petID)~="pet" or not C_PetJournal.PetCanBeReleased(petID)
|
|
end,
|
|
disabled=function(entry,petID)
|
|
return C_PetJournal.PetIsSlotted(petID)
|
|
end,
|
|
disabledReason=L["Slotted pets cannot be released."],
|
|
func=function(entry,petID)
|
|
local dialog = rematch:ShowDialog("Release",300,176,BATTLE_PET_RELEASE,L["Release this pet?"],YES,function() C_PetJournal.ReleasePetByID(petID) end,NO)
|
|
dialog.Pet:SetPoint("TOPRIGHT",-12,-28)
|
|
rematch:FillPetListButton(dialog.Pet,petID)
|
|
dialog.Pet:Show()
|
|
dialog.Warning:SetPoint("TOPLEFT",16,-80)
|
|
dialog.Warning.Text:SetText(L["Once released, this pet is gone forever!"])
|
|
dialog.Warning:Show()
|
|
end,
|
|
},
|
|
{ text=BATTLE_PET_PUT_IN_CAGE, -- Put In Cage
|
|
hidden=function(entry,petID)
|
|
return rematch:GetIDType(petID)~="pet" or not C_PetJournal.PetIsTradable(petID)
|
|
end,
|
|
disabled=function(entry,petID)
|
|
return C_PetJournal.PetIsSlotted(petID) or C_PetJournal.PetIsHurt(petID)
|
|
end,
|
|
disabledReason=function(entry,petID)
|
|
return C_PetJournal.PetIsSlotted(petID) and L["Slotted pets cannot be caged."] or L["Injured pets cannot be caged."]
|
|
end,
|
|
func=function(entry,petID)
|
|
if settings.DontConfirmCaging then
|
|
C_PetJournal.CagePetByID(petID)
|
|
else
|
|
local dialog = rematch:ShowDialog("Cage",300,140,BATTLE_PET_PUT_IN_CAGE,L["Cage this pet?"],YES,function() C_PetJournal.CagePetByID(petID) end,NO)
|
|
dialog.Pet:SetPoint("TOPRIGHT",-12,-28)
|
|
rematch:FillPetListButton(dialog.Pet,petID)
|
|
dialog.Pet:Show()
|
|
end
|
|
end },
|
|
{ spacer=true, hidden=function(self,petID) return not rematch:PetCanLevel(petID) end },
|
|
{ text=L["Start Leveling"], -- only for pets not already in the queue
|
|
hidden=function(entry,petID)
|
|
return not rematch:PetCanLevel(petID) or rematch:IsPetLeveling(petID) or settings.QueueActiveSort
|
|
end,
|
|
func=function(entry,petID)
|
|
rematch:InsertPetToQueue(1,petID)
|
|
rematch:ShowQueue(petID)
|
|
end },
|
|
{ text=L["Add To Leveling Queue"],
|
|
hidden=function(entry,petID)
|
|
return not rematch:PetCanLevel(petID) or rematch:IsPetLeveling(petID)
|
|
end,
|
|
func=function(entry,petID)
|
|
rematch:InsertPetToQueue(#settings.LevelingQueue+1,petID)
|
|
rematch:ShowQueue(petID)
|
|
end },
|
|
{ text=L["Stop Leveling"],
|
|
hidden=function(entry,petID)
|
|
return not rematch:IsPetLeveling(petID)
|
|
end,
|
|
func=function(entry,petID)
|
|
rematch:RemovePetFromQueue(petID)
|
|
end },
|
|
|
|
-- queue move buttons
|
|
{ spacer=true, hidden=rmf.IsNotQueuePet },
|
|
{ text=L["Move To Top"], hidden=rmf.IsNotQueuePet, icon="Interface\\Buttons\\UI-MicroStream-Green", iconCoords={0.075,0.925,0.925,0.075}, stay=true,
|
|
disabled=function(entry,petID)
|
|
return settings.LevelingQueue[1]==petID
|
|
end,
|
|
func=function(entry,petID)
|
|
rematch:MovePetInQueue(petID,-2)
|
|
end },
|
|
{ text=L["Move Up"], hidden=rmf.IsNotQueuePet, icon="Interface\\Buttons\\UI-MicroStream-Yellow", iconCoords={0.075,0.925,0.925,0.075}, stay=true,
|
|
disabled=function(entry,petID)
|
|
return settings.LevelingQueue[1]==petID
|
|
end,
|
|
func=function(entry,petID)
|
|
rematch:MovePetInQueue(petID,-1)
|
|
end },
|
|
{ text=L["Move Down"], hidden=rmf.IsNotQueuePet, icon="Interface\\Buttons\\UI-MicroStream-Yellow", stay=true,
|
|
disabled=function(entry,petID)
|
|
return settings.LevelingQueue[#settings.LevelingQueue]==petID
|
|
end,
|
|
func=function(entry,petID)
|
|
rematch:MovePetInQueue(petID,1)
|
|
end },
|
|
{ text=L["Move To End"], hidden=rmf.IsNotQueuePet, icon="Interface\\Buttons\\UI-MicroStream-Green", stay=true,
|
|
disabled=function(entry,petID)
|
|
return settings.LevelingQueue[#settings.LevelingQueue]==petID
|
|
end,
|
|
func=function(entry,petID)
|
|
rematch:MovePetInQueue(petID,2)
|
|
end },
|
|
{ spacer=true, hidden=function(self,petID) return not rematch:PetCanLevel(petID) end },
|
|
|
|
{ text=function(self,petID) return rmf:IsNotQueuePet() and CANCEL or OKAY end },
|
|
},rematch.UpdateQueue)
|
|
|
|
-- these are the pet panel filter menus
|
|
|
|
rematch:RegisterMenu("PetFilter", { -- Filter main menu
|
|
{ text=COLLECTED, check=true, group="Collected", var="Owned", value=rmf.GetNotValue, func=rmf.ToggleNotValue },
|
|
{ text=L["Only Favorites"], check=true, indent=8, group="Favorite", size=2, var=1, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=NOT_COLLECTED, check=true, group="Collected", var="Missing", value=rmf.GetNotValue, func=rmf.ToggleNotValue },
|
|
{ text=PET_FAMILIES, subMenu="PetTypes", group="Types", highlight=rmf.GroupUsed },
|
|
{ text=L["Strong Vs"], subMenu="PetStrong", group="Strong", highlight=rmf.GroupUsed },
|
|
{ text=L["Tough Vs"], subMenu="PetTough", group="Tough", highlight=rmf.GroupUsed },
|
|
{ text=SOURCES, subMenu="PetSources", group="Sources", highlight=rmf.GroupUsed },
|
|
{ text=EXPANSION_FILTER_TEXT, subMenu="PetExpansion", group="Expansion", highlight=rmf.GroupUsed },
|
|
{ text=RARITY, subMenu="PetRarity", group="Rarity", highlight=rmf.GroupUsed },
|
|
{ text=LEVEL, subMenu="PetLevel", group="Level", highlight=rmf.GroupUsed },
|
|
{ text=L["Breed"], hidden=rmf.NotBreedable, subMenu="PetBreed", group="Breed", highlight=rmf.GroupUsed },
|
|
{ text=OTHER, subMenu="PetOther", group="Other", highlight=rmf.GroupUsed },
|
|
{ text=L["Script"], subMenu="ScriptFilters", group="Script", highlight=rmf.GroupUsed },
|
|
{ text=RAID_FRAME_SORT_LABEL, subMenu="PetSort" },
|
|
{ text=L["Favorite Filters"], subMenu="FavoriteFilters" },
|
|
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Pet Filter"], tooltipBody=format(L["In addition to the filters in this menu, you can further refine the pet list with the search box. Some search examples:\n\nPets: %sBlack Tabby\124r\nZones: %sSilithus\124r\nAbilities: %sSandstorm\124r\nText in abilities: %sBleed\124r\nLevels: %slevel=21-23\124r\nStats: %sspeed>300\124r\n\nSearches in \"quotes\" will limit results to only complete matches.\n\nSearch results will be sorted by relevance unless the option %sDon't Sort By Relevance\124r is checked in the Options tab."],rematch.hexWhite,rematch.hexWhite,rematch.hexWhite,rematch.hexWhite,rematch.hexWhite,rematch.hexWhite,rematch.hexWhite) },
|
|
{ text=L["Reset All"], func=function() roster:ClearAllFilters(true) end, stay=true },
|
|
{ text=OKAY, noPostFunc=true },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("PetTypes", { -- Filter->Pet Families
|
|
{ title=true, text=PET_FAMILIES },
|
|
{ text=BATTLE_PET_NAME_1, icon=rmf.GetIcon, check=true, group="Types", size=10, var=1, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_2, icon=rmf.GetIcon, check=true, group="Types", size=10, var=2, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_3, icon=rmf.GetIcon, check=true, group="Types", size=10, var=3, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_4, icon=rmf.GetIcon, check=true, group="Types", size=10, var=4, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_5, icon=rmf.GetIcon, check=true, group="Types", size=10, var=5, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_6, icon=rmf.GetIcon, check=true, group="Types", size=10, var=6, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_7, icon=rmf.GetIcon, check=true, group="Types", size=10, var=7, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_8, icon=rmf.GetIcon, check=true, group="Types", size=10, var=8, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_9, icon=rmf.GetIcon, check=true, group="Types", size=10, var=9, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_10, icon=rmf.GetIcon, check=true, group="Types", size=10, var=10, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Checkbox Groups"], tooltipBody=format(L["In filter menus, checkbox groups assume if nothing is checked you want to view all choices.\n\nYou can also:\n\n%s[Shift]+Click\124r to check all except the box clicked.\n\n%s[Alt]+Click\124r to uncheck all except the box clicked."],rematch.hexWhite,rematch.hexWhite) },
|
|
{ text=RESET, group="Types", stay=true, func=rmf.ResetTypeGroup },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("PetStrong", { -- Filter->Strong Vs
|
|
{ title=true, text=L["Strong Vs"] },
|
|
{ text=BATTLE_PET_NAME_1, icon=rmf.GetIcon, check=true, group="Strong", size=10, var=1, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_2, icon=rmf.GetIcon, check=true, group="Strong", size=10, var=2, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_3, icon=rmf.GetIcon, check=true, group="Strong", size=10, var=3, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_4, icon=rmf.GetIcon, check=true, group="Strong", size=10, var=4, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_5, icon=rmf.GetIcon, check=true, group="Strong", size=10, var=5, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_6, icon=rmf.GetIcon, check=true, group="Strong", size=10, var=6, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_7, icon=rmf.GetIcon, check=true, group="Strong", size=10, var=7, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_8, icon=rmf.GetIcon, check=true, group="Strong", size=10, var=8, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_9, icon=rmf.GetIcon, check=true, group="Strong", size=10, var=9, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_10, icon=rmf.GetIcon, check=true, group="Strong", size=10, var=10, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Checkbox Groups"], tooltipBody=format(L["In filter menus, checkbox groups assume if nothing is checked you want to view all choices.\n\nYou can also:\n\n%s[Shift]+Click\124r to check all except the box clicked.\n\n%s[Alt]+Click\124r to uncheck all except the box clicked."],rematch.hexWhite,rematch.hexWhite) },
|
|
{ text=RESET, group="Strong", stay=true, func=rmf.ResetTypeGroup },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("PetTough", { -- Filter->Tough Vs
|
|
{ title=true, text=L["Tough Vs"] },
|
|
{ text=BATTLE_PET_NAME_1, icon=rmf.GetIcon, check=true, group="Tough", size=10, var=1, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_2, icon=rmf.GetIcon, check=true, group="Tough", size=10, var=2, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_3, icon=rmf.GetIcon, check=true, group="Tough", size=10, var=3, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_4, icon=rmf.GetIcon, check=true, group="Tough", size=10, var=4, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_5, icon=rmf.GetIcon, check=true, group="Tough", size=10, var=5, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_6, icon=rmf.GetIcon, check=true, group="Tough", size=10, var=6, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_7, icon=rmf.GetIcon, check=true, group="Tough", size=10, var=7, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_8, icon=rmf.GetIcon, check=true, group="Tough", size=10, var=8, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_9, icon=rmf.GetIcon, check=true, group="Tough", size=10, var=9, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=BATTLE_PET_NAME_10, icon=rmf.GetIcon, check=true, group="Tough", size=10, var=10, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Checkbox Groups"], tooltipBody=format(L["In filter menus, checkbox groups assume if nothing is checked you want to view all choices.\n\nYou can also:\n\n%s[Shift]+Click\124r to check all except the box clicked.\n\n%s[Alt]+Click\124r to uncheck all except the box clicked."],rematch.hexWhite,rematch.hexWhite) },
|
|
{ text=RESET, group="Tough", stay=true, func=rmf.ResetTypeGroup },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("PetSources", { -- Filter->Sources
|
|
{ text=BATTLE_PET_SOURCE_1, check=true, group="Sources", size=11, var=1, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0,0.25,0,0.25} },
|
|
{ text=BATTLE_PET_SOURCE_2, check=true, group="Sources", size=11, var=2, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0.25,0.5,0,0.25} },
|
|
{ text=BATTLE_PET_SOURCE_3, check=true, group="Sources", size=11, var=3, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0.5,0.75,0,0.25} },
|
|
{ text=BATTLE_PET_SOURCE_4, check=true, group="Sources", size=11, var=4, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0.75,1,0,0.25} },
|
|
{ text=BATTLE_PET_SOURCE_5, check=true, group="Sources", size=11, var=5, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0,0.25,0.25,0.5} },
|
|
{ text=BATTLE_PET_SOURCE_6, check=true, group="Sources", size=11, var=6, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0.25,0.5,0.25,0.5} },
|
|
{ text=BATTLE_PET_SOURCE_7, check=true, group="Sources", size=11, var=7, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0.5,0.75,0.25,0.5} },
|
|
{ text=BATTLE_PET_SOURCE_8, check=true, group="Sources", size=11, var=8, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0.75,1,0.25,0.5} },
|
|
{ text=BATTLE_PET_SOURCE_9, check=true, group="Sources", size=11, var=9, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0,0.25,0.5,0.75} },
|
|
{ text=BATTLE_PET_SOURCE_10, check=true, group="Sources", size=11, var=10, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0.25,0.5,0.5,0.75} },
|
|
{ text=BATTLE_PET_SOURCE_11, check=true, group="Sources", size=11, var=11, value=rmf.GetValue, func=rmf.ToggleValue, icon="Interface\\AddOns\\Rematch\\Textures\\sources", iconCoords={0.5,0.75,0.5,0.75} },
|
|
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Checkbox Groups"], tooltipBody=format(L["In filter menus, checkbox groups assume if nothing is checked you want to view all choices.\n\nYou can also:\n\n%s[Shift]+Click\124r to check all except the box clicked.\n\n%s[Alt]+Click\124r to uncheck all except the box clicked."],rematch.hexWhite,rematch.hexWhite) },
|
|
{ text=RESET, group="Sources", stay=true, func=rmf.ResetGroup },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("PetExpansion", {
|
|
{ text=EXPANSION_NAME0, check=true, group="Expansion", size=9, var=0, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=EXPANSION_NAME1, check=true, group="Expansion", size=9, var=1, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=EXPANSION_NAME2, check=true, group="Expansion", size=9, var=2, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=EXPANSION_NAME3, check=true, group="Expansion", size=9, var=3, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=EXPANSION_NAME4, check=true, group="Expansion", size=9, var=4, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=EXPANSION_NAME5, check=true, group="Expansion", size=9, var=5, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=EXPANSION_NAME6, check=true, group="Expansion", size=9, var=6, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=EXPANSION_NAME7, check=true, group="Expansion", size=9, var=7, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=EXPANSION_NAME8, check=true, group="Expansion", size=9, var=8, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Checkbox Groups"], tooltipBody=format(L["In filter menus, checkbox groups assume if nothing is checked you want to view all choices.\n\nYou can also:\n\n%s[Shift]+Click\124r to check all except the box clicked.\n\n%s[Alt]+Click\124r to uncheck all except the box clicked."],rematch.hexWhite,rematch.hexWhite) },
|
|
{ text=RESET, group="Expansion", stay=true, func=rmf.ResetGroup },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("PetRarity", { -- Filter->Rarity
|
|
{ text=rmf.RarityText, check=true, group="Rarity", size=4, var=1, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.RarityText, check=true, group="Rarity", size=4, var=2, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.RarityText, check=true, group="Rarity", size=4, var=3, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.RarityText, check=true, group="Rarity", size=4, var=4, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Checkbox Groups"], tooltipBody=format(L["In filter menus, checkbox groups assume if nothing is checked you want to view all choices.\n\nYou can also:\n\n%s[Shift]+Click\124r to check all except the box clicked.\n\n%s[Alt]+Click\124r to uncheck all except the box clicked."],rematch.hexWhite,rematch.hexWhite) },
|
|
{ text=RESET, group="Rarity", stay=true, func=rmf.ResetGroup },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("PetLevel", { -- Filter->Level
|
|
{ text=L["Low Level (1-7)"], check=true, group="Level", size=4, var=1, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=L["Mid Level (8-14)"], check=true, group="Level", size=4, var=2, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=L["High Level (15-24)"], check=true, group="Level", size=4, var=3, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=L["Max Level (25)"], check=true, group="Level", size=4, var=4, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ spacer=true },
|
|
{ text=L["Without Any 25s"], radio=true, group="Level", radioGroup="Level", var="Without25s", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ text=L["Moveset Not At 25"], radio=true, group="Level", radioGroup="Level", var="MovesetNot25", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ spacer=true },
|
|
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Level"], tooltipBody=format(L["You can filter to a specific level or range of levels in the search box. For example, search for:\n\n\%slevel=1\124r\nor\n\%slevel=21-23\124r"],rematch.hexWhite,rematch.hexWhite) },
|
|
{ text=RESET, group="Level", stay=true, func=rmf.ResetGroup },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("PetBreed", { -- Filter->Breed
|
|
{ text=rmf.GetBreedName, check=true, group="Breed", var=3, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.GetBreedName, check=true, group="Breed", var=4, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.GetBreedName, check=true, group="Breed", var=5, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.GetBreedName, check=true, group="Breed", var=6, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.GetBreedName, check=true, group="Breed", var=7, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.GetBreedName, check=true, group="Breed", var=8, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.GetBreedName, check=true, group="Breed", var=9, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.GetBreedName, check=true, group="Breed", var=10, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.GetBreedName, check=true, group="Breed", var=11, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=rmf.GetBreedName, check=true, group="Breed", var=12, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=NEW, check=true, group="Breed", var=0, size=12, value=rmf.GetValue, func=rmf.ToggleValue },
|
|
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Breed"], tooltipBody=function() return format(L["All breed data is pulled from your installed %s%s\124r addon.\n\nThe breed \"New\" categorizes pets with no breed data. Keep your breed addon up to date to see if they have new data."],rematch.hexWhite,GetAddOnMetadata(rematch:GetBreedSource(),"Title") or rematch:GetBreedSource()) end },
|
|
{ text=RESET, group="Breed", stay=true, func=rmf.ResetTypeGroup },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("PetOther", { -- Filter->Other
|
|
{ text=L["Leveling"], radio=true, group="Other", radioGroup="Leveling", var="Leveling", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ text=L["Not Leveling"], radio=true, group="Other", radioGroup="Leveling", var="NotLeveling", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ spacer=true },
|
|
{ text=L["Tradable"], radio=true, group="Other", radioGroup="Tradable", var="Tradable", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ text=L["Not Tradable"], radio=true, group="Other", radioGroup="Tradable", var="NotTradable", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ spacer=true },
|
|
{ text=L["Can Battle"], hidden=rmf.NonBattlePetsHidden, radio=true, group="Other", radioGroup="Battle", var="Battle", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ text=L["Can't Battle"], hidden=rmf.NonBattlePetsHidden, radio=true, group="Other", radioGroup="Battle", var="NotBattle", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ spacer=true, hidden=rmf.NonBattlePetsHidden },
|
|
{ text=L["One Copy"], radio=true, group="Other", radioGroup="Quantity", var="Qty1", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ text=L["Two+ Copies"], radio=true, group="Other", radioGroup="Quantity", var="Qty2", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ text=L["Three+ Copies"], radio=true, group="Other", radioGroup="Quantity", var="Qty3", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ spacer=true },
|
|
{ text=L["In A Team"], radio=true, group="Other", radioGroup="Team", var="InTeam", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ text=L["Not In A Team"], radio=true, group="Other", radioGroup="Team", var="NotInTeam", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ spacer=true },
|
|
{ text=L["Unique Moveset"], radio=true, group="Other", radioGroup="Moveset", var="UniqueMoveset", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ text=L["Shared Moveset"], radio=true, group="Other", radioGroup="Moveset", var="SharedMoveset", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ spacer=true },
|
|
{ text=L["Current Zone"], check=true, group="Other", radioGroup="Zone", var="CurrentZone", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ text=L["Hidden Pets"], hidden=function() return not settings.AllowHiddenPets end, check=true, group="Other", radioGroup="Hidden", var="Hidden", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ text=L["Has Notes"], check=true, group="Other", radioGroup="Notes", var="HasNotes", value=rmf.GetValue, func=rmf.ToggleRadio },
|
|
{ spacer=true },
|
|
{ text=RESET, group="Other", stay=true, func=rmf.ResetGroup },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("PetSort", { -- Filter->Sort
|
|
{ text=NAME, radio=true, order=1, var="Order", value=rmf.GetSort, func=rmf.SetSort },
|
|
{ text=LEVEL, radio=true, order=2, var="Order", value=rmf.GetSort, func=rmf.SetSort },
|
|
{ text=RARITY, radio=true, order=3, var="Order", value=rmf.GetSort, func=rmf.SetSort },
|
|
{ text=TYPE, radio=true, order=4, var="Order", value=rmf.GetSort, func=rmf.SetSort },
|
|
{ text=PET_BATTLE_STAT_HEALTH, radio=true, var="Order", order=5, value=rmf.GetSort, func=rmf.SetSort },
|
|
{ text=PET_BATTLE_STAT_POWER, radio=true, var="Order", order=6, value=rmf.GetSort, func=rmf.SetSort },
|
|
{ text=PET_BATTLE_STAT_SPEED, radio=true, var="Order", order=7, value=rmf.GetSort, func=rmf.SetSort },
|
|
{ spacer=true },
|
|
{ text=L["Reverse Sort"], check=true, var="Reverse", value=rmf.GetSort, func=rmf.SetSort },
|
|
{ text=L["Favorites First"], check=true, var="FavoritesFirst", value=rmf.GetSort, func=rmf.SetSort },
|
|
{ spacer=true },
|
|
{ text=L["Help"], stay=true, hidden=rmf.HideMenuHelp, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Sort By"], tooltipBody=format(L["You can filter to a specific range of stats too. For example, search for:\n\n\%shealth>500\124r\nor\n\%sspeed=200-300\124r\n\nThe sort order is not ordinarily reset when filters are reset. The option %sReset Sort With Filters\124r in the Options tab will reset the sort when you reset the filters."],rematch.hexWhite,rematch.hexWhite,rematch.hexWhite) },
|
|
{ text=RESET, stay=true, func=roster.ClearSort },
|
|
},rematch.UpdateRoster)
|
|
|
|
rematch:RegisterMenu("FindAbility", {
|
|
{ text=function(entry,abilityID) return (select(2,C_PetBattles.GetAbilityInfoByID(abilityID))) end, title=true },
|
|
{ text=L["Find Pets With This Ability"], func=function(entry,abilityID) rematch:SearchAbility(abilityID) end },
|
|
{ text=CANCEL },
|
|
})
|
|
end)
|
|
|
|
function rmf:GetSpecialLabel(slot)
|
|
local petID = rematch:GetSpecialSlot(slot)
|
|
if not petID then
|
|
return self.type=="leveling" and L["Put Leveling Pet Here"] or self.type=="random" and L["Put Random Pet Here"] or L["Ignore This Slot"]
|
|
else
|
|
return self.type=="leveling" and L["Stop Leveling This Slot"] or self.type=="random" and L["Stop Randomizing This Slot"] or L["Stop Ignoring This Slot"]
|
|
end
|
|
end
|
|
|
|
function rmf:IsSpecialHidden(slot)
|
|
local petID = rematch:GetSpecialSlot(slot)
|
|
if not petID then
|
|
return false
|
|
else
|
|
return self.petID~=petID
|
|
end
|
|
end
|
|
|
|
-- alternate hidden for non-submenu'd random special slot
|
|
function rmf:IsSpecialNotRandom(slot)
|
|
local petID = rematch:GetSpecialSlot(slot)
|
|
return not (petID and rematch:GetSpecialPetIDType(petID)=="random")
|
|
end
|
|
|
|
-- func for the Put Leveling/Ignored Pet here
|
|
function rmf:SetSpecialSlot(slot)
|
|
if rematch:GetSpecialSlot(slot) then -- if slot already special, make it not special
|
|
rematch:SetSpecialSlot(slot,nil)
|
|
else -- if it wasn't special, then make it special with menu item's petID
|
|
-- this flags the slot only (no pets actually slotted yet)
|
|
rematch:SetSpecialSlot(slot,self.petID)
|
|
-- if this is a random petID
|
|
if rematch:GetSpecialPetIDType(self.petID)=="random" then
|
|
-- get the two other loadout pets so they aren't picked as a random pet
|
|
local next1 = slot%3+1
|
|
local noPetID1 = C_PetJournal.GetPetLoadOutInfo(next1)
|
|
local next2 = next1%3+1
|
|
local noPetID2 = C_PetJournal.GetPetLoadOutInfo(next2)
|
|
-- then pick a random pet from the random petID (that's not already loaded)
|
|
local petID = rematch:PickRandomPet(self.petID,noPetID1,noPetID2)
|
|
if petID then
|
|
rematch:SlotPet(slot,petID) -- and slot it if found
|
|
end
|
|
end
|
|
end
|
|
rematch:UpdateQueue() -- this will also trigger an UpdateUI
|
|
end
|
|
|
|
function rmf:GetValue() return roster:GetFilter(self.group,self.var) end
|
|
function rmf:GetNotValue() return not roster:GetFilter(self.group,self.var) end
|
|
function rmf:ToggleNotValue(subject,checked) roster:SetFilter(self.group,self.var,checked) end
|
|
function rmf:GroupUsed() return not roster:IsFilterClear(self.group) end
|
|
function rmf:GetIcon() return "Interface\\Icons\\Icon_PetFamily_"..PET_TYPE_SUFFIX[self.var] end
|
|
function rmf:ResetGroup() roster:ClearFilter(self.group) end
|
|
function rmf:RarityText() return "\124c"..select(4,GetItemQualityColor(self.var-1)).._G["BATTLE_PET_BREED_QUALITY"..self.var] end
|
|
function rmf:GetSort() if self.order then return roster:GetSort(self.var)==self.order else return roster:GetSort(self.var) end end
|
|
function rmf:SetSort(subject,checked) roster:SetSort(self.var,self.order or not checked) end
|
|
function rmf:HideMenuHelp() return settings.HideMenuHelp end
|
|
|
|
function rmf:ResetTypeGroup()
|
|
if roster:IsFilterUsed(self.group) then
|
|
roster:ClearFilter(self.group)
|
|
else
|
|
roster:ClearFilter("Types")
|
|
roster:ClearFilter("Strong")
|
|
roster:ClearFilter("Tough")
|
|
end
|
|
end
|
|
|
|
function rmf:ToggleValue(subject,checked)
|
|
local startIndex = (self.group=="Expansion" and 0 or self.group=="Breed" and 3 or 1)
|
|
if IsShiftKeyDown() then -- if shift is held, it will uncheck one being toggled and check all others in group
|
|
for i=startIndex,self.size do
|
|
roster:SetFilter(self.group,i,i~=self.var)
|
|
end
|
|
if self.group=="Breed" then
|
|
roster:SetFilter(self.group,0,self.var~=0)
|
|
end
|
|
if self.group=="Level" then -- special handling for level hybrid check/radio group
|
|
roster:ClearRadio("Level","Level")
|
|
end
|
|
elseif IsAltKeyDown() then -- if alt is held, check only one being clicked
|
|
for i=startIndex,self.size do
|
|
roster:SetFilter(self.group,i,i==self.var)
|
|
end
|
|
if self.group=="Breed" then
|
|
roster:SetFilter(self.group,0,self.var==0)
|
|
end
|
|
else
|
|
roster:SetFilter(self.group,self.var,not checked)
|
|
if not checked and self.group=="Level" then
|
|
roster:ClearRadio("Level","Level")
|
|
end
|
|
end
|
|
local typeMode = self.group=="Types" and 1 or self.group=="Strong" and 2 or self.group=="Tough" and 3
|
|
if typeMode then
|
|
rematch.PetPanel:SetTypeMode(typeMode)
|
|
end
|
|
-- if all in group are checked, then uncheck them all
|
|
if roster:IsFilterFull(self.group,self.size) then
|
|
roster:ClearFilter(self.group)
|
|
end
|
|
end
|
|
|
|
-- for radio buttons that can be toggled on/off (Level and Other filter group)
|
|
function rmf:ToggleRadio(subject,checked)
|
|
if checked then -- unchecking never affects other radios
|
|
roster:SetFilter(self.group,self.var,nil)
|
|
else
|
|
if self.group=="Level" then
|
|
roster:ClearFilter(self.group)
|
|
else
|
|
roster:ClearRadio(self.group,self.radioGroup)
|
|
end
|
|
roster:SetFilter(self.group,self.var,true)
|
|
end
|
|
if self.var=="CurrentZone" then
|
|
roster:UpdateZoneRegistration()
|
|
end
|
|
end
|
|
|
|
function rmf:GetBreedName()
|
|
return rematch:GetBreedNameByID(self.var)
|
|
end
|
|
|
|
function rmf:NotBreedable()
|
|
return not rematch:GetBreedSource()
|
|
--return rematch.breedSource~="BattlePetBreedID" and rematch.breedSource~="PetTracker_Breeds" and rematch.breedSource~="LibPetBreedInfo-1.0"
|
|
end
|
|
|
|
-- returns true if the queue menu should not show
|
|
function rmf:IsNotQueuePet()
|
|
-- local parent = rematch:GetMenuParent():GetParent()
|
|
-- local miniParent = RematchMiniQueueListScrollFrameScrollChild -- needs more scroll
|
|
-- return settings.QueueActiveSort or (parent~=queueParent and parent~=miniParent and parent:GetParent()~=miniParent)
|
|
return settings.QueueActiveSort or not rematch:GetMenuParent().forQueue
|
|
end
|
|
|
|
-- returns true if the open menu is for a pet panel pet
|
|
function rmf:ForPetPanel()
|
|
local parent = rematch:GetMenuParent():GetParent()
|
|
return parent and parent:GetParent() and parent:GetParent()==Rematch.PetPanel.List.ScrollFrame
|
|
end
|
|
|
|
-- returns true if the petID (can be a speciesID) is hidden
|
|
function rmf:PetIsHidden(petID)
|
|
if settings.HiddenPets then
|
|
local speciesID = rematch:GetPetSpeciesID(petID)
|
|
return speciesID and settings.HiddenPets[speciesID]
|
|
end
|
|
end
|
|
|
|
function rmf:ShowHidePetDialog(petID)
|
|
if settings.DontConfirmHidePets then
|
|
roster:SetHidePet(petID,true)
|
|
else
|
|
local speciesID = rematch:GetPetSpeciesID(petID)
|
|
local name = C_PetJournal.GetPetInfoBySpeciesID(speciesID)
|
|
if speciesID and name then
|
|
local dialog = rematch:ShowDialog("HidePet",300,240,L["Hide Pet"],L["Hide this pet?"],YES,function() roster:SetHidePet(petID,true) end,NO)
|
|
dialog.CheckButton:SetPoint("BOTTOMLEFT",48,64)
|
|
dialog.CheckButton.text:SetText(L["Don't Ask When Hiding Pets"])
|
|
dialog.CheckButton:Show()
|
|
dialog.CheckButton:SetScript("OnClick",function(self) settings.DontConfirmHidePets=self:GetChecked() end)
|
|
dialog.Slot:SetPoint("TOPLEFT",12,-32)
|
|
rematch:FillPetSlot(dialog.Slot,petID,true)
|
|
dialog.Slot:Show()
|
|
dialog:ShowText(format(L["Are you sure you want to hide all versions of %s%s\124r?\n\nHidden pets will not show up in the pet list or searches. You can view or unhide these pets in the 'Other' filter."],rematch.hexWhite,name),224,112,"TOPLEFT",dialog.Slot,"TOPRIGHT",6,0)
|
|
end
|
|
end
|
|
end
|
|
|
|
function rmf:PetCantBattle(petID)
|
|
local idType = rematch:GetIDType(petID)
|
|
if idType=="pet" then
|
|
if select(15,C_PetJournal.GetPetInfoByPetID(petID)) then
|
|
return false -- owned pet can battle, return false (don't hide)
|
|
end
|
|
elseif idType=="species" then
|
|
if select(8,C_PetJournal.GetPetInfoBySpeciesID(petID)) then
|
|
return false -- missing pet can battle, return false (don't hide)
|
|
end
|
|
end
|
|
return true -- hide if we reached here
|
|
end
|
|
|
|
|
|
function rmf:NonBattlePetsHidden(petID)
|
|
return settings.HideNonBattlePets
|
|
end
|
|
|
|
--[[ Favorite Filters menu ]]
|
|
|
|
-- this should be called whenever the favorite filter data changes (login, saving and deleting)
|
|
function rmf:UpdateFavoriteFilterMenu()
|
|
local favs = settings.FavoriteFilters
|
|
local menu = rematch.favoriteFilterMenu
|
|
wipe(menu)
|
|
for i=1,#favs do
|
|
tinsert(menu,{text=favs[i][1],deleteButton=true,index=i,func=rmf.LoadFavoriteFilter,deleteFunc=rmf.DeleteFavoriteFilter})
|
|
end
|
|
if #favs>0 then
|
|
tinsert(menu,{spacer=true})
|
|
end
|
|
tinsert(menu,{text=L["Save Filter"],icon="Interface\\GuildBankFrame\\UI-GuildBankFrame-NewTab",disabled=rmf.FiltersClear,disabledReason=L["A filter must be active before it can be saved."],func=rmf.ShowSaveFilterDialog})
|
|
end
|
|
|
|
-- returns true if all filter groups are clear (excludes search)
|
|
function rmf:FiltersClear()
|
|
for filter,filterName in pairs(roster.filterGroups) do
|
|
if roster:IsFilterUsed(filter) then
|
|
return false
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
function rmf:ShowSaveFilterDialog()
|
|
local dialog = rematch:ShowDialog("SaveFilter",300,242,L["Save Filter"],L["Save this as a favorite filter?"],SAVE,rmf.SaveFilterAccept,CANCEL)
|
|
local text = format(L["Filters: %s%s\124r\n\nChoose a name to use in the Favorite Filters menu:"],rematch.hexWhite,roster:GetFiltersText(true))
|
|
dialog:ShowText(text,260,80,"TOP",0,-36)
|
|
dialog.EditBox:SetPoint("TOP",dialog.Text,"BOTTOM")
|
|
dialog.Accept:Disable() -- need a name entered
|
|
dialog.EditBox:Show()
|
|
dialog.SmallText:SetSize(220,32)
|
|
dialog.SmallText:SetPoint("TOP",dialog.EditBox,"BOTTOM",0,-4)
|
|
dialog.SmallText:SetText(L["Note: Search text and Sort order are not included in the filter."])
|
|
dialog.SmallText:Show()
|
|
end
|
|
|
|
local function copyFilter(source,destination)
|
|
wipe(destination)
|
|
for group,info in pairs(source) do
|
|
destination[group] = {}
|
|
for k,v in pairs(info) do
|
|
destination[group][k] = v
|
|
end
|
|
end
|
|
end
|
|
|
|
-- accept click of the SaveFilter dialog for favorite filters
|
|
function rmf:SaveFilterAccept()
|
|
local name = rematch.Dialog.EditBox:GetText()
|
|
if not name or name:len()==0 or rmf:FiltersClear() then return end
|
|
tinsert(settings.FavoriteFilters,{name,{}})
|
|
copyFilter(settings.Filters,settings.FavoriteFilters[#settings.FavoriteFilters][2])
|
|
rmf:UpdateFavoriteFilterMenu()
|
|
end
|
|
|
|
function rmf:LoadFavoriteFilter()
|
|
local menu = settings.FavoriteFilters[self.index][2]
|
|
for group in pairs(roster.filterGroups) do
|
|
if not menu[group] then
|
|
menu[group] = {} -- make sure old filters have each filter group when copying to live filter
|
|
end
|
|
end
|
|
if menu then
|
|
copyFilter(menu,settings.Filters)
|
|
end
|
|
end
|
|
|
|
function rmf:DeleteFavoriteFilter()
|
|
rematch:HideMenu() -- we're here from a button on the menu, wasn't the menu itself really
|
|
local dialog = rematch:ShowDialog("DeleteFilter",300,118,L["Delete Filter"],nil,YES,function() tremove(settings.FavoriteFilters,self.index) rmf:UpdateFavoriteFilterMenu() end,NO)
|
|
dialog:ShowText(format(L["Are you sure you want to delete the filter named %s%s\124r?"],rematch.hexWhite,settings.FavoriteFilters[self.index][1]),240,40,"TOP",0,-36)
|
|
end
|
|
|
|
--[[ Script Filters menu ]]
|
|
|
|
function rematch:UpdateScriptFilterMenu()
|
|
local scripts = settings.ScriptFilters
|
|
local menu = rematch.scriptFilterMenu
|
|
wipe(menu)
|
|
for i=1,#scripts do
|
|
tinsert(menu,{text=scripts[i][1],index=i,radio=true,value=rmf.IndexIsScript,tooltipBody=rmf.ScriptTooltip,func=rmf.ToggleScript,deleteButton=true,deleteFunc=rmf.DeleteScript,editButton=true,editFunc=rematch.ShowScriptFilterDialog})
|
|
end
|
|
if #scripts>0 then
|
|
tinsert(menu,{spacer=true})
|
|
end
|
|
tinsert(menu,{text=L["New Script"],icon="Interface\\GuildBankFrame\\UI-GuildBankFrame-NewTab",func=rematch.ShowScriptFilterDialog,tooltipBody=L["Create a new pet filter."]})
|
|
tinsert(menu,{text=L["Help"],stay=true,hidden=rmf.HideMenuHelp,icon="Interface\\Common\\help-i",iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["Script Filters"], tooltipBody=L["This allows you to create custom pet filters with a little bit of Lua code. See the reference buttons at the top of the New Script dialog for details.\n\nTo view or edit an existing script, click the Gear icon beside the script in the menu above."]})
|
|
if #scripts>0 then
|
|
tinsert(menu,{text=RESET,group="Script",stay=true,func=rmf.ResetTypeGroup})
|
|
end
|
|
end
|
|
|
|
-- if script has a comment (like this one) as its first line, us it as the tooltip
|
|
function rmf:ScriptTooltip()
|
|
local code = settings.ScriptFilters[self.index] and settings.ScriptFilters[self.index][2]
|
|
if code then
|
|
return code:match("^[^%S]?%-%-[^S]?(.-)\n")
|
|
end
|
|
end
|
|
|
|
-- scripts are radio buttons that can be turned off
|
|
function rmf:ToggleScript(subject,checked)
|
|
if checked then
|
|
roster:ClearFilter("Script")
|
|
else
|
|
rematch:HideDialog() -- close script dialog potentially open
|
|
roster:SetFilter("Script","code",settings.ScriptFilters[self.index][2])
|
|
roster:SetFilter("Script","name",settings.ScriptFilters[self.index][1])
|
|
end
|
|
end
|
|
|
|
-- returns true if the indexed script's code is the one currently filtered
|
|
function rmf:IndexIsScript(subject)
|
|
return settings.ScriptFilters[self.index] and settings.ScriptFilters[self.index][2]==roster:GetFilter("Script","code")
|
|
end
|
|
|
|
-- deleteFunc for script menu item (editFunc is over in ScriptFilter.lua)
|
|
function rmf:DeleteScript()
|
|
local dialog = rematch:ShowDialog("DeleteScript",300,118,L["Delete Script"],nil,YES,function() rmf:DeleteScriptConfirm(self.index) end,NO)
|
|
dialog:ShowText(format(L["Are you sure you want to delete the script named %s%s\124r?"],rematch.hexWhite,settings.ScriptFilters[self.index][1]),240,40,"TOP",0,-36)
|
|
end
|
|
|
|
-- from confirmation dialog, not only deletes the script but if the script's code is
|
|
-- current active, clears the script filter.
|
|
function rmf:DeleteScriptConfirm(index)
|
|
local script = settings.ScriptFilters[index]
|
|
if script then
|
|
local active = roster:GetFilter("Script","code")==script[2] and roster:GetFilter("Script","name")==script[1]
|
|
tremove(settings.ScriptFilters,index)
|
|
if active then
|
|
roster:ClearFilter("Script")
|
|
rematch:UpdateRoster()
|
|
end
|
|
rematch:UpdateScriptFilterMenu()
|
|
end
|
|
end
|