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

150 lines
No EOL
2.6 KiB
Lua

--[[
bagFrame.lua
A container object for bags
--]]
local Bagnon = LibStub('AceAddon-3.0'):GetAddon('Bagnon')
local L = LibStub('AceLocale-3.0'):GetLocale('Bagnon')
local BagFrame = Bagnon.Classy:New('Frame')
Bagnon.BagFrame = BagFrame
--[[ Constructor ]]--
function BagFrame:New(frameID, parent)
local f = self:Bind(CreateFrame('Frame', nil, parent))
f:Hide()
f:SetScript('OnShow', f.OnShow)
f:SetScript('OnHide', f.OnHide)
f:SetFrameID(frameID)
f:CreateBagSlots()
f:UpdateEvents()
return f
end
function BagFrame:CreateBagSlots()
local bags = {}
for i, slotID in self:GetBagSlots() do
bags[i] = Bagnon.Bag:New(slotID, self:GetFrameID(), self)
end
self.bags = bags
end
--[[ Messages ]]--
function BagFrame:BAG_FRAME_SHOW(msg, frameID)
if frameID == self:GetFrameID() then
self:UpdateShown()
end
end
function BagFrame:BAG_FRAME_HIDE(msg, frameID)
if frameID == self:GetFrameID() then
self:UpdateShown()
end
end
--[[ Frame Events ]]--
function BagFrame:OnShow()
self:Layout()
self:SendMessage('BAG_FRAME_UPDATE_SHOWN', self:GetFrameID())
end
function BagFrame:OnHide()
self:SendMessage('BAG_FRAME_UPDATE_SHOWN', self:GetFrameID())
end
--[[ Update Methods ]]--
function BagFrame:UpdateShown()
if self:IsBagFrameShown() then
if not self:IsShown() then
UIFrameFadeIn(self, 0.1)
end
else
self:Hide()
end
end
function BagFrame:UpdateEvents()
self:UnregisterAllMessages()
self:RegisterMessage('BAG_FRAME_SHOW')
self:RegisterMessage('BAG_FRAME_HIDE')
end
function BagFrame:Layout()
if not self:IsVisible() then return end
local width = 0
local height = 0
local spacing = self:GetSpacing()
local padding = self:GetPadding()
width = self.bags[1]:GetWidth() * #self.bags + spacing * (#self.bags - 1) + padding * 2
height = self.bags[1]:GetHeight() + padding * 2
local prev
for i, bag in self:GetBags() do
if prev then
bag:SetPoint('LEFT', prev, 'RIGHT', spacing, 0)
else
bag:SetPoint('LEFT', padding, 0)
end
bag:Show()
prev = bag
end
self:SetWidth(width)
self:SetHeight(height)
end
--[[ Properties ]]--
function BagFrame:SetFrameID(frameID)
if self:GetFrameID() ~= frameID then
self.frameID = frameID
self:UpdateShown()
end
end
function BagFrame:GetFrameID()
return self.frameID
end
function BagFrame:GetBags()
return ipairs(self.bags)
end
--[[ Frame Settings ]]--
function BagFrame:GetSettings()
return Bagnon.FrameSettings:Get(self:GetFrameID())
end
function BagFrame:IsBagFrameShown()
return self:GetSettings():IsBagFrameShown()
end
function BagFrame:GetSpacing()
return 4
end
function BagFrame:GetPadding()
return 0
end
function BagFrame:GetBagSlots()
return self:GetSettings():GetBagSlots()
end