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.
193 lines
7.6 KiB
193 lines
7.6 KiB
local _,L = ...
|
|
local rematch = Rematch
|
|
local dialog = RematchDialog
|
|
local settings, saved
|
|
|
|
rematch:InitModule(function()
|
|
settings = RematchSettings
|
|
saved = RematchSaved
|
|
dialog:UpdateTabPicker()
|
|
rematch:RegisterMenu("SaveAsTarget",{
|
|
{ text=L["No Target"], npcID=nil, func=rematch.PickNpcID },
|
|
{ text=function() return rematch:GetNameFromNpcID(rematch.recentTarget) end, hidden=function() return not rematch.recentTarget end, npcID=function() return rematch.recentTarget end, func=rematch.PickNpcID },
|
|
{ text=function() return rematch:GetTeamTitle(settings.loadedTeam) end, hidden=function() return type(settings.loadedTeam)~="number" or settings.loadedTeam==rematch.recentTarget or settings.loadedTeam==1 end, npcID=function() return settings.loadedTeam end, func=rematch.PickNpcID },
|
|
{ text=L["Noteworthy Targets"], subMenu="TargetMenu" }, -- defined in Npcs.lua
|
|
})
|
|
dialog.SaveAs.Target.tooltipTitle=L["Target For This Team"]
|
|
dialog.SaveAs.Target.tooltipBody=L["A target stored in a team is used to decide which team to load when you return to that target.\n\nYou can save an unlimited number of teams to fight a target, but a target can only be saved in one team."]
|
|
dialog.SaveAs.Name.Label:SetText(L["Name:"])
|
|
dialog.SaveAs.Target.Label:SetText(L["Target:"])
|
|
end)
|
|
|
|
function rematch:ShowSaveAsDialog(header)
|
|
rematch:ShowDialog("SaveAs",300,140+dialog.SaveAs:GetHeight(),header or L["Save As.."],L["Save this team?"],SAVE,rematch.SaveAsAccept,CANCEL)
|
|
dialog.SaveAs:SetPoint("TOP",0,-40)
|
|
dialog.SaveAs:Show()
|
|
dialog.TabPicker:SetPoint("TOPRIGHT",dialog.SaveAs.Target,"BOTTOMRIGHT",0,-6)
|
|
dialog.TabPicker:Show()
|
|
rematch:UpdateSaveAsDialog() -- fills in stuff
|
|
end
|
|
|
|
function dialog.SaveAs.Target:OnClick()
|
|
rematch:ToggleMenu("SaveAsTarget","TOPRIGHT",self,"BOTTOMRIGHT",0,2)
|
|
end
|
|
|
|
function rematch:UpdateSaveAsDialog()
|
|
dialog:UpdateTabPicker()
|
|
local team,key = rematch:GetSideline()
|
|
dialog:FillTeam(dialog.SaveAs.Team,team)
|
|
dialog.SaveAs.Name:SetFontObject(type(key)=="number" and "GameFontHighlight" or "GameFontNormal")
|
|
dialog.SaveAs.Name:SetText(rematch:GetSidelineTitle())
|
|
dialog.SaveAs.Target.Text:SetText(rematch:GetNameFromNpcID(key))
|
|
dialog.SaveAs.Themselves:Hide()
|
|
local height = 180
|
|
local yoff = -40
|
|
if rematch:GetSidelineContext("AskingOverwriteNotes") then
|
|
-- if saving from loadout, and team has notes (determined in CheckToOverwriteNotesAndPreferences)
|
|
-- which also sets this context, then attach a checkbox for "Save Notes & Preferences too"
|
|
dialog.CheckButton:SetPoint("TOPLEFT",dialog.SaveAs.Target,"BOTTOMLEFT",-32,yoff)
|
|
dialog.CheckButton.text:SetText(L["Save Notes & Preferences Too"])
|
|
dialog.CheckButton:Show()
|
|
dialog.CheckButton:SetChecked(settings.OverwriteNotes and true)
|
|
dialog.CheckButton:SetScript("OnClick",function(self) settings.OverwriteNotes=self:GetChecked() end)
|
|
height = height + 28
|
|
yoff = yoff - 28
|
|
end
|
|
dialog.SaveAs:SetHeight(height)
|
|
rematch:SaveAsUpdateWarning()
|
|
end
|
|
|
|
function rematch:SaveAsUpdateWarning()
|
|
local name = dialog.SaveAs.Name:GetText()
|
|
local team,key = rematch:GetSideline()
|
|
local warn
|
|
if name and name:len()==0 then
|
|
warn = L["All teams must have a name."]
|
|
elseif rematch:GetSidelineContext("originalKey")~=key and saved[key] then
|
|
if type(key)=="number" then
|
|
warn = L["This target already has a team."]
|
|
else
|
|
warn = L["A team already has this name."]
|
|
end
|
|
end
|
|
if warn then
|
|
dialog.Warning:SetPoint("TOP",dialog.SaveAs,"BOTTOM",0,-4)
|
|
dialog.Warning.Text:SetText(warn)
|
|
dialog.Warning:Show()
|
|
else
|
|
dialog.Warning:Hide()
|
|
end
|
|
dialog:SetHeight((warn and 140 or 108)+dialog.SaveAs:GetHeight())
|
|
end
|
|
|
|
-- call to change target in the SaveAs dialog
|
|
function rematch:SetSaveAsTarget(npcID)
|
|
local team,key = rematch:GetSideline()
|
|
if npcID~=key then
|
|
if npcID then
|
|
rematch:ChangeSidelineKey(npcID)
|
|
team,key = rematch:GetSideline() -- need to get them again since table changes
|
|
if saved[npcID] then
|
|
team.teamName = saved[npcID].teamName
|
|
else
|
|
team.teamName = rematch:GetNameFromNpcID(npcID)
|
|
end
|
|
else
|
|
rematch:ChangeSidelineKey(rematch:GetSidelineContext("originalName"))
|
|
team,key = rematch:GetSideline() -- need to get them again since table changes
|
|
team.teamName = nil
|
|
end
|
|
end
|
|
rematch:UpdateSaveAsDialog()
|
|
end
|
|
|
|
function dialog.SaveAs.Name:OnTextChanged()
|
|
local text = self:GetText()
|
|
if text:len()==0 then
|
|
dialog.Accept:Disable()
|
|
else
|
|
dialog.Accept:Enable()
|
|
if text~=rematch:GetSidelineTitle() then
|
|
local team,key = rematch:GetSideline()
|
|
if type(key)=="number" then
|
|
team.teamName = text -- if an npcID-indexed team, it can be any name
|
|
else
|
|
rematch:ChangeSidelineKey(text)
|
|
end
|
|
end
|
|
end
|
|
rematch:SaveAsUpdateWarning()
|
|
end
|
|
|
|
-- when the Save button is clicked in the SaveAs dialog
|
|
function rematch:SaveAsAccept()
|
|
local team,key = rematch:GetSideline()
|
|
if not saved[key] or not rematch:SidelinePetsDifferentThan(key) then
|
|
rematch:PushSideline()
|
|
rematch:ShowTeam(key)
|
|
else
|
|
rematch:ShowOverwriteDialog()
|
|
end
|
|
end
|
|
|
|
-- returns true if the sidelined team's pets are different than the team of the passed key
|
|
function rematch:SidelinePetsDifferentThan(key)
|
|
local team1 = rematch:GetSideline()
|
|
local team2 = saved[key]
|
|
if team1 and team2 then
|
|
for i=1,3 do
|
|
if team1[i][1]~=team2[i][1] then
|
|
return true -- a pet is different
|
|
end
|
|
end
|
|
if team1.notes~=team2.notes or team1.minHP~=team2.minHP or team1.maxXP~=team2.maxXP or team1.minXP~=team2.minXP or team1.maxHP~=team2.maxHP then
|
|
return true -- notes or preferences are different
|
|
end
|
|
return false -- the three pets are the same
|
|
end
|
|
return true -- one or both teams doesn't exist
|
|
end
|
|
|
|
-- shows an overwrite dialog to confirm whether to save a team
|
|
-- make noDialog true when declining shouldn't return to the SaveAs dialog
|
|
function rematch:ShowOverwriteDialog(noDialog,prompt)
|
|
rematch:ShowDialog("Overwrite",300,350,L["Overwrite Team"],prompt or L["Overwrite this team?"],YES,rematch.OverwriteAccept,NO,not noDialog and rematch.ShowSaveAsDialog or nil)
|
|
local team,key = rematch:GetSideline()
|
|
dialog.Text:SetSize(260,72)
|
|
if noDialog then -- no need to explain why overwrite happening, just show team name
|
|
dialog.Text:SetSize(260,32)
|
|
dialog.Text:SetJustifyH("CENTER")
|
|
dialog.Text:SetText(rematch:GetTeamTitle(key,true))
|
|
dialog:SetHeight(310)
|
|
else
|
|
if type(key)=="number" then
|
|
dialog.Text:SetText(format(L["The target %s%s\124r already has a team.\n\nA target can only have one team."],rematch.hexWhite,rematch:GetNameFromNpcID(key)))
|
|
else
|
|
dialog.Text:SetText(format(L["A team named %s%s\124r already exists.\n\nTeams without a target must have a unique name."],rematch.hexWhite,key))
|
|
end
|
|
end
|
|
dialog.Text:SetPoint("TOP",0,-32)
|
|
dialog.Text:Show()
|
|
dialog.OldTeam:SetPoint("TOP",dialog.Text,"BOTTOM")
|
|
dialog.OldTeam:Show()
|
|
dialog:FillTeam(dialog.OldTeam,saved[key])
|
|
dialog.Team:SetPoint("TOP",dialog.OldTeam,"BOTTOM",0,-32)
|
|
dialog.Team:Show()
|
|
dialog:FillTeam(dialog.Team,team)
|
|
end
|
|
|
|
-- when accept clicked on overwrite dialog
|
|
function rematch:OverwriteAccept()
|
|
local _,key = rematch:GetSideline()
|
|
rematch:PushSideline()
|
|
rematch:ShowTeam(key)
|
|
end
|
|
|
|
-- to be called after a loaded team is sidelined (Save As... or target's Save button)
|
|
-- will turn on AskingOverwriteNotes to know whether notes can potentially overwrite
|
|
function rematch:CheckToOverwriteNotesAndPreferences()
|
|
local team = settings.loadedTeam and saved[settings.loadedTeam]
|
|
if team and (team.notes or rematch:HasPreferences(team)) then
|
|
rematch:SetSidelineContext("AskingOverwriteNotes",true)
|
|
end
|
|
end
|