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.
316 lines
9.5 KiB
316 lines
9.5 KiB
local _,L = ...
|
|
local rematch = Rematch
|
|
local notes = RematchNotes
|
|
local settings
|
|
|
|
rematch:InitModule(function()
|
|
rematch.Notes = notes
|
|
settings = RematchSettings
|
|
notes.needsInit = true
|
|
rematch:ConvertTitlebarCloseButton(notes.CloseButton)
|
|
end)
|
|
|
|
-- if maybe is true, notes only hide if card isn't locked; otherwise hide regardless
|
|
function rematch:HideNotes(maybe)
|
|
if maybe and notes.locked then return end
|
|
notes:Hide()
|
|
end
|
|
|
|
-- toggles notes for the loaded team (called from binding)
|
|
function rematch:ToggleNotes()
|
|
if notes:IsVisible() then
|
|
rematch:HideNotes()
|
|
else
|
|
local team = RematchSaved[settings.loadedTeam]
|
|
if team and team.notes then
|
|
rematch:ShowNotes("team",settings.loadedTeam,true)
|
|
end
|
|
end
|
|
end
|
|
|
|
function notes:StopSizing()
|
|
notes:StopMovingOrSizing()
|
|
settings.NotesLeft = notes:GetLeft()
|
|
settings.NotesBottom = notes:GetBottom()
|
|
settings.NotesWidth = notes:GetWidth()
|
|
settings.NotesHeight = notes:GetHeight()
|
|
notes:SetUserPlaced(false)
|
|
end
|
|
|
|
function notes:OnSizeChanged(w)
|
|
self.Content.ScrollFrame.EditBox:SetWidth(w-58)
|
|
notes:ResizeControls(w)
|
|
end
|
|
|
|
function notes:ResizeControls(width)
|
|
-- controls are anchored to BOTTOMLEFT and BOTTOMRIGHT on notes
|
|
width = width or notes:GetWidth()
|
|
local bwidth = min((width-6)/3,122)-2
|
|
self.Controls.DeleteButton:SetWidth(bwidth)
|
|
self.Controls.UndoButton:SetWidth(bwidth)
|
|
self.Controls.SaveButton:SetWidth(bwidth)
|
|
end
|
|
|
|
function notes:OnShow()
|
|
if notes.needsInit then -- one-time stuff first time notes are shown
|
|
notes:SetScript("OnSizeChanged",notes.OnSizeChanged)
|
|
notes:OnSizeChanged(notes:GetWidth())
|
|
notes.needsInit = nil
|
|
end
|
|
end
|
|
|
|
function notes:OnHide()
|
|
notes.locked = nil
|
|
notes.subject = nil
|
|
notes.subjectType = nil
|
|
notes:SetAlpha(1)
|
|
end
|
|
|
|
function rematch:ShowNotes(subjectType,subject,force)
|
|
if not force and notes.locked then
|
|
return -- notes are locked, don't show new notes unless forced (clicking new note)
|
|
end
|
|
if settings.ClickPetCard and not force then
|
|
return
|
|
end
|
|
if rematch:IsDialogOpen("DeleteNotes") then
|
|
return
|
|
end
|
|
|
|
-- if FastPetCard not enabled, then cause a 0.25 delay before showing a card (unless it's forced)
|
|
if not settings.ClickPetCard and not settings.FastPetCard then
|
|
if subjectType and subject and not force then
|
|
notes.subjectType = subjectType
|
|
notes.subject = subject
|
|
rematch:StartTimer("ShowNotes",0.25,rematch.ShowNotes)
|
|
return
|
|
elseif not force then
|
|
subjectType = notes.subjectType
|
|
subject = notes.subject
|
|
end
|
|
end
|
|
|
|
local text, title, leftIcon, rightIcon
|
|
if subjectType=="team" then
|
|
local team = RematchSaved[subject]
|
|
text = team.notes or ""
|
|
title = rematch:GetTeamTitle(subject,true)
|
|
leftIcon = "Interface\\Icons\\INV_Scroll_03"
|
|
rightIcon = settings.TeamGroups[team.tab or 1][2]
|
|
notes.Title:SetText(L["Team Notes"])
|
|
elseif subjectType=="pet" then
|
|
local idType = rematch:GetIDType(subject)
|
|
local speciesID, name, icon, petType, _
|
|
if idType=="pet" then
|
|
speciesID,_,_,_,_,_,_,name,icon,petType = C_PetJournal.GetPetInfoByPetID(subject)
|
|
elseif idType=="species" then
|
|
speciesID = subject
|
|
name,icon,petType = C_PetJournal.GetPetInfoBySpeciesID(subject)
|
|
end
|
|
if speciesID then
|
|
subject = speciesID -- petID subject changing to speciesID subject here
|
|
text = settings.PetNotes[speciesID] or ""
|
|
title = name
|
|
leftIcon = icon
|
|
rightIcon = "Interface\\Icons\\Icon_PetFamily_"..PET_TYPE_SUFFIX[petType]
|
|
end
|
|
notes.Title:SetText(L["Pet Notes"])
|
|
end
|
|
|
|
if not text then
|
|
notes.subject = nil
|
|
notes.subjectType = nil
|
|
notes.locked = nil
|
|
return -- not sure what to display, leave
|
|
end
|
|
|
|
notes.Content.Name:SetText(title)
|
|
notes.Content.LeftIcon:SetTexture(leftIcon)
|
|
notes.Content.RightIcon:SetTexture(rightIcon)
|
|
|
|
notes.subject = subject
|
|
notes.subjectType = subjectType
|
|
|
|
if force then
|
|
notes.locked = true
|
|
end
|
|
|
|
notes.Content.ScrollFrame.EditBox:SetText(text)
|
|
notes.Content.ScrollFrame.EditBox:SetCursorPosition(0)
|
|
|
|
notes:UpdateLockState()
|
|
|
|
if settings.NotesLeft then
|
|
notes:SetSize(settings.NotesWidth,settings.NotesHeight)
|
|
notes:ClearAllPoints()
|
|
notes:SetPoint("BOTTOMLEFT",UIParent,"BOTTOMLEFT",settings.NotesLeft,settings.NotesBottom)
|
|
end
|
|
|
|
notes:Show()
|
|
end
|
|
|
|
-- to prevent onenter/onleave spasms if the notes overlaps the button that spawn them, the
|
|
-- mouse is disabled for these when the notes are not locked
|
|
function notes:UpdateLockState()
|
|
local locked = notes.locked and true
|
|
notes:SetAlpha(locked and 1 or 0)
|
|
|
|
notes:EnableMouse(locked)
|
|
notes.LockButton:EnableMouse(locked)
|
|
notes.Content.ScrollFrame:EnableMouse(locked)
|
|
notes.Content.ScrollFrame.EditBox:EnableMouse(locked)
|
|
notes.Content.ScrollFrame.FocusGrabber:EnableMouse(locked)
|
|
notes.Content.ScrollFrame.ScrollBar:SetPoint("BOTTOMLEFT",notes.Content.ScrollFrame,"BOTTOMRIGHT",8,settings.LockNotesPosition and 13 or 26)
|
|
notes.Content.ScrollFrame.ScrollBar:SetShown(locked)
|
|
notes.Content.ScrollFrame.ScrollBar:SetAlpha(locked and 1 or 0)
|
|
notes.Content.ScrollFrame.ResizeGrip:SetShown(locked and not settings.LockNotesPosition)
|
|
notes.CloseButton:EnableMouse(locked)
|
|
|
|
rematch:SetTitlebarButtonIcon(notes.LockButton,settings.LockNotesPosition and "lock" or "unlock")
|
|
end
|
|
|
|
function notes:OnEnter()
|
|
local key = self:GetParent().key
|
|
local petID = self:GetParent().petID
|
|
if key then
|
|
rematch:ShowNotes("team",key)
|
|
else
|
|
rematch:ShowNotes("pet",petID)
|
|
end
|
|
end
|
|
|
|
function notes:OnLeave()
|
|
if not settings.FastPetCard then
|
|
rematch:StopTimer("ShowNotes")
|
|
end
|
|
rematch:HideNotes(true)
|
|
end
|
|
|
|
-- click of the Notes button (from RematchNotesButton template)
|
|
function notes:OnClick()
|
|
local parent = self:GetParent()
|
|
local subject,subjectType
|
|
if parent.key then
|
|
subject = parent.key
|
|
subjectType = "team"
|
|
elseif parent.petID then
|
|
subject = parent.petID
|
|
if rematch:GetIDType(subject)=="pet" then -- convert petID to speciesID
|
|
subject = C_PetJournal.GetPetInfoByPetID(subject)
|
|
end
|
|
subjectType = "pet"
|
|
end
|
|
if not subject then return end
|
|
if settings.ClickPetCard then
|
|
notes.locked = true
|
|
end
|
|
if subject~=notes.subject then
|
|
rematch:ShowNotes(subjectType,subject,true)
|
|
elseif settings.ClickPetCard then
|
|
rematch:HideNotes()
|
|
else
|
|
notes.locked = not notes.locked
|
|
end
|
|
notes:UpdateLockState()
|
|
end
|
|
|
|
-- only enabled when NotesNoESC is disabled on notes on screen
|
|
function notes:OnKeyDown(key)
|
|
if key==GetBindingKey("TOGGLEGAMEMENU") and notes.locked then
|
|
rematch:HideNotes()
|
|
self:SetPropagateKeyboardInput(false)
|
|
else
|
|
self:SetPropagateKeyboardInput(true)
|
|
end
|
|
end
|
|
|
|
function notes:UndoButtonOnClick()
|
|
rematch:ShowNotes(notes.subjectType,notes.subject,true)
|
|
end
|
|
|
|
-- autofocus editboxes can lose focus now by clicking elsewhere
|
|
function notes:OnFocusLost()
|
|
C_Timer.After(0.15,notes.OnFocusLostDelayed)
|
|
end
|
|
|
|
-- when focus lost, the control buttons are hidden and the notes are saved
|
|
function notes:OnFocusLostDelayed()
|
|
-- if focus was immediately regained, then leave and do nothing
|
|
if notes.Content.ScrollFrame.EditBox:HasFocus() then
|
|
return
|
|
end
|
|
notes.Content:SetPoint("BOTTOMRIGHT",-4,2)
|
|
notes.Controls:Hide()
|
|
local text = (notes.Content.ScrollFrame.EditBox:GetText() or ""):trim()
|
|
local update -- becomes true if UI needs updating (notes gained/lost)
|
|
if notes.subjectType=="team" then
|
|
local team = RematchSaved[notes.subject]
|
|
if team and text~="" then
|
|
update = not team.notes
|
|
team.notes = text
|
|
else
|
|
update = team.notes and true
|
|
team.notes = nil -- was nothing in notes, remove it
|
|
end
|
|
elseif notes.subjectType=="pet" then
|
|
if text~="" then
|
|
update = not settings.PetNotes[notes.subject]
|
|
settings.PetNotes[notes.subject] = text
|
|
else
|
|
update = settings.PetNotes[notes.subject] and true
|
|
settings.PetNotes[notes.subject] = nil
|
|
end
|
|
end
|
|
if update then
|
|
rematch:UpdateUI()
|
|
end
|
|
end
|
|
|
|
-- when focus gained, the control buttons are shown (delete, undo, save, resize)
|
|
function notes:OnFocusGained()
|
|
notes.Content:SetPoint("BOTTOMRIGHT",-4,25)
|
|
notes.Controls:Show()
|
|
end
|
|
|
|
function notes:DeleteButtonOnClick()
|
|
local team = RematchSaved[notes.subject]
|
|
-- when dialog opens, notes hide and subject is nil'ed, subject noted before dialog nil's them
|
|
local subjectType, subject = notes.subjectType, notes.subject
|
|
local title
|
|
if subjectType=="team" and team then
|
|
title = rematch:GetTeamTitle(subject,true)
|
|
elseif subjectType=="pet" then
|
|
title = rematch:GetPetName(subject)
|
|
end
|
|
if title then
|
|
local dialog = rematch:ShowDialog("DeleteNotes",300,124,L["Delete Notes"],nil,YES,notes.AcceptDelete,NO)
|
|
dialog:ShowText(format(L["Are you sure you want to delete the notes for %s\124r?"],title),220,50,"TOP",0,-36)
|
|
dialog:SetContext("subjectType",subjectType)
|
|
dialog:SetContext("subject",subject)
|
|
end
|
|
end
|
|
|
|
function notes:AcceptDelete()
|
|
local subjectType = rematch.Dialog:GetContext("subjectType")
|
|
local subject = rematch.Dialog:GetContext("subject")
|
|
if subjectType=="team" and RematchSaved[subject] then
|
|
RematchSaved[subject].notes = nil
|
|
elseif subjectType=="pet" and settings.PetNotes[subject] then
|
|
settings.PetNotes[subject] = nil
|
|
end
|
|
rematch:UpdateUI()
|
|
end
|
|
|
|
function notes:UpdateControlButtons()
|
|
local text = notes.Content.ScrollFrame.EditBox:GetText()
|
|
if notes.subjectType=="team" then
|
|
local team = RematchSaved[notes.subject]
|
|
notes.Controls.UndoButton:SetEnabled(team.notes and text~=team.notes)
|
|
end
|
|
end
|
|
|
|
function notes:LockButtonOnClick()
|
|
settings.LockNotesPosition = not settings.LockNotesPosition
|
|
notes:UpdateLockState()
|
|
notes:ResizeControls()
|
|
end
|
|
|