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.
175 lines
5.8 KiB
175 lines
5.8 KiB
local _,L = ...
|
|
local rematch = Rematch
|
|
local frame = RematchFrame
|
|
local settings
|
|
|
|
rematch:InitModule(function()
|
|
rematch.Frame = frame
|
|
settings = RematchSettings
|
|
settings.ActivePanel = settings.ActivePanel or 1
|
|
if not settings.CornerPos or not settings.XPos then
|
|
settings.CornerPos = "BOTTOMLEFT"
|
|
frame:UpdateCorner()
|
|
end
|
|
rematch:AdjustScale(frame,true)
|
|
rematch:SetupPanelTabs(frame.PanelTabs,settings.ActivePanel,L["Pets"],L["Teams"],L["Queue"],L["Options"])
|
|
for i=1,4 do
|
|
frame.PanelTabs.Tabs[i]:SetScript("OnClick",frame.PanelTabOnClick)
|
|
end
|
|
frame.TitleBar.Title:SetText(L["Rematch"])
|
|
frame.TitleBar.SinglePanelButton.tooltipTitle = L["Toggle Single Panel Mode"]
|
|
frame.TitleBar.SinglePanelButton.tooltipBody = L["Toggle between one panel or two panels side by side."]
|
|
|
|
rematch:ConvertTitlebarCloseButton(frame.TitleBar.CloseButton)
|
|
end)
|
|
|
|
-- this is UpdateUI stuff, just title and lock button status
|
|
-- major changes to frame are done in ConfigureFrame
|
|
function frame:Update()
|
|
rematch:SetTitlebarButtonIcon(frame.TitleBar.LockButton,settings.LockPosition and "lock" or "unlock")
|
|
frame.TitleBar.SinglePanelButton:SetShown(not settings.Minimized)
|
|
end
|
|
|
|
function frame:Toggle()
|
|
if not InCombatLockdown() then
|
|
frame:SetShown(not frame:IsShown())
|
|
else
|
|
rematch:print(L["You are in combat. Try again when out of combat."])
|
|
end
|
|
end
|
|
|
|
function frame:UpdateSinglePanelButton()
|
|
if not settings.Minimized then
|
|
if settings.CornerPos=="BOTTOMLEFT" or settings.CornerPos=="TOPLEFT" then
|
|
rematch:SetTitlebarButtonIcon(frame.TitleBar.SinglePanelButton,settings.SinglePanel and "right" or "left")
|
|
else
|
|
rematch:SetTitlebarButtonIcon(frame.TitleBar.SinglePanelButton,settings.SinglePanel and "left" or "right")
|
|
end
|
|
end
|
|
end
|
|
|
|
function frame:OnShow()
|
|
-- if pets aren't loaded, and frame is attempting to show, display a loading dialog
|
|
rematch.timeUIChanged = GetTime()
|
|
frame:ConfigureFrame()
|
|
frame.showAfterBattle = nil
|
|
frame.showAfterCombat = nil
|
|
if not settings.LockWindow then
|
|
rematch:SetESCable("RematchFrame",true)
|
|
end
|
|
settings.JournalUsed = nil
|
|
end
|
|
|
|
function frame:OnHide()
|
|
rematch:HideWidgets()
|
|
rematch:HideDialog()
|
|
rematch:SetESCable("RematchFrame",false)
|
|
C_PetJournal.ClearRecentFanfares()
|
|
-- when frame hides due to entering battle, we may not actually be in battle yet; this will wait
|
|
if not C_PetBattles.IsInBattle() then
|
|
C_Timer.After(0.75,frame.CheckIfHidingForBattle)
|
|
-- while here, if we're not in combat or pvp, check if backup reminder should happen
|
|
if not InCombatLockdown() and not C_PetBattles.GetPVPMatchmakingInfo() then
|
|
rematch:CheckForBackupReminder()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- if frame is automatically hidden due to entering battle, we may not be in battle yet.
|
|
-- the OnHide above will check 0.75 seconds after the frame hides to see if we're in battle
|
|
function frame:CheckIfHidingForBattle()
|
|
if C_PetBattles.IsInBattle() then
|
|
frame.showAfterBattle = true -- and mark frame to show after battle if so
|
|
end
|
|
end
|
|
|
|
-- call when frame moves or CornerPos changes (options) to update XPos,YPos to new position
|
|
function frame:UpdateCorner()
|
|
local corner = settings.CornerPos
|
|
if corner=="BOTTOMRIGHT" then
|
|
settings.XPos, settings.YPos = frame:GetRight(), frame:GetBottom()
|
|
elseif corner=="TOPRIGHT" then
|
|
settings.XPos, settings.YPos = frame:GetRight(), frame:GetTop()
|
|
elseif corner=="BOTTOMLEFT" then
|
|
settings.XPos, settings.YPos = frame:GetLeft(), frame:GetBottom()
|
|
elseif corner=="TOPLEFT" then
|
|
settings.XPos, settings.YPos = frame:GetLeft(), frame:GetTop()
|
|
end
|
|
frame:ClearAllPoints()
|
|
frame:SetPoint(corner,UIParent,"BOTTOMLEFT",settings.XPos,settings.YPos)
|
|
end
|
|
|
|
function frame:SelectPanel(index,unselect)
|
|
settings.ActivePanel = index
|
|
frame:ConfigureFrame()
|
|
end
|
|
|
|
function frame:MoveStart()
|
|
if not settings.LockPosition or IsShiftKeyDown() then
|
|
rematch:HideWidgets()
|
|
frame:StartMoving()
|
|
end
|
|
end
|
|
|
|
function frame:MoveStop()
|
|
frame:StopMovingOrSizing()
|
|
frame:SetUserPlaced(false)
|
|
frame:UpdateCorner()
|
|
end
|
|
|
|
-- onclick of the minimize button
|
|
function frame:ToggleSize()
|
|
settings.Minimized = not settings.Minimized
|
|
rematch:HideWidgets()
|
|
rematch.timeUIChanged = GetTime()
|
|
frame:ConfigureFrame()
|
|
end
|
|
|
|
function frame:LockButtonOnClick()
|
|
settings.LockPosition = not settings.LockPosition
|
|
frame:Update()
|
|
end
|
|
|
|
-- this is set as the OnKeyDown in Options
|
|
function frame:MinimizeOnKeyDown(key)
|
|
if key==GetBindingKey("TOGGLEGAMEMENU") and not settings.Minimized then
|
|
frame:ToggleSize() -- minimize but don't pass ESC along
|
|
self:SetPropagateKeyboardInput(false)
|
|
else -- ESC not hit (or already minimized), send it along
|
|
self:SetPropagateKeyboardInput(true)
|
|
end
|
|
end
|
|
|
|
-- when one of the panel tabs is clicked
|
|
function frame:PanelTabOnClick()
|
|
if settings.Minimized then
|
|
settings.Minimized = nil
|
|
RematchFrame:SelectPanel(self:GetID())
|
|
elseif settings.ActivePanel==self:GetID() then
|
|
if not (settings.LockDrawer and settings.DontMinTabToggle) then
|
|
-- if we're clicking the same tab (and settings "Don't Minimize With ESC Key" and "Or With Panel Tabs" not checked), minimize
|
|
frame:ToggleSize()
|
|
end
|
|
else -- otherwise select new tab
|
|
frame:SelectPanel(self:GetID())
|
|
end
|
|
end
|
|
|
|
-- for Bindings.xml
|
|
function rematch:ToggleFrameTab(tab)
|
|
local visible = frame:IsVisible()
|
|
if settings.SinglePanel and settings.UseMiniQueue and tab==3 then
|
|
tab = 1 -- if toggling queue panel while in narrow mode (with pets+queue combined) go to pets tab
|
|
end
|
|
if visible and settings.ActivePanel==tab and not settings.Minimized then
|
|
frame:Hide()
|
|
else
|
|
settings.ActivePanel = tab
|
|
settings.Minimized = nil
|
|
if not visible then
|
|
frame:Toggle() -- not on screen, show it
|
|
else
|
|
frame:ConfigureFrame() -- already on screen, reconfigure
|
|
end
|
|
end
|
|
end
|
|
|