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 \n You 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 \124 r already has a team. \n \n A target can only have one team. " ] , rematch.hexWhite , rematch : GetNameFromNpcID ( key ) ) )
else
dialog.Text : SetText ( format ( L [ " A team named %s%s \124 r already exists. \n \n Teams 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