Files
ElvUIModernized/ElvUI/Modules/Bags/BagBar.lua
T

165 lines
5.9 KiB
Lua

local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local B = E:GetModule("Bags");
--Cache global variables
--Lua functions
local _G = _G
local unpack = unpack
local tinsert = table.insert
--WoW API / Variables
local CreateFrame = CreateFrame
local NUM_BAG_FRAMES = NUM_BAG_FRAMES
local TOTAL_BAGS = NUM_BAG_FRAMES + 2
local ElvUIKeyRing = CreateFrame("CheckButton", "ElvUIKeyRingButton", UIParent, "ItemButtonTemplate")
ElvUIKeyRing:RegisterForClicks("anyUp")
E:StripTextures(ElvUIKeyRing)
ElvUIKeyRing:SetScript("OnClick", function() if CursorHasItem() then PutKeyInKeyRing() else ToggleKeyRing() end end)
ElvUIKeyRing:SetScript("OnReceiveDrag", function() if CursorHasItem() then PutKeyInKeyRing() end end)
ElvUIKeyRing:SetScript("OnEnter", function() GameTooltip:SetOwner(this, "ANCHOR_LEFT") local color = HIGHLIGHT_FONT_COLOR GameTooltip:SetText(KEYRING, color.r, color.g, color.b) GameTooltip:AddLine() end)
ElvUIKeyRing:SetScript("OnLeave", function() GameTooltip:Hide() end)
_G[ElvUIKeyRing:GetName().."IconTexture"]:SetTexture("Interface\\ContainerFrame\\KeyRing-Bag-Icon")
_G[ElvUIKeyRing:GetName().."IconTexture"]:SetTexCoord(unpack(E.TexCoords))
local function OnEnter()
if not E.db.bags.bagBar.mouseover then return end
UIFrameFadeIn(ElvUIBags, 0.2, ElvUIBags:GetAlpha(), 1)
end
local function OnLeave()
if not E.db.bags.bagBar.mouseover then return end
UIFrameFadeOut(ElvUIBags, 0.2, ElvUIBags:GetAlpha(), 0)
end
function B:SkinBag(bag)
local icon = _G[bag:GetName().."IconTexture"]
bag.oldTex = icon:GetTexture()
E:StripTextures(bag)
E:CreateBackdrop(bag, "Default", true)
bag.backdrop:SetAllPoints()
E:StyleButton(bag, true)
icon:SetTexture(bag.oldTex)
icon:Show()
E:SetInside(icon)
icon:SetTexCoord(unpack(E.TexCoords))
end
function B:SizeAndPositionBagBar()
if not ElvUIBags then return end
local buttonSpacing = E.db.bags.bagBar.spacing
local backdropSpacing = E.db.bags.bagBar.backdropSpacing
local bagBarSize = E.db.bags.bagBar.size
local showBackdrop = E.db.bags.bagBar.showBackdrop
local growthDirection = E.db.bags.bagBar.growthDirection
local sortDirection = E.db.bags.bagBar.sortDirection
if E.db.bags.bagBar.mouseover then
ElvUIBags:SetAlpha(0)
else
ElvUIBags:SetAlpha(1)
end
if showBackdrop then
ElvUIBags.backdrop:Show()
else
ElvUIBags.backdrop:Hide()
end
E:Size(ElvUIKeyRingButton, bagBarSize)
ElvUIKeyRingButton:ClearAllPoints()
for i = 1, getn(ElvUIBags.buttons) do
local button = ElvUIBags.buttons[i]
local prevButton = ElvUIBags.buttons[i-1]
E:Size(button, E.db.bags.bagBar.size)
button:ClearAllPoints()
if growthDirection == "HORIZONTAL" and sortDirection == "ASCENDING" then
if i == 1 then
E:Point(button, "LEFT", ElvUIBags, "LEFT", (showBackdrop and (backdropSpacing + E.Border) or 0), 0)
elseif prevButton then
E:Point(button, "LEFT", prevButton, "RIGHT", buttonSpacing, 0)
end
elseif growthDirection == "VERTICAL" and sortDirection == "ASCENDING" then
if i == 1 then
E:Point(button, "TOP", ElvUIBags, "TOP", 0, -(showBackdrop and (backdropSpacing + E.Border) or 0))
elseif prevButton then
E:Point(button, "TOP", prevButton, "BOTTOM", 0, -buttonSpacing)
end
elseif growthDirection == "HORIZONTAL" and sortDirection == "DESCENDING" then
if i == 1 then
E:Point(button, "RIGHT", ElvUIBags, "RIGHT", -(showBackdrop and (backdropSpacing + E.Border) or 0), 0)
elseif prevButton then
E:Point(button, "RIGHT", prevButton, "LEFT", -buttonSpacing, 0)
end
else
if i == 1 then
E:Point(button, "BOTTOM", ElvUIBags, "BOTTOM", 0, (showBackdrop and (backdropSpacing + E.Border) or 0))
elseif prevButton then
E:Point(button, "BOTTOM", prevButton, "TOP", 0, buttonSpacing)
end
end
end
if growthDirection == "HORIZONTAL" then
E:Size(ElvUIBags, bagBarSize*(TOTAL_BAGS) + buttonSpacing*(TOTAL_BAGS-1) + ((showBackdrop == true and (E.Border + backdropSpacing) or E.Spacing)*2), bagBarSize + ((showBackdrop and (E.Border + backdropSpacing) or E.Spacing)*2))
else
E:Size(ElvUIBags, bagBarSize + ((showBackdrop and (E.Border + backdropSpacing) or E.Spacing)*2), bagBarSize*(TOTAL_BAGS) + buttonSpacing*(TOTAL_BAGS-1) + ((showBackdrop == true and (E.Border + backdropSpacing) or E.Spacing)*2))
end
end
function B:LoadBagBar()
if not E.private.bags.bagBar then return end
local ElvUIBags = CreateFrame("Frame", "ElvUIBags", E.UIParent)
E:Point(ElvUIBags, "TOPRIGHT", RightChatPanel, "TOPLEFT", -4, 0)
ElvUIBags.buttons = {}
E:CreateBackdrop(ElvUIBags)
ElvUIBags.backdrop:SetAllPoints()
ElvUIBags:EnableMouse(true)
ElvUIBags:SetScript("OnEnter", OnEnter)
ElvUIBags:SetScript("OnLeave", OnLeave)
MainMenuBarBackpackButton:SetParent(ElvUIBags)
MainMenuBarBackpackButton.SetParent = E.dummy
MainMenuBarBackpackButton:ClearAllPoints()
E:FontTemplate(MainMenuBarBackpackButtonCount, nil, 10)
MainMenuBarBackpackButtonCount:ClearAllPoints()
E:Point(MainMenuBarBackpackButtonCount, "BOTTOMRIGHT", MainMenuBarBackpackButton, "BOTTOMRIGHT", -1, 4)
MainMenuBarBackpackButton:Show()
MainMenuBarBackpackButton:SetAlpha(1)
HookScript(MainMenuBarBackpackButton, "OnEnter", OnEnter)
HookScript(MainMenuBarBackpackButton, "OnLeave", OnLeave)
tinsert(ElvUIBags.buttons, MainMenuBarBackpackButton)
self:SkinBag(MainMenuBarBackpackButton)
for i = 0, NUM_BAG_FRAMES - 1 do
local b = _G["CharacterBag"..i.."Slot"]
b:SetParent(ElvUIBags)
b.SetParent = E.dummy
b:Show()
b:SetAlpha(1)
HookScript(b, "OnEnter", OnEnter)
HookScript(b, "OnLeave", OnLeave)
self:SkinBag(b)
tinsert(ElvUIBags.buttons, b)
end
E:SetTemplate(ElvUIKeyRingButton)
E:StyleButton(ElvUIKeyRingButton, true)
E:SetInside(_G[ElvUIKeyRingButton:GetName().."IconTexture"])
ElvUIKeyRingButton:SetParent(ElvUIBags)
ElvUIKeyRingButton.SetParent = E.dummy
HookScript(ElvUIKeyRingButton, "OnEnter", OnEnter)
HookScript(ElvUIKeyRingButton, "OnLeave", OnLeave)
tinsert(ElvUIBags.buttons, ElvUIKeyRingButton)
self:SizeAndPositionBagBar()
E:CreateMover(ElvUIBags, "BagsMover", L["Bags"])
end