ElvUI/Modules/DataTexts/Bags.lua

99 lines
3.1 KiB
Lua

local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local DT = E:GetModule('DataTexts')
local strjoin = strjoin
local format = format
local GetContainerNumFreeSlots = GetContainerNumFreeSlots
local GetContainerNumSlots = GetContainerNumSlots
local ToggleAllBags = ToggleAllBags
local CURRENCY = CURRENCY
local NUM_BAG_SLOTS = NUM_BAG_SLOTS
local MAX_WATCHED_TOKENS = MAX_WATCHED_TOKENS
local GetBagName = GetBagName
local GetInventoryItemQuality = GetInventoryItemQuality
local GetItemQualityColor = GetItemQualityColor
local GetInventoryItemTexture = GetInventoryItemTexture
local C_CurrencyInfo_GetBackpackCurrencyInfo = C_CurrencyInfo.GetBackpackCurrencyInfo
local displayString, lastPanel = ''
local iconString = '|T%s:14:14:0:0:64:64:4:60:4:60|t %s'
local bagIcon = 'Interface/Buttons/Button-Backpack-Up'
local function OnEvent(self)
lastPanel = self
local free, total, used = 0, 0
for i = 0, NUM_BAG_SLOTS do
free, total = free + GetContainerNumFreeSlots(i), total + GetContainerNumSlots(i)
end
used = total - free
local textFormat = E.global.datatexts.settings.Bags.textFormat
if textFormat == "FREE" then
self.text:SetFormattedText(displayString, L["Bags"]..": ", free)
elseif textFormat == "USED" then
self.text:SetFormattedText(displayString, L["Bags"]..": ", used)
elseif textFormat == "FREE_TOTAL" then
self.text:SetFormattedText(displayString, L["Bags"]..": ", free, total)
else
self.text:SetFormattedText(displayString, L["Bags"]..": ", used, total)
end
end
local function OnClick()
ToggleAllBags()
end
local function OnEnter()
DT.tooltip:ClearLines()
for i = 0, NUM_BAG_SLOTS do
local bagName = GetBagName(i)
if bagName then
local numSlots = GetContainerNumSlots(i)
local freeSlots = GetContainerNumFreeSlots(i)
local usedSlots, sumNum = numSlots - freeSlots, 19 + i
local r2, g2, b2 = E:ColorGradient(usedSlots / numSlots, .1,1,.1, 1,1,.1, 1,.1,.1)
local r, g, b, icon
if i > 0 then
r, g, b = GetItemQualityColor(GetInventoryItemQuality('player', sumNum) or 1)
icon = GetInventoryItemTexture('player', sumNum)
end
DT.tooltip:AddDoubleLine(format(iconString, icon or bagIcon, bagName), format('%d / %d', usedSlots, numSlots), r or 1, g or 1, b or 1, r2, g2, b2)
end
end
for i = 1, MAX_WATCHED_TOKENS do
local info = C_CurrencyInfo_GetBackpackCurrencyInfo(i)
if info then
if i == 1 then
DT.tooltip:AddLine(' ')
DT.tooltip:AddLine(CURRENCY)
DT.tooltip:AddLine(' ')
end
if info.quantity then
DT.tooltip:AddDoubleLine(format(iconString, info.iconFileID, info.name), info.quantity, 1, 1, 1, 1, 1, 1)
end
end
end
DT.tooltip:Show()
end
local function ValueColorUpdate(hex)
local textFormat = E.global.datatexts.settings.Bags.textFormat
if textFormat == "FREE" or textFormat == "USED" then
displayString = strjoin('', '%s', hex, '%d|r')
else
displayString = strjoin('', '%s', hex, '%d/%d|r')
end
if lastPanel then OnEvent(lastPanel) end
end
E.valueColorUpdateFuncs[ValueColorUpdate] = true
DT:RegisterDatatext('Bags', nil, {'BAG_UPDATE'}, OnEvent, nil, OnClick, OnEnter, nil, L["Bags"], nil, ValueColorUpdate)