mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-01 11:20:01 +00:00
compat\vanilla.lua named the handful of things that differed between clients back when pfUI targeted several. Only one client remains, so every constant had exactly one value. Inline each at its use site and delete the file, init\compat.xml, and both TOC entries. COOLDOWN_FRAME_TYPE -> "Model" LOOT_BUTTON_FRAME_TYPE -> "LootButton" MINIMAP_TRACKING_FRAME -> _G.MiniMapTrackingFrame FRIENDS_NAME_LOCATION -> "ButtonTextNameLocation" EVENTS_MINIMAP_ZONE_UPDATE -> the event list, in panel.lua MICRO_BUTTONS -> a local in panel.lua NAMEPLATE_OBJECTORDER -> a local in nameplates.lua ACTIONBAR_SECURE_TEMPLATE_BAR/_BUTTON -> nil, so the argument goes away NAMEPLATE_FRAMETYPE and PLAYER_BUFF_START_ID had no readers left. RunMacroText moves to pfUI.lua. compat\vanilla.lua was setfenv'd into the pfUI environment, so the function only ever existed on pfUI.env; at file scope it lands on _G as a real export instead. Nothing in pfUI calls it, and ClassicAPI neither defines nor looks for a RunMacroText global -- it does the same throwaway edit box natively in src/macro/Execute.cpp and only defers to a global RunMacro.
1214 lines
44 KiB
Lua
1214 lines
44 KiB
Lua
pfUI:RegisterModule("bags", function ()
|
|
local rawborder, default_border = GetBorderSize("bags")
|
|
|
|
local extractSpells = {
|
|
[13262] = {frame="disenchant"},
|
|
[1804] = {frame="picklock"},
|
|
}
|
|
|
|
local scanner = libtipscan:GetScanner("input_search")
|
|
|
|
local function BagSortOpts()
|
|
return {
|
|
reverse = C.appearance.bags.sortreverse == "1",
|
|
reversePrio = C.appearance.bags.sortprioreverse == "1",
|
|
}
|
|
end
|
|
|
|
-- function to detect openable items in inventory
|
|
local openable = { bag = nil, slot = nil, icon = nil }
|
|
local function GetNextOpenable()
|
|
if openable.icon and openable.icon == GetContainerItemInfo(openable.bag, openable.slot) then
|
|
return openable.bag, openable.slot
|
|
end
|
|
|
|
for bag=-2, 11 do
|
|
local bagsize = GetContainerNumSlots(bag)
|
|
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
for slot=1, bagsize do
|
|
local _, canOpen = C_Container.IsContainerItemOpenable(bag, slot)
|
|
if canOpen then
|
|
openable.bag = bag
|
|
openable.slot = slot
|
|
openable.icon = GetContainerItemInfo(bag, slot)
|
|
return openable.bag, openable.slot
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- prevent from being placed offscreen
|
|
_G.StackSplitFrame:SetClampedToScreen(true)
|
|
|
|
-- overwrite some bag functions
|
|
function _G.OpenAllBags()
|
|
if pfUI.bag.right:IsShown() then
|
|
pfUI.bag.right:Hide()
|
|
else
|
|
pfUI.bag.right:Show()
|
|
end
|
|
end
|
|
|
|
function _G.CloseAllBags()
|
|
pfUI.bag.right:Hide()
|
|
end
|
|
|
|
function _G.ToggleBackpack()
|
|
if pfUI.bag.right:IsShown() then
|
|
pfUI.bag.right:Hide()
|
|
else
|
|
pfUI.bag.right:Show()
|
|
end
|
|
end
|
|
|
|
function _G.OpenBackpack()
|
|
if ( pfUI.bag.right:IsShown() ) then
|
|
ContainerFrame1.backpackWasOpen = 1
|
|
return
|
|
else
|
|
ContainerFrame1.backpackWasOpen = nil
|
|
end
|
|
|
|
if ( not ContainerFrame1.backpackWasOpen ) then
|
|
ToggleBackpack()
|
|
end
|
|
end
|
|
|
|
function _G.ToggleBag()
|
|
return
|
|
end
|
|
|
|
-- hide blizzard's bankframe
|
|
BankFrame:SetScale(0.001)
|
|
BankFrame:SetPoint("TOPLEFT", 0,0)
|
|
BankFrame:SetAlpha(0)
|
|
|
|
pfUI.bag = CreateFrame("Frame", "pfUIBag")
|
|
pfUI.bag:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
pfUI.bag:RegisterEvent("BAG_UPDATE")
|
|
pfUI.bag:RegisterEvent("PLAYERBANKSLOTS_CHANGED")
|
|
pfUI.bag:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED")
|
|
pfUI.bag:RegisterEvent("BAG_UPDATE_COOLDOWN")
|
|
pfUI.bag:RegisterEvent("BAG_CLOSED")
|
|
pfUI.bag:RegisterEvent("BANKFRAME_CLOSED")
|
|
pfUI.bag:RegisterEvent("BANKFRAME_OPENED")
|
|
pfUI.bag:RegisterEvent("ITEM_LOCK_CHANGED")
|
|
pfUI.bag:RegisterEvent("SPELLS_CHANGED")
|
|
pfUI.bag:RegisterEvent("MERCHANT_CLOSED")
|
|
|
|
pfUI.bag.delay = { UpdateBag = {} }
|
|
|
|
pfUI.bag:SetScript("OnUpdate", function()
|
|
-- update delayed ones every 0.1s
|
|
if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + .1 end
|
|
|
|
if this.delay.RefreshSpells then
|
|
this.delay.RefreshSpells = nil
|
|
pfUI.bag:RefreshSpells()
|
|
end
|
|
|
|
if this.delay.CheckFullUpdate then
|
|
this.delay.CheckFullUpdate = nil
|
|
pfUI.bag:CheckFullUpdate()
|
|
end
|
|
|
|
if this.delay.UpdateCooldowns then
|
|
this.delay.UpdateCooldowns = nil
|
|
pfUI.bag:UpdateCooldowns()
|
|
end
|
|
|
|
if this.delay.UpdateItemLock then
|
|
this.delay.UpdateItemLock = nil
|
|
pfUI.bag:UpdateItemLock()
|
|
end
|
|
|
|
for bag in pairs(this.delay.UpdateBag) do
|
|
this.delay.UpdateBag[bag] = nil
|
|
pfUI.bag:UpdateBag(bag)
|
|
end
|
|
end)
|
|
|
|
pfUI.bag:SetScript("OnEvent", function()
|
|
if event == "PLAYER_ENTERING_WORLD" then
|
|
pfUI.bag:CreateBags()
|
|
pfUI.bag.right:Hide()
|
|
|
|
pfUI.bag:CreateBags("bank")
|
|
pfUI.bag.left:Hide()
|
|
|
|
pfUI.bag:CreateBagSlots(pfUI.bag.right)
|
|
pfUI.bag:CreateBagSlots(pfUI.bag.left)
|
|
pfUI.bag:RefreshSpells()
|
|
end
|
|
|
|
if event == "SPELLS_CHANGED" then
|
|
this.delay.RefreshSpells = true
|
|
end
|
|
|
|
if event == "BAG_CLOSED" or event == "PLAYERBANKSLOTS_CHANGED" or
|
|
event == "PLAYERBANKBAGSLOTS_CHANGED" or event == "BAG_UPDATE" or
|
|
event == "BANKFRAME_OPENED" or event == "BANKFRAME_CLOSED" then
|
|
this.delay.CheckFullUpdate = true
|
|
end
|
|
|
|
if event == "BAG_UPDATE_COOLDOWN" then
|
|
this.delay.UpdateCooldowns = true
|
|
end
|
|
|
|
if event == "ITEM_LOCK_CHANGED" then
|
|
this.delay.UpdateItemLock = true
|
|
end
|
|
|
|
if event == "PLAYERBANKSLOTS_CHANGED" then
|
|
this.delay.UpdateBag[-1] = true
|
|
end
|
|
|
|
if event == "BAG_UPDATE" then
|
|
this.delay.UpdateBag[arg1] = true
|
|
end
|
|
|
|
if event == "PLAYERBANKBAGSLOTS_CHANGED" then
|
|
pfUI.bag:CreateBagSlots(pfUI.bag.left)
|
|
end
|
|
|
|
if event == "BANKFRAME_OPENED" then
|
|
pfUI.bag.left:Show()
|
|
OpenBackpack()
|
|
end
|
|
|
|
if event == "BANKFRAME_CLOSED" then
|
|
pfUI.bag.left:Hide()
|
|
end
|
|
|
|
if event == "MERCHANT_CLOSED" then
|
|
if not ContainerFrame1.backpackWasOpen then
|
|
pfUI.bag.right:Hide()
|
|
end
|
|
end
|
|
end)
|
|
|
|
tinsert(UISpecialFrames,"pfBag")
|
|
|
|
pfUI.BACKPACK = { -2, 0, 1, 2, 3, 4 }
|
|
pfUI.BANK = { -1, 5, 6, 7, 8, 9, 10, 11 }
|
|
|
|
pfUI.bags = {}
|
|
pfUI.slots = {}
|
|
|
|
function pfUI.bag:CheckFullUpdate()
|
|
local maxslots = 0
|
|
|
|
for bag = -2,11 do
|
|
local bagsize = GetContainerNumSlots(bag)
|
|
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
|
|
maxslots = maxslots + bagsize
|
|
end
|
|
|
|
if maxslots ~= pfUI.bag.maxslots then
|
|
for bag = -2,11 do
|
|
for slot, f in ipairs(pfUI.bags[bag].slots) do
|
|
local bagsize = GetContainerNumSlots(bag)
|
|
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
|
|
if slot > bagsize then
|
|
pfUI.bags[bag].slots[slot].frame:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
pfUI.bag:CreateBags()
|
|
pfUI.bag:CreateBags("bank")
|
|
pfUI.bag.maxslots = maxslots
|
|
end
|
|
end
|
|
|
|
function pfUI.bag:CreateBags(object)
|
|
local x = 0
|
|
local y = 0
|
|
local frame = {}
|
|
local iterate = {}
|
|
local anchor, rowlength, cwidth
|
|
|
|
if object == "bank" then
|
|
if not pfUI.bag.left then pfUI.bag.left = CreateFrame("Frame", "pfBank", UIParent) end
|
|
anchor = { "BOTTOMLEFT", (pfUI.chat and pfUI.chat.left or nil), "BOTTOMRIGHT", "TOPLEFT", "TOPRIGHT" }
|
|
rowlength = tonumber(C.appearance.bags.bankrowlength)
|
|
cwidth = C.chat.left.width
|
|
iterate = pfUI.BANK
|
|
frame = pfUI.bag.left
|
|
else
|
|
if not pfUI.bag.right then pfUI.bag.right = CreateFrame("Frame", "pfBag", UIParent) end
|
|
rowlength = tonumber(C.appearance.bags.bagrowlength)
|
|
anchor = { "BOTTOMRIGHT", (pfUI.chat and pfUI.chat.right or nil), "BOTTOMLEFT", "TOPRIGHT", "TOPLEFT" }
|
|
cwidth = C.chat.right.width
|
|
iterate = pfUI.BACKPACK
|
|
frame = pfUI.bag.right
|
|
end
|
|
|
|
if not frame.init then
|
|
pfUI.bag:CreateAdditions(frame)
|
|
frame:SetFrameStrata("HIGH")
|
|
CreateBackdrop(frame, default_border)
|
|
CreateBackdropShadow(frame)
|
|
frame.init = true
|
|
end
|
|
|
|
if pfUI.chat and C.appearance.bags.icon_size == "-1" then
|
|
-- align bags to chat if no custom size is set
|
|
frame:SetWidth(cwidth * anchor[2]:GetScale())
|
|
elseif C.appearance.bags.icon_size ~= "-1" then
|
|
-- use custom size if set
|
|
frame:SetWidth((C.appearance.bags.icon_size + default_border*3) * rowlength - default_border)
|
|
else
|
|
-- fallback to 22px without any anchor or custom setting
|
|
frame:SetWidth((22 + default_border*3) * rowlength - default_border)
|
|
end
|
|
|
|
if pfUI.chat and C.appearance.bags.icon_size ~= "-1" then
|
|
-- ignore custom icon size
|
|
frame:SetPoint(anchor[1], anchor[2], anchor[1], 0, 0)
|
|
elseif pfUI.chat then
|
|
-- use chat frame as anchor if existing
|
|
if C.appearance.bags.abovechat == "0" then
|
|
frame:SetPoint(anchor[1], anchor[2], anchor[1], 0, 0)
|
|
frame:SetPoint(anchor[3], anchor[2], anchor[3], 0, 0)
|
|
else
|
|
frame:SetPoint(anchor[3], anchor[2], anchor[5], 0, 3*default_border)
|
|
frame:SetPoint(anchor[1], anchor[2], anchor[4], 0, 3*default_border)
|
|
end
|
|
else
|
|
-- align frame to UIParent if no anchor is available
|
|
frame:SetPoint(anchor[1], UIParent, anchor[1], 5, 5)
|
|
end
|
|
|
|
if C.appearance.bags.movable == "1" then
|
|
-- enable movable bag frames
|
|
LoadMovable(frame)
|
|
frame:EnableMouse(1)
|
|
frame:SetMovable(1)
|
|
frame:RegisterForDrag("LeftButton")
|
|
frame:SetScript("OnDragStart", function()
|
|
this:StartMoving()
|
|
end)
|
|
|
|
frame:SetScript("OnDragStop", function()
|
|
this:StopMovingOrSizing()
|
|
SaveMovable(this)
|
|
end)
|
|
end
|
|
|
|
frame:EnableMouse(1)
|
|
|
|
if C.appearance.bags.movable == "1" and C.appearance.bags.icon_size ~= "-1" then
|
|
frame.button_size = C.appearance.bags.icon_size
|
|
else
|
|
frame.button_size = (frame:GetWidth() - 2*default_border - (rowlength-1)*default_border*3)/ rowlength
|
|
end
|
|
|
|
local topspace = pfUI.bag.right.close:GetHeight() + default_border * 2
|
|
local bottomspace = pfUI.panel and pfUI.panel.right:IsShown() and pfUI.panel.right:GetHeight() + default_border or 16 + default_border
|
|
|
|
for id, bag in pairs(iterate) do
|
|
if not pfUI.bags[bag] then
|
|
pfUI.bags[bag] = CreateFrame("Frame", "pfBag" .. bag, frame)
|
|
pfUI.bags[bag]:SetAllPoints(frame)
|
|
pfUI.bags[bag].slots = {}
|
|
end
|
|
pfUI.bags[bag]:SetID(bag)
|
|
local bagsize = GetContainerNumSlots(bag)
|
|
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
for slot=1, bagsize do
|
|
pfUI.bag:UpdateSlot(bag, slot)
|
|
|
|
pfUI.bags[bag].slots[slot].frame:ClearAllPoints()
|
|
pfUI.bags[bag].slots[slot].frame:SetPoint("TOPLEFT",
|
|
default_border + x*(frame.button_size+default_border*3),
|
|
-default_border*2 - y*(frame.button_size+default_border*3) - topspace)
|
|
|
|
pfUI.bags[bag].slots[slot].frame:SetSize(frame.button_size, frame.button_size)
|
|
|
|
if x >= rowlength - 1 then
|
|
y = y + 1
|
|
x = 0
|
|
else
|
|
x = x + 1
|
|
end
|
|
end
|
|
end
|
|
|
|
if x > 0 then y = y + 1 end
|
|
frame:SetHeight( default_border*2 + y*(frame.button_size+default_border*3) + topspace + bottomspace)
|
|
|
|
local chat = pfUI.chat and ( object == "bank" and pfUI.chat.left or pfUI.chat.right) or nil
|
|
|
|
frame:SetScript("OnShow", function()
|
|
frame.opened = true
|
|
if C.appearance.bags.hidechat == "1" and chat and chat:IsVisible() then
|
|
frame.chatWasOpen = true
|
|
chat:Hide()
|
|
end
|
|
if C.appearance.bags.autoSortOnOpen == "1" then
|
|
libbagsort:Sort({0, 1, 2, 3, 4}, BagSortOpts())
|
|
end
|
|
pfUI.bag:CreateBags(object)
|
|
PlaySound("INTERFACESOUND_BACKPACKOPEN")
|
|
end)
|
|
|
|
frame:SetScript("OnHide", function()
|
|
if C.appearance.bags.hidechat == "1" and chat and frame.chatWasOpen then
|
|
chat:Show()
|
|
frame.chatWasOpen = false
|
|
end
|
|
pfUI.bag:CreateBags(object)
|
|
PlaySound("INTERFACESOUND_BACKPACKCLOSE")
|
|
if frame.opened then
|
|
frame.opened = nil
|
|
pfUI.events:TriggerEvent("bag:closed", object)
|
|
end
|
|
end)
|
|
end
|
|
|
|
function pfUI.bag:UpdateBag(bag)
|
|
local bagsize = GetContainerNumSlots(bag)
|
|
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
for slot=1, bagsize do
|
|
pfUI.bag:UpdateSlot(bag, slot)
|
|
end
|
|
end
|
|
|
|
function pfUI.bag:UpdateSlot(bag, slot)
|
|
if not pfUI.bags[bag] then return end
|
|
|
|
if not pfUI.bags[bag].slots[slot] then
|
|
local tpl = "ContainerFrameItemButtonTemplate"
|
|
if bag == -1 then tpl = "BankItemButtonGenericTemplate" end
|
|
pfUI.bags[bag].slots[slot] = {}
|
|
pfUI.bags[bag].slots[slot].frame = CreateFrame("Button", "pfBag" .. bag .. "item" .. slot, pfUI.bags[bag], tpl)
|
|
pfUI.bags[bag].slots[slot].frame.qtext = pfUI.bags[bag].slots[slot].frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
|
|
pfUI.bags[bag].slots[slot].frame:SetNormalTexture("")
|
|
pfUI.bags[bag].slots[slot].bag = bag
|
|
pfUI.bags[bag].slots[slot].slot = slot
|
|
pfUI.bags[bag].slots[slot].frame:SetID(slot)
|
|
|
|
-- add cooldown frame to bankslots
|
|
if tpl == "BankItemButtonGenericTemplate" then
|
|
local bankslot = pfUI.bags[bag].slots[slot].frame
|
|
local name = "pfBag" .. bag .. "item" .. slot .. "Cooldown"
|
|
bankslot.cd = CreateFrame("Model", name, bankslot, "CooldownFrameTemplate")
|
|
bankslot.cd:SetAllPoints(bankslot)
|
|
bankslot.cd.pfCooldownStyleAnimation = 1
|
|
bankslot.cd.pfCooldownType = "ALL"
|
|
else
|
|
local bagslot = pfUI.bags[bag].slots[slot].frame
|
|
bagslot.cd = _G[bagslot:GetName().."Cooldown"]
|
|
bagslot.cd.pfCooldownType = "ALL"
|
|
end
|
|
|
|
if not pfUI.bags[bag].slots[slot].frame.backdrop then
|
|
CreateBackdrop(pfUI.bags[bag].slots[slot].frame, default_border)
|
|
end
|
|
|
|
local highlight = pfUI.bags[bag].slots[slot].frame:GetHighlightTexture()
|
|
highlight:SetTexture(.5, .5, .5, .5)
|
|
|
|
local pushed = pfUI.bags[bag].slots[slot].frame:GetPushedTexture()
|
|
pushed:SetTexture(.5, .5, .5, .5)
|
|
|
|
local questText = pfUI.bags[bag].slots[slot].frame.qtext
|
|
questText:SetFont(pfUI.font_default, 13, "THICKOUTLINE")
|
|
questText:SetPoint("TOPLEFT", 0, 0)
|
|
questText:SetTextColor(1, .8, .2, 1)
|
|
|
|
local countFrame = _G[pfUI.bags[bag].slots[slot].frame:GetName() .. "Count"]
|
|
countFrame:SetFont(pfUI.font_unit, C.global.font_unit_size, "OUTLINE")
|
|
countFrame:SetAllPoints()
|
|
countFrame:SetJustifyH("RIGHT")
|
|
countFrame:SetJustifyV("BOTTOM")
|
|
|
|
local icon = _G[pfUI.bags[bag].slots[slot].frame:GetName() .. "IconTexture"]
|
|
icon:SetTexCoord(.08, .92, .08, .92)
|
|
icon:ClearAllPoints()
|
|
icon:SetPoint("TOPLEFT", 1, -1)
|
|
icon:SetPoint("BOTTOMRIGHT", -1, 1)
|
|
|
|
local border = _G[pfUI.bags[bag].slots[slot].frame:GetName() .. "NormalTexture"]
|
|
border:SetTexture("")
|
|
|
|
if ShaguScore then
|
|
pfUI.bags[bag].slots[slot].frame.scoreText = pfUI.bags[bag].slots[slot].frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
pfUI.bags[bag].slots[slot].frame.scoreText:SetFont(pfUI.font_default, 12, "OUTLINE")
|
|
pfUI.bags[bag].slots[slot].frame.scoreText:SetPoint("TOPRIGHT", 0, 0)
|
|
end
|
|
end
|
|
|
|
local itemID = C_Container.GetContainerItemID(bag, slot)
|
|
|
|
local texture, count, locked, quality = GetContainerItemInfo(bag, slot)
|
|
|
|
if count == 1 then
|
|
local charges = C_Container.GetContainerItemCharges(bag, slot)
|
|
if charges > 1 then
|
|
count = charges
|
|
end
|
|
end
|
|
|
|
local _, _, q, _, _, _, itype = C_Item.GetItemInfo(itemID)
|
|
|
|
-- running advanced item color scan
|
|
if C.appearance.bags.borderonlygear == "0" and texture and quality and quality < 1 then
|
|
if quality then quality = q end
|
|
end
|
|
|
|
SetItemButtonTexture(pfUI.bags[bag].slots[slot].frame, texture)
|
|
SetItemButtonCount(pfUI.bags[bag].slots[slot].frame, count)
|
|
SetItemButtonDesaturated(pfUI.bags[bag].slots[slot].frame, locked, 0.5, 0.5, 0.5)
|
|
|
|
local hasItem = texture and 1 or nil
|
|
pfUI.bags[bag].slots[slot].frame.hasItem = hasItem
|
|
pfUI.bags[bag].slots[slot].frame.qtext:SetText("")
|
|
|
|
ContainerFrame_UpdateCooldown(bag, pfUI.bags[bag].slots[slot].frame)
|
|
|
|
-- detect backdrop border color
|
|
if texture and itype == "Quest" then
|
|
pfUI.bags[bag].slots[slot].frame.backdrop:SetBackdropBorderColor(1, .8, .2, .8)
|
|
pfUI.bags[bag].slots[slot].frame.qtext:SetText("?")
|
|
elseif texture and quality and quality > tonumber(C.appearance.bags.borderlimit) then
|
|
pfUI.bags[bag].slots[slot].frame.backdrop:SetBackdropBorderColor(GetItemQualityColor(quality))
|
|
elseif texture and quality then
|
|
pfUI.bags[bag].slots[slot].frame.backdrop:SetBackdropBorderColor(.5,.5,.5,1)
|
|
else
|
|
local bagtype = GetBagFamily(bag)
|
|
|
|
if bagtype == "QUIVER" then
|
|
pfUI.bags[bag].slots[slot].frame.backdrop:SetBackdropBorderColor(1,1,.5,.5)
|
|
elseif bagtype == "SOULBAG" then
|
|
pfUI.bags[bag].slots[slot].frame.backdrop:SetBackdropBorderColor(1,.5,.5,.5)
|
|
elseif bagtype == "SPECIAL" then
|
|
pfUI.bags[bag].slots[slot].frame.backdrop:SetBackdropBorderColor(.5,.5,1,.5)
|
|
elseif bagtype == "KEYRING" then
|
|
pfUI.bags[bag].slots[slot].frame.backdrop:SetBackdropBorderColor(.5,1,1,.5)
|
|
else
|
|
pfUI.bags[bag].slots[slot].frame.backdrop:SetBackdropBorderColor(1,1,1,.2)
|
|
end
|
|
end
|
|
|
|
-- add shaguscore if we have it
|
|
if ShaguScore and pfUI.bags[bag].slots[slot].frame.scoreText then
|
|
if quality and quality > 0 then
|
|
local item = Item:CreateFromBagAndSlot(bag, slot)
|
|
local r,g,b = item:GetItemQualityColorRGB()
|
|
local itemID = item:GetItemID()
|
|
local itemLevel = ShaguScore.Database[itemID] or 0
|
|
local score = ShaguScore:Calculate(vslot, quality, itemLevel)
|
|
if score and score > 0 and count and count == 1 then
|
|
pfUI.bags[bag].slots[slot].frame.scoreText:SetText(score)
|
|
pfUI.bags[bag].slots[slot].frame.scoreText:SetTextColor(r, g, b)
|
|
else
|
|
pfUI.bags[bag].slots[slot].frame.scoreText:SetText("")
|
|
end
|
|
else
|
|
pfUI.bags[bag].slots[slot].frame.scoreText:SetText("")
|
|
end
|
|
end
|
|
|
|
pfUI.bags[bag].slots[slot].frame:Show()
|
|
end
|
|
|
|
function pfUI.bag:CreateBagSlots(frame)
|
|
if not frame.bagslots then
|
|
frame.bagslots = CreateFrame("Frame", "pfBagSlots", frame)
|
|
frame.bagslots.slots = {}
|
|
frame.bagslots:Hide()
|
|
end
|
|
|
|
local min, max = 0, 3
|
|
local tpl = "BagSlotButtonTemplate"
|
|
local name, append = "pfUIBagsBBag", "Slot"
|
|
local position = "RIGHT"
|
|
|
|
if frame == pfUI.bag.left then
|
|
min, max = 1, math.min(NUM_BANKBAGSLOTS, (GetNumBankSlots() or 0))
|
|
tpl = "BankItemButtonBagTemplate"
|
|
name, append = "pfUIBankBBag", ""
|
|
position = "LEFT"
|
|
end
|
|
|
|
frame.bagslots:SetPoint("BOTTOM"..position, frame, "TOP"..position, 0, default_border*3)
|
|
CreateBackdrop(frame.bagslots, default_border)
|
|
CreateBackdropShadow(frame.bagslots)
|
|
|
|
local extra = frame == pfUI.bag.left and GetNumBankSlots() < NUM_BANKBAGSLOTS and 1 or 0
|
|
local width = (frame.button_size/5*4 + default_border*2) * (max-min+1+extra)
|
|
local height = default_border + (frame.button_size/5*4 + default_border)
|
|
|
|
frame.bagslots:SetSize(width, height)
|
|
for slot=min, max do
|
|
if not frame.bagslots.slots[slot] then
|
|
frame.bagslots.slots[slot] = {}
|
|
frame.bagslots.slots[slot].frame = CreateFrame("CheckButton", name .. slot .. append, frame.bagslots, tpl)
|
|
|
|
local icon = _G[frame.bagslots.slots[slot].frame:GetName() .. "IconTexture"]
|
|
local border = _G[frame.bagslots.slots[slot].frame:GetName() .. "NormalTexture"]
|
|
icon:SetTexCoord(.08, .92, .08, .92)
|
|
icon:ClearAllPoints()
|
|
icon:SetPoint("TOPLEFT", 1, -1)
|
|
icon:SetPoint("BOTTOMRIGHT", -1, 1)
|
|
border:SetTexture("")
|
|
|
|
local highlight = frame.bagslots.slots[slot].frame:GetHighlightTexture()
|
|
highlight:SetTexture(.5, .5, .5, .5)
|
|
|
|
local pushed = frame.bagslots.slots[slot].frame:GetPushedTexture()
|
|
pushed:SetTexture(.5, .5, .5, .5)
|
|
|
|
if frame == pfUI.bag.left then
|
|
frame.bagslots.slots[slot].frame:SetID(slot + 4)
|
|
frame.bagslots.slots[slot].frame.slot = slot + 3
|
|
else
|
|
frame.bagslots.slots[slot].frame.slot = slot
|
|
frame.bagslots.slots[slot].slot = slot
|
|
end
|
|
|
|
local SlotEnter = frame.bagslots.slots[slot].frame:GetScript("OnEnter")
|
|
frame.bagslots.slots[slot].frame:SetScript("OnEnter", function()
|
|
for slot, f in ipairs(pfUI.bags[this.slot + 1].slots) do
|
|
CreateBackdrop(f.frame, default_border)
|
|
f.frame.backdrop:SetBackdropBorderColor(.2,1,.8,1)
|
|
end
|
|
SlotEnter(this)
|
|
end)
|
|
|
|
local SlotLeave = frame.bagslots.slots[slot].frame:GetScript("OnLeave")
|
|
frame.bagslots.slots[slot].frame:SetScript("OnLeave", function()
|
|
pfUI.bag:UpdateBag(this.slot + 1)
|
|
SlotLeave()
|
|
end)
|
|
|
|
-- On TBC, the OnEvent function of the template scans for framenames,
|
|
-- and obviously doesn't know the pf-Names. Therefore, triggering
|
|
-- the update function on each frame manually
|
|
if frame == pfUI.bag.left and BankFrameItemButton_Update then
|
|
local SlotUpdate = frame.bagslots.slots[slot].frame:GetScript("OnUpdate")
|
|
frame.bagslots.slots[slot].frame:SetScript("OnUpdate", function()
|
|
if SlotUpdate then SlotUpdate(this) end
|
|
BankFrameItemButton_Update(this)
|
|
end)
|
|
end
|
|
end
|
|
|
|
local left = (slot-min)*(frame.button_size/5*4+default_border*2) + default_border
|
|
local top = -default_border
|
|
|
|
frame.bagslots.slots[slot].frame:ClearAllPoints()
|
|
frame.bagslots.slots[slot].frame:SetPoint("TOPLEFT", frame.bagslots, "TOPLEFT", left, top)
|
|
frame.bagslots.slots[slot].frame:SetSize(frame.button_size/5*4, frame.button_size/5*4)
|
|
|
|
CreateBackdrop(frame.bagslots.slots[slot].frame, default_border)
|
|
frame.bagslots.slots[slot].frame:Show()
|
|
|
|
if ( slot <= GetNumBankSlots() ) then
|
|
frame.bagslots.slots[slot].frame.tooltipText = BANK_BAG
|
|
else
|
|
frame.bagslots.slots[slot].frame.tooltipText = BANK_BAG_PURCHASE
|
|
end
|
|
end
|
|
|
|
if frame == pfUI.bag.left then
|
|
if GetNumBankSlots() < NUM_BANKBAGSLOTS then
|
|
if not frame.bagslots.buy then
|
|
frame.bagslots.buy = CreateFrame("Button", "pfBagSlotBuy", frame.bagslots)
|
|
end
|
|
frame.bagslots.buy:SetPoint("RIGHT", frame.bagslots, "RIGHT", -default_border, 0)
|
|
CreateBackdrop(frame.bagslots.buy, default_border)
|
|
frame.bagslots.buy:SetSize(frame.button_size/5*4, frame.button_size/5*4)
|
|
frame.bagslots.buy:SetText("+")
|
|
frame.bagslots.buy:SetTextColor(.5,.5,1,1)
|
|
frame.bagslots.buy:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
frame.bagslots.buy:SetScript("OnEnter", function ()
|
|
frame.bagslots.buy:SetTextColor(1,1,1,1)
|
|
end)
|
|
frame.bagslots.buy:SetScript("OnLeave", function ()
|
|
frame.bagslots.buy:SetTextColor(.5,.5,1,1)
|
|
end)
|
|
frame.bagslots.buy:SetScript("OnClick", function()
|
|
StaticPopup_Show("CONFIRM_BUY_BANK_SLOT")
|
|
end)
|
|
else
|
|
if frame.bagslots.buy then frame.bagslots.buy:Hide() end
|
|
end
|
|
end
|
|
end
|
|
|
|
function pfUI.bag:ReanchorAdditions()
|
|
local frame = pfUI.bag.right
|
|
local show_disenchant = (frame.disenchant:GetID() > 0)
|
|
local show_picklock = (frame.picklock:GetID() > 0)
|
|
if not show_disenchant then
|
|
frame.disenchant:Hide()
|
|
frame.picklock:SetPoint("TOPRIGHT", frame.open, "TOPLEFT", -default_border*3, 0)
|
|
else
|
|
frame.disenchant:Show()
|
|
frame.picklock:SetPoint("TOPRIGHT", frame.disenchant, "TOPLEFT", -default_border*3, 0)
|
|
end
|
|
if not show_picklock then
|
|
frame.picklock:Hide()
|
|
if show_disenchant then
|
|
frame.keys:SetPoint("TOPRIGHT", frame.disenchant, "TOPLEFT", -default_border*3, 0)
|
|
else
|
|
frame.keys:SetPoint("TOPRIGHT", frame.open, "TOPLEFT", -default_border*3, 0)
|
|
end
|
|
else
|
|
frame.picklock:Show()
|
|
frame.keys:SetPoint("TOPRIGHT", frame.picklock, "TOPLEFT", -default_border*3, 0)
|
|
end
|
|
end
|
|
|
|
function pfUI.bag:UpdateCooldowns()
|
|
local frame
|
|
for bag=-2, 11 do
|
|
local bagsize = GetContainerNumSlots(bag)
|
|
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
for slot=1, bagsize do
|
|
frame = pfUI.bags[bag] and pfUI.bags[bag].slots[slot] and pfUI.bags[bag].slots[slot].frame
|
|
if frame and frame.hasItem and _G[frame:GetName() .. "Cooldown"] then
|
|
ContainerFrame_UpdateCooldown(bag, frame)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function pfUI.bag:UpdateItemLock()
|
|
for bag=-2, 11 do
|
|
local bagsize = GetContainerNumSlots(bag)
|
|
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
for slot=1, bagsize do
|
|
if pfUI.bags[bag] and pfUI.bags[bag].slots[slot] and pfUI.bags[bag].slots[slot].frame:IsShown() then
|
|
local _, _, locked, _ = GetContainerItemInfo(bag, slot)
|
|
if pfUI.bags[bag].slots[slot].locked ~= locked then
|
|
SetItemButtonDesaturated(pfUI.bags[bag].slots[slot].frame, locked, 0.5, 0.5, 0.5)
|
|
if pfUI.unusable then pfUI.unusable:UpdateSlot(bag, slot) end
|
|
pfUI.bags[bag].slots[slot].locked = locked
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function pfUI.bag:RefreshSpells()
|
|
if not (pfUI.bag and pfUI.bag.right) then return end
|
|
for spellID, widget in pairs(extractSpells) do
|
|
if IsSpellKnown(spellID) and pfUI.bag.right[widget.frame] then
|
|
pfUI.bag.right[widget.frame]:SetID(spellID)
|
|
end
|
|
end
|
|
pfUI.bag:ReanchorAdditions()
|
|
end
|
|
|
|
function pfUI.bag:CreateAdditions(frame)
|
|
-- bag additions
|
|
if frame == pfUI.bag.right then
|
|
-- bag close button
|
|
if not frame.close then
|
|
frame.close = CreateFrame("Button", "pfBagClose", frame)
|
|
frame.close:SetPoint("TOPRIGHT", -default_border*1,-default_border )
|
|
CreateBackdrop(frame.close, default_border)
|
|
frame.close:SetSize(12, 12)
|
|
frame.close.texture = frame.close:CreateTexture("pfBagClose")
|
|
frame.close.texture:SetTexture(pfUI.media["img:close"])
|
|
frame.close.texture:ClearAllPoints()
|
|
frame.close.texture:SetPoint("TOPLEFT", frame.close, "TOPLEFT", 2, -2)
|
|
frame.close.texture:SetPoint("BOTTOMRIGHT", frame.close, "BOTTOMRIGHT", -2, 2)
|
|
frame.close.texture:SetVertexColor(1,.25,.25,1)
|
|
frame.close:SetScript("OnEnter", function ()
|
|
frame.close.backdrop:SetBackdropBorderColor(1,.25,.25,1)
|
|
end)
|
|
|
|
frame.close:SetScript("OnLeave", function ()
|
|
CreateBackdrop(frame.close, default_border)
|
|
end)
|
|
|
|
frame.close:SetScript("OnClick", function()
|
|
CloseAllBags()
|
|
end)
|
|
end
|
|
|
|
-- bags button
|
|
if not frame.bags then
|
|
frame.bags = CreateFrame("Button", "pfBagSlotShow", frame)
|
|
frame.bags:SetPoint("TOPRIGHT", frame.close, "TOPLEFT", -default_border*3, 0)
|
|
CreateBackdrop(frame.bags, default_border)
|
|
frame.bags:SetSize(12, 12)
|
|
frame.bags:SetTextColor(1,1,.25,1)
|
|
frame.bags:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
frame.bags.texture = frame.bags:CreateTexture("pfBagArrowUp")
|
|
frame.bags.texture:SetTexture(pfUI.media["img:up"])
|
|
frame.bags.texture:ClearAllPoints()
|
|
frame.bags.texture:SetPoint("TOPLEFT", frame.bags, "TOPLEFT", 3, -1)
|
|
frame.bags.texture:SetPoint("BOTTOMRIGHT", frame.bags, "BOTTOMRIGHT", -3, 1)
|
|
frame.bags.texture:SetVertexColor(.25,.25,.25,1)
|
|
|
|
frame.bags:SetScript("OnEnter", function ()
|
|
frame.bags.backdrop:SetBackdropBorderColor(1,1,.25,1)
|
|
frame.bags.texture:SetVertexColor(1,1,.25,1)
|
|
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
|
GameTooltip:SetText(_G.TUTORIAL_TITLE10)
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
frame.bags:SetScript("OnLeave", function ()
|
|
CreateBackdrop(frame.bags, default_border)
|
|
frame.bags.texture:SetVertexColor(.25,.25,.25,1)
|
|
if GameTooltip:IsOwned(this) then
|
|
GameTooltip:Hide()
|
|
end
|
|
end)
|
|
|
|
frame.bags:SetScript("OnClick", function()
|
|
pfUI.bag.right.bagslots:SetShown(not pfUI.bag.right.bagslots:IsShown())
|
|
end)
|
|
end
|
|
|
|
-- open button
|
|
if not frame.open then
|
|
frame.open = CreateFrame("Button", "pfBagSlotOpen", frame)
|
|
frame.open:SetPoint("TOPRIGHT", frame.bags, "TOPLEFT", -default_border*3, 0)
|
|
CreateBackdrop(frame.open, default_border)
|
|
frame.open:SetSize(12, 12)
|
|
frame.open:SetTextColor(1,1,.25,1)
|
|
frame.open:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
frame.open.texture = frame.open:CreateTexture("pfBagOpenContainer")
|
|
frame.open.texture:SetTexture(pfUI.media["img:empty"])
|
|
frame.open.texture:ClearAllPoints()
|
|
frame.open.texture:SetPoint("TOPLEFT", frame.open, "TOPLEFT", 3, -1)
|
|
frame.open.texture:SetPoint("BOTTOMRIGHT", frame.open, "BOTTOMRIGHT", -3, 1)
|
|
frame.open.texture:SetVertexColor(.25,.25,.25,1)
|
|
|
|
frame.open:SetScript("OnEnter", function ()
|
|
frame.open.backdrop:SetBackdropBorderColor(1,1,.25,1)
|
|
frame.open.texture:SetVertexColor(1,1,.25,1)
|
|
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
|
|
|
local bag, slot = GetNextOpenable()
|
|
if bag and slot then
|
|
GameTooltip:SetBagItem(bag, slot)
|
|
else
|
|
GameTooltip:SetText(_G.EMPTY)
|
|
end
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
frame.open:SetScript("OnLeave", function ()
|
|
CreateBackdrop(frame.open, default_border)
|
|
frame.open.texture:SetVertexColor(.25,.25,.25,1)
|
|
if GameTooltip:IsOwned(this) then
|
|
GameTooltip:Hide()
|
|
end
|
|
end)
|
|
|
|
frame.open:SetScript("OnClick", function()
|
|
-- open next container item
|
|
local bag, slot = GetNextOpenable()
|
|
if bag and slot then
|
|
ClearCursor()
|
|
if MerchantFrame:IsShown() then
|
|
HideUIPanel(MerchantFrame)
|
|
end
|
|
UseContainerItem(bag, slot)
|
|
end
|
|
|
|
-- reload tootltip
|
|
local bag, slot = GetNextOpenable()
|
|
if bag and slot then
|
|
GameTooltip:SetBagItem(bag, slot)
|
|
else
|
|
GameTooltip:SetText(_G.EMPTY)
|
|
end
|
|
end)
|
|
end
|
|
|
|
-- disenchant button
|
|
if not frame.disenchant then
|
|
frame.disenchant = CreateFrame("Button", "pfBagSlotDisenchant", frame)
|
|
frame.disenchant:SetPoint("TOPRIGHT", frame.open, "TOPLEFT", -default_border*3, 0)
|
|
CreateBackdrop(frame.disenchant, default_border)
|
|
frame.disenchant:SetSize(12, 12)
|
|
frame.disenchant:SetTextColor(1,1,.25,1)
|
|
frame.disenchant:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
frame.disenchant.texture = frame.disenchant:CreateTexture("pfBagDisenchant")
|
|
frame.disenchant.texture:SetTexture(pfUI.media["img:disenchant"])
|
|
frame.disenchant.texture:ClearAllPoints()
|
|
frame.disenchant.texture:SetPoint("TOPLEFT", frame.disenchant, "TOPLEFT", 3, -1)
|
|
frame.disenchant.texture:SetPoint("BOTTOMRIGHT", frame.disenchant, "BOTTOMRIGHT", -3, 1)
|
|
frame.disenchant.texture:SetVertexColor(.25,.25,.25,1)
|
|
|
|
frame.disenchant:SetScript("OnEnter", function ()
|
|
frame.disenchant.backdrop:SetBackdropBorderColor(1,1,.25,1)
|
|
frame.disenchant.texture:SetVertexColor(1,1,.25,1)
|
|
local id = this:GetID()
|
|
if id and id > 0 then
|
|
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
|
GameTooltip:SetSpellByID(id)
|
|
GameTooltip:Show()
|
|
end
|
|
end)
|
|
|
|
frame.disenchant:SetScript("OnLeave", function ()
|
|
CreateBackdrop(frame.disenchant, default_border)
|
|
frame.disenchant.texture:SetVertexColor(.25,.25,.25,1)
|
|
if GameTooltip:IsOwned(this) then
|
|
GameTooltip:Hide()
|
|
end
|
|
end)
|
|
|
|
frame.disenchant:SetScript("OnClick", function()
|
|
local id = this:GetID()
|
|
if id and id > 0 then
|
|
CastSpellByName(id)
|
|
end
|
|
end)
|
|
end
|
|
|
|
-- pick lock button
|
|
if not frame.picklock then
|
|
frame.picklock = CreateFrame("Button", "pfBagSlotPicklock", frame)
|
|
frame.picklock:SetPoint("TOPRIGHT", frame.disenchant, "TOPLEFT", -default_border*3, 0)
|
|
CreateBackdrop(frame.picklock, default_border)
|
|
frame.picklock:SetSize(12, 12)
|
|
frame.picklock:SetTextColor(1,1,.25,1)
|
|
frame.picklock:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
frame.picklock.texture = frame.picklock:CreateTexture("pfBagPicklock")
|
|
frame.picklock.texture:SetTexture(pfUI.media["img:picklock"])
|
|
frame.picklock.texture:ClearAllPoints()
|
|
frame.picklock.texture:SetPoint("TOPLEFT", frame.picklock, "TOPLEFT", 3, -1)
|
|
frame.picklock.texture:SetPoint("BOTTOMRIGHT", frame.picklock, "BOTTOMRIGHT", -3, 1)
|
|
frame.picklock.texture:SetVertexColor(.25,.25,.25,1)
|
|
|
|
frame.picklock:SetScript("OnEnter", function ()
|
|
frame.picklock.backdrop:SetBackdropBorderColor(1,1,.25,1)
|
|
frame.picklock.texture:SetVertexColor(1,1,.25,1)
|
|
local id = this:GetID()
|
|
if id and id > 0 then
|
|
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
|
GameTooltip:SetSpellByID(id)
|
|
GameTooltip:Show()
|
|
end
|
|
end)
|
|
|
|
frame.picklock:SetScript("OnLeave", function ()
|
|
CreateBackdrop(frame.picklock, default_border)
|
|
frame.picklock.texture:SetVertexColor(.25,.25,.25,1)
|
|
if GameTooltip:IsOwned(this) then
|
|
GameTooltip:Hide()
|
|
end
|
|
end)
|
|
|
|
frame.picklock:SetScript("OnClick", function()
|
|
local id = this:GetID()
|
|
if id and id > 0 then
|
|
CastSpellByName(id)
|
|
end
|
|
end)
|
|
end
|
|
|
|
-- key button
|
|
if not frame.keys then
|
|
frame.keys = CreateFrame("Button", "pfBagSlotShow", frame)
|
|
frame.keys:SetPoint("TOPRIGHT", frame.picklock, "TOPLEFT", -default_border*3, 0)
|
|
CreateBackdrop(frame.keys, default_border)
|
|
frame.keys:SetSize(12, 12)
|
|
frame.keys:SetTextColor(1,1,.25,1)
|
|
frame.keys:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
frame.keys.texture = frame.keys:CreateTexture("pfBagArrowUp")
|
|
frame.keys.texture:SetTexture(pfUI.media["img:key"])
|
|
frame.keys.texture:ClearAllPoints()
|
|
frame.keys.texture:SetPoint("TOPLEFT", frame.keys, "TOPLEFT", 3, -1)
|
|
frame.keys.texture:SetPoint("BOTTOMRIGHT", frame.keys, "BOTTOMRIGHT", -3, 1)
|
|
frame.keys.texture:SetVertexColor(.25,.25,.25,1)
|
|
|
|
frame.keys:SetScript("OnEnter", function ()
|
|
frame.keys.backdrop:SetBackdropBorderColor(1,1,.25,1)
|
|
frame.keys.texture:SetVertexColor(1,1,.25,1)
|
|
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
|
GameTooltip:SetText(_G.KEYRING)
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
frame.keys:SetScript("OnLeave", function ()
|
|
CreateBackdrop(frame.keys, default_border)
|
|
frame.keys.texture:SetVertexColor(.25,.25,.25,1)
|
|
if GameTooltip:IsOwned(this) then
|
|
GameTooltip:Hide()
|
|
end
|
|
end)
|
|
|
|
frame.keys:SetScript("OnClick", function()
|
|
if not pfUI.bag.showKeyring then
|
|
pfUI.bag.showKeyring = true
|
|
else
|
|
pfUI.bag.showKeyring = nil
|
|
end
|
|
pfUI.bag:CheckFullUpdate()
|
|
end)
|
|
end
|
|
|
|
-- sort button (anchors to keys, which is the always-present leftmost
|
|
-- button in the dynamic chain — picklock and disenchant are class-gated)
|
|
if not frame.sort then
|
|
frame.sort = CreateFrame("Button", "pfBagSort", frame)
|
|
frame.sort:SetPoint("TOPRIGHT", frame.keys, "TOPLEFT", -default_border*3, 0)
|
|
CreateBackdrop(frame.sort, default_border)
|
|
frame.sort:SetSize(12, 12)
|
|
frame.sort.texture = frame.sort:CreateTexture("pfBagSortIcon")
|
|
frame.sort.texture:SetTexture(pfUI.media["img:sort"])
|
|
frame.sort.texture:ClearAllPoints()
|
|
frame.sort.texture:SetPoint("TOPLEFT", frame.sort, "TOPLEFT", 2, -2)
|
|
frame.sort.texture:SetPoint("BOTTOMRIGHT", frame.sort, "BOTTOMRIGHT", -2, 2)
|
|
frame.sort.texture:SetVertexColor(.25,.25,.25,1)
|
|
|
|
frame.sort:SetScript("OnEnter", function ()
|
|
frame.sort.backdrop:SetBackdropBorderColor(1,1,.25,1)
|
|
frame.sort.texture:SetVertexColor(1,1,.25,1)
|
|
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
|
GameTooltip:SetText(T["Sort Bags"])
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
frame.sort:SetScript("OnLeave", function ()
|
|
CreateBackdrop(frame.sort, default_border)
|
|
frame.sort.texture:SetVertexColor(.25,.25,.25,1)
|
|
if GameTooltip:IsOwned(this) then
|
|
GameTooltip:Hide()
|
|
end
|
|
end)
|
|
|
|
frame.sort:SetScript("OnClick", function()
|
|
libbagsort:Sort({0, 1, 2, 3, 4}, BagSortOpts())
|
|
end)
|
|
end
|
|
|
|
-- gold string
|
|
if not frame.gold and (C.appearance.bags.movable == "1" or not pfUI.panel) then
|
|
frame.gold = CreateFrame("Frame", "pfBagGoldString", frame)
|
|
frame.gold:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -4, 1)
|
|
frame.gold:SetSize(200, 18)
|
|
frame.gold:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
frame.gold:RegisterEvent("PLAYER_MONEY")
|
|
frame.gold:SetScript("OnEvent", function()
|
|
frame.gold.text:SetText(CreateGoldString(GetMoney()))
|
|
end)
|
|
|
|
frame.gold.text = frame.gold.text or frame.gold:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
frame.gold.text:SetFontObject(GameFontWhite)
|
|
frame.gold.text:SetJustifyH("RIGHT")
|
|
frame.gold.text:SetAllPoints()
|
|
end
|
|
|
|
-- bag search
|
|
if not frame.search then
|
|
frame.search = CreateFrame("Frame", "pfBagSearch", frame)
|
|
frame.search.db = {}
|
|
frame.search:SetHeight(12)
|
|
frame.search:SetPoint("TOPLEFT", frame, "TOPLEFT", default_border, -default_border)
|
|
frame.search:SetPoint("TOPRIGHT", frame.sort, "TOPLEFT", -default_border*3, -default_border)
|
|
CreateBackdrop(frame.search, default_border)
|
|
|
|
frame.search.edit = CreateFrame("EditBox", "pfUIBagSearch", frame.search, "InputBoxTemplate")
|
|
pfUIBagSearchLeft:SetTexture(nil)
|
|
pfUIBagSearchMiddle:SetTexture(nil)
|
|
pfUIBagSearchRight:SetTexture(nil)
|
|
frame.search.edit:ClearAllPoints()
|
|
frame.search.edit:SetPoint("TOPLEFT", frame.search, "TOPLEFT", default_border*2, 0)
|
|
frame.search.edit:SetPoint("BOTTOMRIGHT", frame.search, "BOTTOMRIGHT", -default_border*2, 0)
|
|
|
|
frame.search.edit:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
frame.search.edit:SetAutoFocus(false)
|
|
frame.search.edit:SetText(T["Search"])
|
|
frame.search.edit:SetTextColor(.5,.5,.5,1)
|
|
|
|
frame.search.edit:SetScript("OnEditFocusGained", function()
|
|
this:SetText("")
|
|
end)
|
|
|
|
frame.search.edit:SetScript("OnEditFocusLost", function()
|
|
this:SetText(T["Search"])
|
|
for bag=-2, 11 do
|
|
local bagsize = GetContainerNumSlots(bag)
|
|
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
for slot=1, bagsize do
|
|
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
|
end
|
|
end
|
|
end)
|
|
|
|
frame.search.edit:SetScript("OnTextChanged", function()
|
|
if this:GetText() == T["Search"] then return end
|
|
for bag=-2, 11 do
|
|
local bagsize = GetContainerNumSlots(bag)
|
|
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
for slot=1, bagsize do
|
|
pfUI.bags[bag].slots[slot].frame:SetAlpha(.25)
|
|
local texture, itemCount, locked, quality, readable = GetContainerItemInfo(bag, slot)
|
|
if itemCount then
|
|
local itemLink = GetContainerItemLink(bag, slot)
|
|
local itemstring = string.sub(itemLink, string.find(itemLink, "%[")+1, string.find(itemLink, "%]")-1)
|
|
|
|
if C.appearance.bags.fulltext == "1" then
|
|
if not frame.search.db[itemLink] then
|
|
scanner:SetBagItem(bag, slot)
|
|
local text = scanner:Text()
|
|
|
|
local str = ""
|
|
for k, v in pairs(text) do
|
|
str = str .. (v[1] or "") .. (v[2] or "")
|
|
end
|
|
|
|
frame.search.db[itemLink] = strlower(str)
|
|
end
|
|
|
|
if strfind(frame.search.db[itemLink], strlower(this:GetText()), 1, true) then
|
|
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
|
end
|
|
end
|
|
|
|
if strfind(strlower(itemstring), strlower(this:GetText()), 1, true) then
|
|
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
frame.search:SetScript("OnLeave", function()
|
|
frame.search.edit:ClearFocus()
|
|
end)
|
|
|
|
frame.search.edit:SetScript("OnMouseUp", function()
|
|
if arg1 == "RightButton" then
|
|
this:ClearFocus()
|
|
end
|
|
end)
|
|
|
|
frame.search:SetScript("OnHide", function()
|
|
frame.search.edit:SetText(T["Search"])
|
|
for bag = -2, 11 do
|
|
if pfUI.bags[bag] then
|
|
local bagsize = GetContainerNumSlots(bag)
|
|
if bag == -2 and pfUI.bag.showKeyring == true then bagsize = GetKeyRingSize() end
|
|
for slot = 1, bagsize do
|
|
if pfUI.bags[bag] and pfUI.bags[bag].slots[slot] then
|
|
pfUI.bags[bag].slots[slot].frame:SetAlpha(1)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
else
|
|
-- bankframe
|
|
|
|
-- bag close button
|
|
if not frame.close then
|
|
frame.close = CreateFrame("Button", "pfBagClose", frame)
|
|
frame.close:SetPoint("TOPRIGHT", -default_border*1,-default_border )
|
|
CreateBackdrop(frame.close, default_border)
|
|
frame.close:SetSize(12, 12)
|
|
frame.close.texture = frame.close:CreateTexture("pfBagClose")
|
|
frame.close.texture:SetTexture(pfUI.media["img:close"])
|
|
frame.close.texture:ClearAllPoints()
|
|
frame.close.texture:SetPoint("TOPLEFT", frame.close, "TOPLEFT", 2, -2)
|
|
frame.close.texture:SetPoint("BOTTOMRIGHT", frame.close, "BOTTOMRIGHT", -2, 2)
|
|
frame.close.texture:SetVertexColor(1,.25,.25,1)
|
|
frame.close:SetScript("OnEnter", function ()
|
|
frame.close.backdrop:SetBackdropBorderColor(1,.25,.25,1)
|
|
end)
|
|
|
|
frame.close:SetScript("OnLeave", function ()
|
|
CreateBackdrop(frame.close, default_border)
|
|
end)
|
|
|
|
frame.close:SetScript("OnClick", function()
|
|
CloseBankFrame()
|
|
end)
|
|
end
|
|
|
|
-- bags button
|
|
if not frame.bags then
|
|
frame.bags = CreateFrame("Button", "pfBagSlotShow", frame)
|
|
frame.bags:SetPoint("TOPRIGHT", frame.close, "TOPLEFT", -default_border*3, 0)
|
|
CreateBackdrop(frame.bags, default_border)
|
|
frame.bags:SetSize(12, 12)
|
|
frame.bags:SetTextColor(1,1,.25,1)
|
|
frame.bags:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
|
frame.bags.texture = frame.bags:CreateTexture("pfBagArrowUp")
|
|
frame.bags.texture:SetTexture(pfUI.media["img:up"])
|
|
frame.bags.texture:ClearAllPoints()
|
|
frame.bags.texture:SetPoint("TOPLEFT", frame.bags, "TOPLEFT", 3, -1)
|
|
frame.bags.texture:SetPoint("BOTTOMRIGHT", frame.bags, "BOTTOMRIGHT", -3, 1)
|
|
frame.bags.texture:SetVertexColor(.25,.25,.25,1)
|
|
|
|
frame.bags:SetScript("OnEnter", function ()
|
|
frame.bags.backdrop:SetBackdropBorderColor(1,1,.25,1)
|
|
frame.bags.texture:SetVertexColor(1,1,.25,1)
|
|
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
|
GameTooltip:SetText(_G.TUTORIAL_TITLE10)
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
frame.bags:SetScript("OnLeave", function ()
|
|
CreateBackdrop(frame.bags, default_border)
|
|
frame.bags.texture:SetVertexColor(.25,.25,.25,1)
|
|
if GameTooltip:IsOwned(this) then
|
|
GameTooltip:Hide()
|
|
end
|
|
end)
|
|
|
|
frame.bags:SetScript("OnClick", function()
|
|
if pfUI.bag.left.bagslots:IsShown() then
|
|
pfUI.bag.left.bagslots:Hide()
|
|
else
|
|
pfUI.bag.left.bagslots:Show()
|
|
end
|
|
end)
|
|
end
|
|
|
|
-- sort button (bank)
|
|
if not frame.sort then
|
|
frame.sort = CreateFrame("Button", "pfBankSort", frame)
|
|
frame.sort:SetPoint("TOPRIGHT", frame.bags, "TOPLEFT", -default_border*3, 0)
|
|
CreateBackdrop(frame.sort, default_border)
|
|
frame.sort:SetHeight(12)
|
|
frame.sort:SetWidth(12)
|
|
frame.sort.texture = frame.sort:CreateTexture("pfBankSortIcon")
|
|
frame.sort.texture:SetTexture(pfUI.media["img:sort"])
|
|
frame.sort.texture:ClearAllPoints()
|
|
frame.sort.texture:SetPoint("TOPLEFT", frame.sort, "TOPLEFT", 2, -2)
|
|
frame.sort.texture:SetPoint("BOTTOMRIGHT", frame.sort, "BOTTOMRIGHT", -2, 2)
|
|
frame.sort.texture:SetVertexColor(.25,.25,.25,1)
|
|
|
|
frame.sort:SetScript("OnEnter", function ()
|
|
frame.sort.backdrop:SetBackdropBorderColor(1,1,.25,1)
|
|
frame.sort.texture:SetVertexColor(1,1,.25,1)
|
|
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
|
GameTooltip:SetText(T["Sort Bank"])
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
frame.sort:SetScript("OnLeave", function ()
|
|
CreateBackdrop(frame.sort, default_border)
|
|
frame.sort.texture:SetVertexColor(.25,.25,.25,1)
|
|
if GameTooltip:IsOwned(this) then
|
|
GameTooltip:Hide()
|
|
end
|
|
end)
|
|
|
|
frame.sort:SetScript("OnClick", function()
|
|
libbagsort:Sort({-1, 5, 6, 7, 8, 9, 10}, BagSortOpts())
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
end)
|