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