265 lines
No EOL
5.9 KiB
Lua
265 lines
No EOL
5.9 KiB
Lua
--[[
|
|
bag.lua
|
|
A bag button object for Bagnon
|
|
--]]
|
|
|
|
local Bagnon = LibStub('AceAddon-3.0'):GetAddon('Bagnon')
|
|
local GuildTab = Bagnon.Classy:New('CheckButton')
|
|
Bagnon.GuildTab = GuildTab
|
|
|
|
--constants
|
|
local SIZE = 32
|
|
local NORMAL_TEXTURE_SIZE = 64 * (SIZE/36)
|
|
|
|
|
|
--[[ Constructor ]]--
|
|
|
|
function GuildTab:New(tabID, frameID, parent)
|
|
local tab = self:Create(tabID, parent)
|
|
tab:SetFrameID(frameID)
|
|
|
|
tab:SetScript('OnEnter', tab.OnEnter)
|
|
tab:SetScript('OnLeave', tab.OnLeave)
|
|
tab:SetScript('OnClick', tab.OnClick)
|
|
tab:SetScript('OnDragStart', tab.OnDrag)
|
|
tab:SetScript('OnReceiveDrag', tab.OnClick)
|
|
tab:SetScript('OnEvent', tab.OnEvent)
|
|
tab:SetScript('OnShow', tab.OnShow)
|
|
tab:SetScript('OnHide', tab.OnHide)
|
|
|
|
return tab
|
|
end
|
|
|
|
function GuildTab:Create(tabID, parent)
|
|
local tab = self:Bind(CreateFrame('CheckButton', 'BagnonGuildTab' .. self:GetNextID(), parent))
|
|
tab:SetWidth(SIZE)
|
|
tab:SetHeight(SIZE)
|
|
tab:SetID(tabID)
|
|
|
|
local name = tab:GetName()
|
|
local icon = tab:CreateTexture(name .. 'IconTexture', 'BORDER')
|
|
icon:SetAllPoints(tab)
|
|
|
|
local count = tab:CreateFontString(name .. 'Count', 'OVERLAY')
|
|
count:SetFontObject('NumberFontNormalSmall')
|
|
count:SetJustifyH('RIGHT')
|
|
count:SetPoint('BOTTOMRIGHT', -2, 2)
|
|
|
|
local nt = tab:CreateTexture(name .. 'NormalTexture')
|
|
nt:SetTexture([[Interface\Buttons\UI-Quickslot2]])
|
|
nt:SetWidth(NORMAL_TEXTURE_SIZE)
|
|
nt:SetHeight(NORMAL_TEXTURE_SIZE)
|
|
nt:SetPoint('CENTER', 0, -1)
|
|
tab:SetNormalTexture(nt)
|
|
|
|
local pt = tab:CreateTexture()
|
|
pt:SetTexture([[Interface\Buttons\UI-Quickslot-Depress]])
|
|
pt:SetAllPoints(tab)
|
|
tab:SetPushedTexture(pt)
|
|
|
|
local ht = tab:CreateTexture()
|
|
ht:SetTexture([[Interface\Buttons\ButtonHilight-Square]])
|
|
ht:SetAllPoints(tab)
|
|
tab:SetHighlightTexture(ht)
|
|
|
|
local ct = tab:CreateTexture()
|
|
ct:SetTexture([[Interface\Buttons\CheckButtonHilight]])
|
|
ct:SetAllPoints(tab)
|
|
ct:SetBlendMode('ADD')
|
|
tab:SetCheckedTexture(ct)
|
|
|
|
tab:RegisterForClicks('anyUp')
|
|
tab:RegisterForDrag('LeftButton')
|
|
|
|
return tab
|
|
end
|
|
|
|
do
|
|
local id = 0
|
|
function GuildTab:GetNextID()
|
|
id = id + 1
|
|
return id
|
|
end
|
|
end
|
|
|
|
|
|
--[[ Events ]]--
|
|
|
|
function GuildTab:OnEvent(event, ...)
|
|
local action = self[event]
|
|
if action then
|
|
action(self, event, ...)
|
|
end
|
|
end
|
|
|
|
function GuildTab:UpdateEvents()
|
|
self:UnregisterAllEvents()
|
|
self:UnregisterAllMessages()
|
|
|
|
if self:IsVisible() then
|
|
self:RegisterMessage('GUILD_BANK_TAB_CHANGE')
|
|
self:RegisterEvent('GUILDBANK_UPDATE_TABS')
|
|
self:RegisterEvent('GUILDBANKBAGSLOTS_CHANGED')
|
|
end
|
|
end
|
|
|
|
|
|
--[[ Messages ]]--
|
|
|
|
function GuildTab:GUILDBANK_UPDATE_TABS()
|
|
self:Update()
|
|
end
|
|
|
|
function GuildTab:GUILD_BANK_TAB_CHANGE(msg, tabID)
|
|
self:UpdateChecked()
|
|
end
|
|
|
|
function GuildTab:GUILDBANKBAGSLOTS_CHANGED()
|
|
self:UpdateCount()
|
|
end
|
|
|
|
--[[ Frame Events ]]--
|
|
|
|
function GuildTab:OnShow()
|
|
self:UpdateEverything()
|
|
end
|
|
|
|
function GuildTab:OnHide()
|
|
self:UpdateEvents()
|
|
end
|
|
|
|
function GuildTab:OnClick()
|
|
SetCurrentGuildBankTab(self:GetID())
|
|
QueryGuildBankTab(self:GetID())
|
|
self:SendMessage('GUILD_BANK_TAB_CHANGE', self:GetID())
|
|
end
|
|
|
|
function GuildTab:OnDrag()
|
|
--on drag
|
|
end
|
|
|
|
function GuildTab:OnEnter()
|
|
if self:GetRight() > (GetScreenWidth() / 2) then
|
|
GameTooltip:SetOwner(self, 'ANCHOR_LEFT')
|
|
else
|
|
GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
|
|
end
|
|
|
|
self:UpdateTooltip()
|
|
end
|
|
|
|
function GuildTab:OnLeave()
|
|
if GameTooltip:IsOwned(self) then
|
|
GameTooltip:Hide()
|
|
end
|
|
end
|
|
|
|
|
|
--[[ Actions ]]--
|
|
|
|
function GuildTab:UpdateEverything()
|
|
self:UpdateEvents()
|
|
self:Update()
|
|
self:UpdateChecked()
|
|
end
|
|
|
|
function GuildTab:Update()
|
|
local name, icon, isViewable, canDeposit, numWithdrawals, remainingWithdrawals = GetGuildBankTabInfo(self:GetID())
|
|
SetItemButtonTexture(self, icon or [[Interface\PaperDoll\UI-PaperDoll-Slot-Bag]])
|
|
|
|
self:UpdateCount(remainingWithdrawals)
|
|
|
|
--color red if the bag can be purchased
|
|
if not isViewable then
|
|
SetItemButtonTextureVertexColor(self, 1, 0.1, 0.1)
|
|
else
|
|
SetItemButtonTextureVertexColor(self, 1, 1, 1)
|
|
end
|
|
end
|
|
|
|
function GuildTab:SetCount(count)
|
|
local text = _G[self:GetName() .. 'Count']
|
|
local count = count or 0
|
|
|
|
if count > 1 then
|
|
if count > 999 then
|
|
text:SetFormattedText('%.1fk', count/1000)
|
|
else
|
|
text:SetText(count)
|
|
end
|
|
text:Show()
|
|
else
|
|
text:Hide()
|
|
end
|
|
end
|
|
|
|
function GuildTab:UpdateChecked()
|
|
self:SetChecked(self:IsCurrentTab())
|
|
end
|
|
|
|
function GuildTab:UpdateCount(count)
|
|
--hack, since the amount of withdrawls seems to only be correct when we're looking at the current tab
|
|
if not self:IsCurrentTab() then
|
|
return
|
|
end
|
|
|
|
if not count then
|
|
local name, icon, isViewable, canDeposit, numWithdrawals, remainingWithdrawals = GetGuildBankTabInfo(self:GetID())
|
|
count = remainingWithdrawals
|
|
end
|
|
|
|
self:SetCount(count)
|
|
end
|
|
|
|
function GuildTab:IsCurrentTab()
|
|
return self:GetID() == GetCurrentGuildBankTab()
|
|
end
|
|
|
|
|
|
--[[ Tooltip Methods ]]--
|
|
|
|
function GuildTab:UpdateTooltip()
|
|
local name, icon, isViewable, canDeposit, numWithdrawals, remainingWithdrawals = GetGuildBankTabInfo(self:GetID())
|
|
|
|
if name then
|
|
GameTooltip:SetText(name)
|
|
|
|
local access
|
|
if not canDeposit and numWithdrawals == 0 then
|
|
access = RED_FONT_COLOR_CODE .. "(" .. GUILDBANK_TAB_LOCKED .. ")" .. FONT_COLOR_CODE_CLOSE;
|
|
elseif not canDeposit then
|
|
access = RED_FONT_COLOR_CODE .."(" .. GUILDBANK_TAB_WITHDRAW_ONLY .. ")" .. FONT_COLOR_CODE_CLOSE;
|
|
elseif numWithdrawals == 0 then
|
|
access = RED_FONT_COLOR_CODE .."(" .. GUILDBANK_TAB_DEPOSIT_ONLY .. ")" .. FONT_COLOR_CODE_CLOSE;
|
|
else
|
|
access = GREEN_FONT_COLOR_CODE .. "(" .. GUILDBANK_TAB_FULL_ACCESS .. ")" .. FONT_COLOR_CODE_CLOSE;
|
|
end
|
|
|
|
GameTooltip:AddLine(access)
|
|
else
|
|
GameTooltip:SetText('Unavailable')
|
|
end
|
|
|
|
GameTooltip:Show()
|
|
end
|
|
|
|
|
|
--[[ Accessor Functions ]]--
|
|
|
|
|
|
--returns the bagnon frame we're attached to
|
|
function GuildTab:SetFrameID(frameID)
|
|
if self:GetFrameID() ~= frameID then
|
|
self.frameID = frameID
|
|
self:UpdateEverything()
|
|
end
|
|
end
|
|
|
|
function GuildTab:GetFrameID()
|
|
return self.frameID
|
|
end
|
|
|
|
--return the settings object associated with this frame
|
|
function GuildTab:GetSettings()
|
|
return Bagnon.FrameSettings:Get(self:GetFrameID())
|
|
end |