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.
314 lines
12 KiB
314 lines
12 KiB
local _,L = ...
|
|
local rematch = Rematch
|
|
local journal = RematchJournal
|
|
local settings
|
|
|
|
-- these are layouts for each numbered tab, with "left"/"right" in the index of a rematch.panel to show
|
|
-- from Main.lua panels are ordered: PetPanel, LoadoutPanel, TeamPanel, QueuePanel, OptionPanel
|
|
journal.layouts = {{"left","mid","right"},{"left","mid",nil,"right"},{"left","mid",nil,nil,"right"}}
|
|
|
|
journal.elements = {} -- table of frames/regions in the default journal to be hidden, indexed by the element and their original alpha
|
|
|
|
journal.notLoaded = true -- becomes nil once the journal successfully loads
|
|
journal.defaultHidden = nil -- becomes true while default journal's widgets are hidden
|
|
|
|
rematch:InitModule(function()
|
|
rematch.Journal = journal
|
|
settings = RematchSettings
|
|
settings.JournalPanel = settings.JournalPanel or 1
|
|
|
|
rematch:SetupPanelTabs(journal.PanelTabs,settings.JournalPanel,L["Teams"],L["Queue"],L["Options"])
|
|
for i=1,3 do
|
|
journal.PanelTabs.Tabs[i]:SetScript("OnClick",journal.PanelTabOnClick)
|
|
end
|
|
-- if Collections already loaded, run OnEvent as if it's loading now
|
|
if IsAddOnLoaded("Blizzard_Collections") then
|
|
journal:Blizzard_Collections()
|
|
end
|
|
journal:RegisterEvent("ADDON_LOADED")
|
|
-- hook of the [Click to view in journal] button on default link "tooltip"
|
|
FloatingBattlePetTooltip.JournalClick:HookScript("OnClick",function(self) rematch:SearchForSpecies(self:GetParent().speciesID) end)
|
|
-- add mouse methods to pass mouse events down to CollectionsJournal
|
|
for _,method in pairs({"OnMouseDown","OnMouseUp","OnDragStart","OnDragStop"}) do
|
|
journal:SetScript(method,function()
|
|
if CollectionsJournal then
|
|
local handler = CollectionsJournal:GetScript(method)
|
|
if handler then
|
|
handler(CollectionsJournal)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
journal:RegisterForDrag("LeftButton")
|
|
hooksecurefunc("SetItemRef",journal.SetItemRef)
|
|
SetPortraitToTexture(journal.portrait, "Interface\\Icons\\PetJournalPortrait")
|
|
end)
|
|
|
|
-- called in ADDON_LOADED of Blizzard_Collctions (or during startup if already loaded)
|
|
local hasJournalRunBefore = false -- becomes true after the journal is started
|
|
function journal:Blizzard_Collections()
|
|
PetJournal:HookScript("OnShow",journal.ConfigureJournal)
|
|
journal:SetupUseRematchButton()
|
|
end
|
|
|
|
-- this is called during the first ConfigureJournal when the journal is shown, and returns
|
|
-- true if the journal was completely setup
|
|
function journal:SetupJournal()
|
|
-- if this is the first time the journal is opening on a mac with DebugDelayMacs enabled, wait half
|
|
-- a second (or 0 seconds--one frame) and try later
|
|
if settings.DebugDelayMacs then
|
|
if not hasJournalRunBefore then
|
|
C_Timer.After(settings.DebugDelayMacsOneFrame and 0 or 1, journal.ConfigureJournal)
|
|
hasJournalRunBefore = true
|
|
return false
|
|
else
|
|
journal:ConfigureJournal()
|
|
end
|
|
end
|
|
hasJournalRunBefore = true
|
|
|
|
if not settings.UseDefaultJournal and not GetCVarBitfield("closedInfoFrames",LE_FRAME_TUTORIAL_PET_JOURNAL) then
|
|
SetCVarBitfield("closedInfoFrames",LE_FRAME_TUTORIAL_PET_JOURNAL,true)
|
|
end
|
|
PetJournal:HookScript("OnHide",journal.DefaultJournalOnHide)
|
|
journal.CloseButton:SetScript("OnClick",function() HideUIPanel(CollectionsJournal) end)
|
|
C_Timer.After(0.1,journal.OtherAddonJournalStuff)
|
|
hooksecurefunc("PetJournal_ShowPetCardBySpeciesID",function(speciesID) rematch:SearchForSpecies(speciesID) end)
|
|
hooksecurefunc("PetJournal_SelectPet",journal.PetJournal_SelectPet)
|
|
return true
|
|
end
|
|
|
|
function journal:SetupUseRematchButton()
|
|
local button = CreateFrame("CheckButton","UseRematchButton",PetJournal,"UICheckButtonTemplate,RematchTooltipScripts")
|
|
button:SetSize(26,26)
|
|
button:SetHitRectInsets(-2,-56,-2,-2)
|
|
button.text:SetText(L["Rematch"])
|
|
button.text:SetFontObject("GameFontNormal")
|
|
button:SetPoint("LEFT",PetJournalSummonButton,"RIGHT",4,-1)
|
|
button:SetScript("OnClick",function() settings.UseDefaultJournal=nil journal:ConfigureJournal() end)
|
|
button:SetScript("OnEnter",function(self) if not rematch:UIJustChanged() then rematch.ShowTooltip(self) end end)
|
|
button.tooltipTitle = L["Enable Rematch"]
|
|
button.tooltipBody = L["Check this to use Rematch in the pet journal."]
|
|
end
|
|
|
|
-- this runs 0.1 seconds after journal:Blizzard_Collections to allow other addons to settle/do their thing
|
|
function journal:OtherAddonJournalStuff()
|
|
-- CollectMe panel button along bottom
|
|
if IsAddOnLoaded("CollectMe") and CollectMeOpen2Button then
|
|
journal.CollectMeButton = CreateFrame("Button",nil,journal,"MagicButtonTemplate")
|
|
local button = journal.CollectMeButton
|
|
button:SetPoint("RIGHT",rematch.BottomPanel.SaveButton,"LEFT",-2,0)
|
|
button:SetSize(100,22)
|
|
button:SetText("CollectMe")
|
|
button:SetScript("OnClick",function() CollectMeOpen2Button:Click() end)
|
|
end
|
|
-- PetTracker "Track Pets" checkbutton along bottom
|
|
if IsAddOnLoaded("PetTracker_Journal") and PetTrackerTrackToggle and GetAddOnMetadata("PetTracker","Version")~="7.1.4" then
|
|
journal.PetTrackerJournalButton = CreateFrame("CheckButton",nil,journal,"UICheckButtonTemplate")
|
|
local button = journal.PetTrackerJournalButton
|
|
button:SetSize(26,26)
|
|
button:SetHitRectInsets(-2,-70,-2,-2)
|
|
button.text:SetFontObject("GameFontHighlight")
|
|
button.text:SetText("Track Pets")
|
|
button:SetPoint("RIGHT",journal.CollectMeButton or rematch.BottomPanel.SaveButton,"LEFT",-76,-1)
|
|
button:SetScript("OnClick",function(self) PetTrackerTrackToggle:Click() end)
|
|
hooksecurefunc(PetTrackerTrackToggle,"SetChecked",function(self,checked)
|
|
button:SetChecked(checked) -- follow checked state of the button
|
|
end)
|
|
button:SetChecked(PetTrackerTrackToggle:GetChecked()) -- but need to manually set first state
|
|
end
|
|
-- PBT does screwy stuff with framelevels, reasserting after it's had time to load
|
|
if IsAddOnLoaded("PetBattleTeams") then
|
|
if journal:IsVisible() then
|
|
journal:ConfigureJournal()
|
|
end
|
|
end
|
|
end
|
|
|
|
function journal:HideElement(element)
|
|
if element then
|
|
journal.elements[element] = element:GetAlpha()
|
|
element:SetAlpha(0)
|
|
end
|
|
end
|
|
|
|
function journal:ShowElement(element)
|
|
if element then
|
|
element:SetAlpha(journal.elements[element] or 1)
|
|
end
|
|
end
|
|
|
|
-- this is the OnShow of RematchJournal, not the default (which does a Configure)
|
|
function journal:OnShow()
|
|
journal:HideElement(PetJournal)
|
|
journal:HideElement(CollectionsJournalCloseButton)
|
|
for _,region in pairs({CollectionsJournal:GetRegions()}) do
|
|
journal:HideElement(region)
|
|
end
|
|
end
|
|
|
|
-- this is the OnHide of RematchJournal, not the default
|
|
function journal:OnHide()
|
|
rematch:HideWidgets()
|
|
rematch:HideDialog()
|
|
rematch.timeUIChanged = GetTime()
|
|
journal:ShowElement(PetJournal)
|
|
journal:ShowElement(CollectionsJournalCloseButton)
|
|
for _,region in pairs({CollectionsJournal:GetRegions()}) do
|
|
journal:ShowElement(region)
|
|
end
|
|
-- if not in battle/combat/pvp, check if a backup reminder should be given
|
|
if not C_PetBattles.IsInBattle() and not InCombatLockdown() and not C_PetBattles.GetPVPMatchmakingInfo() then
|
|
rematch:CheckForBackupReminder()
|
|
end
|
|
end
|
|
|
|
-- this returns the standalone frame when the journal hides
|
|
function journal:DefaultJournalOnHide()
|
|
if journal.showStandaloneOnHide and not InCombatLockdown() then
|
|
journal.showStandaloneOnHide = nil
|
|
-- wait a frame to let UISpecialFrames go through everything (otherwise standalone frame can be next frame to hide)
|
|
C_Timer.After(0,function() rematch.Frame:Show() end)
|
|
end
|
|
if journal:IsShown() then
|
|
journal:Hide()
|
|
end
|
|
end
|
|
|
|
-- this is called in the PetJournal's OnShow and when journal tabs clicked; to set up the journal
|
|
-- hide is true when the journal needs hidden (typically due to it being on screen and in combat)
|
|
function journal:ConfigureJournal(hide)
|
|
|
|
-- if this is the first time loading, and setup didn't complete, then return
|
|
if not hasJournalRunBefore and not journal:SetupJournal() then
|
|
return
|
|
end
|
|
|
|
if rematch.Frame:IsVisible() then
|
|
journal.showStandaloneOnHide = true
|
|
rematch.Frame:Hide() -- hide standalone Frame (Frame and Journal can't coexist)
|
|
end
|
|
|
|
if UseRematchButton then
|
|
UseRematchButton:SetShown(not InCombatLockdown()) -- may not be visible; this is checkbutton on default journal
|
|
UseRematchButton:SetChecked(not settings.UseDefaultJournal)
|
|
end
|
|
|
|
-- if UseDefaultJournal set, then hide our journal and leave
|
|
if settings.UseDefaultJournal or hide or InCombatLockdown() then
|
|
if not InCombatLockdown() then
|
|
journal:SetParent(nil)
|
|
journal:ClearAllPoints()
|
|
journal:Hide()
|
|
journal:SetShownExtras(true)
|
|
elseif not settings.UseDefaultJournal then
|
|
rematch:print(L["You are in combat. Try again when out of combat."])
|
|
end
|
|
return
|
|
end
|
|
|
|
rematch:HideWidgets(nil,true)
|
|
rematch:HideDialog()
|
|
rematch:HideNotes(settings.NotesNoESC)
|
|
rematch.MiniPanel:Hide()
|
|
rematch.MiniQueue:Hide()
|
|
|
|
rematch.timeUIChanged = GetTime()
|
|
|
|
-- reparent our journal to the real one and set its level +1 higher than it to hide everything beneath
|
|
journal:SetParent(PetJournal)
|
|
journal:SetPoint("TOPLEFT")
|
|
-- SetFrameLevel does not make huge jumps; make at most 10 attempts to set a higher frame level
|
|
local highestLevel = rematch:FindHighestFrameLevel(PetJournal)+1
|
|
local raiseTimeout = settings.DebugJournalFrameLevel and 1 or 10
|
|
while journal:GetFrameLevel()<highestLevel and raiseTimeout>0 do
|
|
journal:SetFrameLevel(highestLevel)
|
|
raiseTimeout = raiseTimeout - 1
|
|
end
|
|
-- journal:SetFrameLevel(rematch:FindHighestFrameLevel(PetJournal)+1)
|
|
|
|
journal:SetShownExtras(false) -- hide tutorial button and other stuff that stick out the edges
|
|
|
|
rematch:Reparent(rematch.BottomPanel,journal,"BOTTOMLEFT")
|
|
rematch.BottomPanel:SetPoint("BOTTOMRIGHT")
|
|
rematch.BottomPanel:Resize(journal:GetWidth(),true,true)
|
|
|
|
rematch:Reparent(rematch.Toolbar,journal,"TOPRIGHT",-7,-26)
|
|
rematch.Toolbar:Resize(journal:GetWidth()-64)
|
|
|
|
rematch.TeamTabs:Configure(journal)
|
|
rematch.TeamTabs:SetShown(settings.JournalPanel==1 or settings.AlwaysTeamTabs)
|
|
|
|
-- show/hide panels as defined in layout table
|
|
local layout = journal.layouts[settings.JournalPanel]
|
|
for i=1,5 do -- only checking first 5 panels
|
|
local panel = _G[rematch.panels[i]]
|
|
if layout[i] and panel then
|
|
panel:SetParent(journal)
|
|
panel:ClearAllPoints()
|
|
panel:SetHeight(520)
|
|
if panel.Resize then
|
|
panel:Resize(280)
|
|
end
|
|
panel:ClearAllPoints()
|
|
panel:SetPoint("BOTTOMLEFT",layout[i]=="left" and 4 or layout[i]=="mid" and 286 or 568,26)
|
|
panel:Show()
|
|
elseif panel then
|
|
panel:Hide()
|
|
end
|
|
end
|
|
|
|
if rematch.LoadoutPanel.targetMode then
|
|
rematch.LoadedTeamPanel:Hide()
|
|
else
|
|
rematch:Reparent(rematch.LoadedTeamPanel,journal,"BOTTOMLEFT",rematch.LoadoutPanel.Loadouts[1],"TOPLEFT",0,2)
|
|
end
|
|
rematch.LoadedTeamPanel.maxWidth = 280
|
|
|
|
rematch:UpdatePanelTabs(journal.PanelTabs)
|
|
|
|
-- if PBT enabled, and team list is shown, minimize it
|
|
if PetBattleTeams and not PetBattleTeams:GetModule("GUI"):GetIsMinimized() then
|
|
PetBattleTeams:GetModule("GUI"):ToggleMinimize(true)
|
|
end
|
|
|
|
settings.JournalUsed = true
|
|
journal:Show()
|
|
rematch:UpdateUI()
|
|
end
|
|
|
|
-- this hides/shows extras that stick out of the edges of the journal
|
|
function journal:SetShownExtras(show)
|
|
PetJournalTutorialButton:SetShown(show)
|
|
if PetBattleTeambuttonButtonIcon then
|
|
PetBattleTeambuttonButtonIcon:GetParent():SetShown(show)
|
|
end
|
|
end
|
|
|
|
-- one of the tabs (Teams, Queue, Options) clicked
|
|
function journal:PanelTabOnClick()
|
|
rematch.LoadoutPanel.targetMode = false
|
|
settings.JournalPanel = self:GetID()
|
|
rematch:SelectPanelTab(journal.PanelTabs,settings.JournalPanel)
|
|
journal:ConfigureJournal()
|
|
end
|
|
|
|
-- hook of the function that calls SetItemRef to show the FloatingBattlePetTooltip
|
|
-- note the dot notation! (SetItemRef doesn't pass a parent frame)
|
|
function journal.SetItemRef(link,text,button)
|
|
if settings.PetCardForLinks and not IsModifiedClick("CHATLINK") and link:match("battlepet:%d+:%d+:%d+:%d+:%d+:%d+:.+") then
|
|
FloatingBattlePetTooltip:Hide()
|
|
local petID = link
|
|
if rematch.PetCard:CurrentPetIDIsDifferent(petID) then
|
|
rematch.PetCard.locked = true
|
|
rematch:ShowPetCard(FloatingBattlePetTooltip,petID,true)
|
|
else
|
|
rematch:HidePetCard()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- a click of the alert for a pet just uncaged will select the pet in the journal and also search for it in Rematch
|
|
function journal:PetJournal_SelectPet(petID)
|
|
rematch:SearchForSpecies(rematch.petInfo:Fetch(petID).speciesID)
|
|
end
|
|
|