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.

164 lines
11 KiB

local _,L = ...
local rematch = Rematch
local settings,saved,groups
local rmf = {}
rematch:InitModule(function()
settings = RematchSettings
saved = RematchSaved
groups = settings.TeamGroups
-- "TeamMenu" right-click menu for teams
rematch:RegisterMenu("TeamMenu", {
{ title=true, text=function(self,key) return rematch:GetTeamTitle(key,true) end, },
{ text=L["Edit Win Record"], func=function(self,key) rematch:ShowWinRecord(rematch:GetMenuParent(),key,true) end }, -- keep first (so it's always in same spot for muscle memory)
{ text=L["Change Name Or Target"], func=function(self,key)
rematch:SetSideline(key,saved[key])
rematch:SetSidelineContext("deleteOriginal",true)
rematch:ShowSaveAsDialog(L["Edit Team"])
end },
{ text=function(self,key) -- set/remove favorite
return (saved[key] and saved[key].favorite) and BATTLE_PET_UNFAVORITE or BATTLE_PET_FAVORITE
end,
func=function(self,key)
if saved[key] then
saved[key].favorite = (not saved[key].favorite) or nil
rematch:UpdateUI()
end
end },
{ text=L["Set Notes"], func=function(self,key)
rematch.Notes.locked = true
rematch:ShowNotes("team",key,true)
rematch.Notes.Content.ScrollFrame.EditBox:SetFocus(true)
end },
{ text=L["Leveling Preferences"], hidden=function(self,key) for i=1,3 do if saved[key][i][1]==0 then return false end end return true end, func=function(self,key) rematch:ShowPreferencesDialog("team",key) end },
{ text=L["Move To"], subMenu="TeamMove" },
{ spacer=true, hidden=rmf.NotSortable },
{ text=L["Move To Top"], hidden=rmf.NotSortable,stay=true, icon="Interface\\Buttons\\UI-MicroStream-Green", iconCoords={0.075,0.925,0.925,0.075}, disabled=rmf.TeamAtTop, dir=-2, func=rmf.MoveTeamWithinTab },
{ text=L["Move Up"], hidden=rmf.NotSortable, stay=true, icon="Interface\\Buttons\\UI-MicroStream-Yellow", iconCoords={0.075,0.925,0.925,0.075}, disabled=rmf.TeamAtTop, dir=-1, func=rmf.MoveTeamWithinTab },
{ text=L["Move Down"], hidden=rmf.NotSortable, stay=true, icon="Interface\\Buttons\\UI-MicroStream-Yellow", disabled=rmf.TeamAtEnd, dir=1, func=rmf.MoveTeamWithinTab },
{ text=L["Move To End"], hidden=rmf.NotSortable, stay=true, icon="Interface\\Buttons\\UI-MicroStream-Green", disabled=rmf.TeamAtEnd, dir=2, func=rmf.MoveTeamWithinTab },
{ spacer=true, hidden=rmf.NotSortable },
{ text=L["Share"], subMenu="ShareMenu" },
{ text=DELETE, func=function(self,key)
local dialog = rematch:ShowDialog("DeleteTeam",300,176,rematch:GetTeamTitle(key,true),L["Delete this team?"],YES,function(self) saved[key]=nil rematch.petsInTeams:Invalidate() rematch:UpdateUI() end,NO)
dialog.Team:SetPoint("TOP",0,-36)
dialog.Team:Show()
dialog:FillTeam(dialog.Team,saved[key])
end },
{ text=L["Unload Team"], hidden=function(self,key) return not key or key~=settings.loadedTeam end, func=function(self,key)
rematch:UnloadTeam()
rematch:UpdateQueue() -- will do UpdateUI also
end },
{ spacer=true, hidden=rmf.NotForTeamPet },
{ text=L["Put Leveling Pet Here"], hidden=rmf.NotForTeamPet, func=function(self,key)
local slot = rematch:GetMenuParent():GetID()
if saved[key] then
local team,key = rematch:SetSideline(key,saved[key])
team[slot] = {0,0,0,0}
rematch:ShowOverwriteDialog(true,L["Add a leveling pet to this team?"])
end
end },
{ spacer=true, hidden=rmf.NotForTeamPet },
{ text=L["Help"], stay=true, hidden=function() return settings.HideMenuHelp end, icon="Interface\\Common\\help-i", iconCoords={0.15,0.85,0.15,0.85}, tooltipTitle=L["About Teams"], tooltipBody=format(L["Teams named in %sWhite\124r have a target stored within them.\nTeams named in Gold do not.\n\n%sTo change pets or abilities in a team:\124r\n1) Load the team.\n2) Make any changes.\n3) Click Save at the bottom of the window."],rematch.hexWhite,rematch.hexWhite) },
{ text=CANCEL },
})
rematch:RegisterMenu("ShareMenu", {
{ text=L["Copy As Plain Text"], func=function(self,key) rematch:SetSideline(key,saved[key]) rematch:SetSidelineContext("plain",true) rematch:ShowExportDialog(key) end, tooltipBody=L["Format this team into plain text to copy elsewhere, such as forums or emails.\n\nThe plain text format is best for sharing a team with others that may not use Rematch."] },
{ text=L["Export Team"], func=function(self,key) rematch:SetSideline(key,saved[key]) rematch:ShowExportDialog(key) end, tooltipBody=L["Export this team as a string you can copy elsewhere, such as forums or emails.\n\nOther Rematch users can paste this team into their Rematch via Import Team."] },
{ text=L["Import Team"], func=rematch.ShowImportDialog, tooltipBody=L["Import a single team or many teams that were exported from Rematch."] },
{ text=L["Send Team"], disabled=function() return settings.DisableShare end, disabledReason=L["Sharing is disabled in options."],func=function(self,key) rematch:SetSideline(key,saved[key]) rematch:ShowSendDialog() end, tooltipBody=L["Send this team to another online user of Rematch."] }
})
-- "TeamMove" and "TabPick" for moving or changing team tabs
local teamMove = {} -- menu for moving a team to another tba
local tabPick = {} -- menu for changing to another tab
for i=1,RematchTeamTabs.MAX_TABS do
tinsert(teamMove,{tab=i,hidden=rmf.HideTab,text=rmf.TabName,icon=rmf.TabIcon,disabled=rmf.DisableTab,func=rmf.MoveTeam})
tinsert(tabPick,{tab=i,hidden=rmf.HideTab,text=rmf.TabName,icon=rmf.TabIcon,func=rmf.TabPick})
end
rematch:RegisterMenu("TeamMove",teamMove)
rematch:RegisterMenu("TabPick",tabPick)
-- "TeamOptions" is the filter-like menu from the Teams button in topright of team panel
rematch:RegisterMenu("TeamOptions", {
{ text=L["Prompt To Load"], check=true, var="PromptToLoad", value=rmf.GetValue, func=rmf.SetLoadRadio, tooltipBody=L["When your new target has a saved team not already loaded, and the target panel isn't on screen, display a popup asking if you want to load the team.\n\nThis is only for the first interaction with a target. You can always load a target's team from the target panel."] },
{ text=L["With Rematch Window"], indent=8, check=true, value=rmf.GetValue, var="PromptWithMinimized", disabled=rmf.NotPromptToLoad, func=rmf.ToggleValue, tooltipBody=L["Prompt to load with the Rematch window instead of a separate popup dialog."] },
{ text=L["Always Prompt"], indent=8, check=true, value=rmf.GetValue, var="PromptAlways", disabled=rmf.NotPromptToLoad, func=rmf.ToggleValue, tooltipBody=L["Prompt every time you interact with a target with a saved team not already loaded, instead of only the first time."] },
{ text=L["Auto Load"], check=true, var="AutoLoad", value=rmf.GetValue, func=rmf.SetLoadRadio, tooltipBody=L["When you mouseover a new target that has a saved team not already loaded, immediately load it.\n\nThis is only for the first interaction with a target. You can always load a target's team from the target panel."] },
{ text=L["Show After Loading"], indent=8, check=true, value=rmf.GetValue, var="AutoLoadShow", disabled=rmf.NotAutoLoad, func=rmf.ToggleValue, tooltipBody=L["After a team auto loads, show the Rematch window."] },
{ text=L["Show On Injured"], indent=8, check=true, value=rmf.GetValue, var="ShowOnInjured", disabled=rmf.NotAutoLoad, func=rmf.ToggleValue, tooltipBody=L["When a team auto loads, show the Rematch window if any pets are injured."] },
{ text=L["On Target Only"], indent=8, check=true, value=rmf.GetValue, var="AutoLoadTargetOnly", disabled=rmf.NotAutoLoad, func=rmf.ToggleValue, tooltipBody=L["Auto load upon targeting only, not mouseover.\n\n\124cffff4040WARNING!\124r This is not recommended! It can be too late to load pets if you target with right-click!"] },
{ spacer=true },
{ text=L["Export Listed Teams"], func=function() rematch.Dialog.Share:ExportTeamTab() end, tooltipBody=L["Export all teams listed below to a string you can copy elsewhere, such as forums or emails.\n\nOther Rematch users can then paste these teams into their Rematch via Import Teams.\n\nYou can export a single team by right-clicking one and choosing its Share menu."] },
{ text=L["Backup All Teams"], func=rematch.ShowBackupDialog, tooltipBody=L["This will export all teams across all tabs into text that you can paste elsewhere, such as an email to yourself or a text file someplace safe. You can later restore these teams with the Import Teams option."] },
{ text=L["Import Teams"], func=rematch.ShowImportDialog, tooltipBody=L["Import a single team or many teams that were exported from Rematch."] },
{ text=L["Import From Pet Battle Teams"], hidden=function() return not IsAddOnLoaded("PetBattleTeams") end, tooltipBody=L["Copy your existing teams from Pet Battle Teams to Rematch."], func=rematch.ShowImportPBTDialog },
},rematch.UpdateAutoLoadState)
end)
function rmf:TabName() return settings.TeamGroups[self.tab][1] end
function rmf:TabIcon() return settings.TeamGroups[self.tab][2] end
function rmf:HideTab() return not settings.TeamGroups[self.tab] end
function rmf:DisableTab(key) return self.tab==(saved[key].tab or 1) end
function rmf:MoveTeam(key) saved[key].tab = self.tab>1 and self.tab or nil if key and settings.loadedTeam==key then rematch:ShowTeam(key) else rematch:UpdateUI() end end
function rmf:TabPick() rematch.TeamTabs:SelectTeamTab(self.tab) end
function rmf:GetValue() return settings[self.var] end
function rmf:ToggleValue(_,checked) settings[self.var]=not checked end
function rmf:NotPromptToLoad() return not settings.PromptToLoad end
function rmf:NotAutoLoad() return not settings.AutoLoad end
function rmf:SetLoadRadio(_,checked)
if checked then
settings[self.var] = nil
return
else
settings.AutoLoad = nil
settings.PromptToLoad = nil
settings[self.var] = true
end
end
function rmf:NotForTeamPet()
local petID = rematch:GetMenuParent().petID
return not (petID and petID~=0)
end
function rmf:NotSortable(key)
local tab = saved[key] and (saved[key].tab or 1)
return not settings.TeamGroups[tab] or not settings.TeamGroups[tab][3] or rematch:GetMenuParent()==rematch.LoadedTeamPanel
end
function rmf:TeamAtTop(key)
return settings.TeamGroups[saved[key].tab or 1][3][1]==key
end
function rmf:TeamAtEnd(key)
local custom = settings.TeamGroups[saved[key].tab or 1][3]
return custom[#custom]==key
end
function rmf:MoveTeamWithinTab(key)
-- self.dir -2 for top, -1 for up, 1 for down, 2 for end
local custom = settings.TeamGroups[saved[key].tab or 1][3]
local oldIndex -- find the original index
for i=1,#custom do
if custom[i]==key then
oldIndex = i
break
end
end
if self.dir==-2 then -- moving to top
tremove(custom,oldIndex)
tinsert(custom,1,key)
elseif self.dir==2 then -- moving to end
tremove(custom,oldIndex)
tinsert(custom,key)
elseif self.dir==-1 then -- moving up
local oldKey = custom[oldIndex-1]
custom[oldIndex-1] = key
custom[oldIndex] = oldKey
elseif self.dir==1 then -- moving down
local oldKey = custom[oldIndex+1]
custom[oldIndex+1] = key
custom[oldIndex] = oldKey
end
rematch.TeamPanel:Update()
rematch:ShowTeam(key)
end