Bagnon-3.3.5/Bagnon/components/titleFrame.lua
Richard Steininger 37d072dcc4 Initial commit
2023-10-18 20:34:32 +02:00

175 lines
No EOL
3.3 KiB
Lua

--[[
titleFrame.lua
A title frame widget
--]]
local Bagnon = LibStub('AceAddon-3.0'):GetAddon('Bagnon')
local L = LibStub('AceLocale-3.0'):GetLocale('Bagnon')
local TitleFrame = Bagnon.Classy:New('Button')
TitleFrame:Hide()
Bagnon.TitleFrame = TitleFrame
--[[ Constructor ]]--
function TitleFrame:New(frameID, parent)
local b = self:Bind(CreateFrame('Button', nil, parent))
b:SetToplevel(true)
b:SetTextFontObject('GameFontNormal')
b:SetHighlightFontObject('GameFontHighlight')
b:RegisterForClicks('anyUp')
b:SetScript('OnShow', b.OnShow)
b:SetScript('OnHide', b.OnHide)
b:SetScript('OnMouseDown', b.OnMouseDown)
b:SetScript('OnMouseUp', b.OnMouseUp)
b:SetScript('OnDoubleClick', b.OnDoubleClick)
b:SetScript('OnEnter', b.OnEnter)
b:SetScript('OnLeave', b.OnLeave)
b:SetScript('OnClick', b.OnClick)
b:SetFrameID(frameID)
b:UpdateEvents()
return b
end
--[[ Messages ]]--
function TitleFrame:PLAYER_UPDATE(msg, frameID, player)
if frameID == self:GetFrameID() then
self:UpdateText()
end
end
--[[ Frame Events ]]--
function TitleFrame:OnShow()
self:UpdateText()
self:UpdateEvents()
end
function TitleFrame:OnHide()
self:StopMovingFrame()
end
function TitleFrame:OnMouseDown()
if self:IsFrameMovable() or IsAltKeyDown() then
self:StartMovingFrame()
end
end
function TitleFrame:OnMouseUp()
self:StopMovingFrame()
end
function TitleFrame:OnDoubleClick()
self:ToggleSearchFrame()
end
function TitleFrame:OnClick(button)
if button == 'RightButton' then
if LoadAddOn('Bagnon_Config') then
Bagnon.FrameOptions:ShowFrame(self:GetFrameID())
end
end
end
function TitleFrame:OnEnter()
if self:GetRight() > (GetScreenWidth() / 2) then
GameTooltip:SetOwner(self, 'ANCHOR_LEFT')
else
GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
end
self:UpdateTooltip()
end
function TitleFrame:OnLeave()
if GameTooltip:IsOwned(self) then
GameTooltip:Hide()
end
end
--[[ Update Methods ]]--
function TitleFrame:UpdateText()
self:SetFormattedText(self:GetTitleText(), self:GetPlayer())
self:GetFontString():SetAllPoints(self)
end
function TitleFrame:UpdateTooltip()
GameTooltip:SetText(L.TipDoubleClickSearch)
GameTooltip:Show()
end
function TitleFrame:UpdateEvents()
self:UnregisterAllMessages()
if self:IsVisible() then
self:RegisterMessage('PLAYER_UPDATE')
end
end
function TitleFrame:StartMovingFrame()
self:SendMessage('FRAME_MOVE_START', self:GetFrameID())
end
function TitleFrame:StopMovingFrame()
self:SendMessage('FRAME_MOVE_STOP', self:GetFrameID())
end
--[[ Properties ]]--
function TitleFrame:SetFrameID(frameID)
if self:GetFrameID() ~= frameID then
self.frameID = frameID
self:UpdateText()
end
end
function TitleFrame:GetFrameID()
return self.frameID
end
--yeah, still hardcoded
function TitleFrame:GetTitleText()
if self:GetFrameID() == 'bank' then
return L.TitleBank
end
if self:GetFrameID() == 'keys' then
return L.TitleKeys
end
if self:GetFrameID() == 'guildbank' then
return [[%s's Guild Bank]]
end
return L.TitleBags
end
--[[ Frame Settings ]]--
function TitleFrame:GetSettings()
return Bagnon.FrameSettings:Get(self:GetFrameID())
end
function TitleFrame:GetPlayer()
return self:GetSettings():GetPlayerFilter()
end
function TitleFrame:IsFrameMovable()
return self:GetSettings():IsMovable()
end
function TitleFrame:ToggleSearchFrame()
self:GetSettings():ToggleTextSearch()
end