vanilla-wow-addons – Rev 1
?pathlinks?
--[[
Bags.lua
Functions used by Bagnon Bags
--]]
--[[ OnX Functions ]]--
function BagnonBag_OnLoad()
this:RegisterForDrag("LeftButton");
this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
this:RegisterEvent("BAG_UPDATE");
this:RegisterEvent("ITEM_LOCK_CHANGED");
this:RegisterEvent("CURSOR_UPDATE");
this:RegisterEvent("BAG_UPDATE_COOLDOWN");
if( Bagnon_IsBankBag(this:GetID() ) ) then
this:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED");
end
end
function BagnonBag_OnEvent()
if( not this:IsVisible() or Bagnon_IsCachedFrame(this:GetParent():GetParent()) ) then
return;
end
if ( event == "BAG_UPDATE" ) then
if( arg1 == this:GetID() ) then
BagnonBag_Update(this);
BagnonBag_UpdateFrameSize(this:GetParent());
end
elseif (event == "ITEM_LOCK_CHANGED") then
BagnonBag_UpdateLock(this);
elseif (event == "CURSOR_UPDATE") then
BagnonBag_UpdateCursor(this);
elseif ( event == "PLAYERBANKBAGSLOTS_CHANGED") then
BagnonBag_Update(this);
BagnonBag_UpdateFrameSize(this:GetParent());
end
end
function BagnonBag_OnShow()
BagnonBag_UpdateTexture(this:GetParent():GetParent(), this:GetID());
end
function BagnonBag_OnClick()
if ( Bagnon_IsCachedBag(this:GetParent():GetParent().player, this:GetID() ) ) then
return;
end
if(not IsShiftKeyDown() ) then
--damn you blizzard for making the keyring specific code!
if( this:GetID() == KEYRING_CONTAINER ) then
PutKeyInKeyRing();
else
PutItemInBag(ContainerIDToInventoryID(this:GetID()));
end
else
BagnonFrame_ToggleBag(this:GetParent():GetParent(), this:GetID());
end
end
function BagnonBag_OnDrag()
if (Bagnon_IsCachedBag(this:GetParent():GetParent().player, this:GetID()) ) then
return;
end
PickupBagFromSlot( ContainerIDToInventoryID(this:GetID()) );
PlaySound("BAGMENUBUTTONPRESS");
end
--tooltip functions
function BagnonBag_OnEnter()
local frame = this:GetParent():GetParent();
BagnonFrame_HighlightSlots(frame, this:GetID());
if( this:GetLeft() < ( UIParent:GetRight() / 2) ) then
GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
else
GameTooltip:SetOwner(this, "ANCHOR_LEFT");
end
--mainmenubag specific code
if( this:GetID() == 0 ) then
GameTooltip:SetText(TEXT(BACKPACK_TOOLTIP), 1.0, 1.0, 1.0);
--keyring specific code...again
elseif ( this:GetID() == KEYRING_CONTAINER ) then
GameTooltip:SetText(KEYRING, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
--cached bags
elseif( Bagnon_IsCachedBag(frame.player, this:GetID()) ) then
local _, link = BagnonDB.GetBagData(frame.player, this:GetID());
if(link) then
GameTooltip:SetHyperlink( link );
GameTooltip:Show();
else
GameTooltip:SetText(TEXT(EQUIP_CONTAINER), 1.0, 1.0, 1.0);
end
elseif ( not GameTooltip:SetInventoryItem("player", ContainerIDToInventoryID(this:GetID()) ) ) then
GameTooltip:SetText(TEXT(EQUIP_CONTAINER), 1.0, 1.0, 1.0);
end
if(not Bagnon_IsCachedBag(frame.player, this:GetID()) ) then
--add the shift click to hide/show tooltip
if(BagnonSets.showTooltips) then
if( Bagnon_FrameHasBag(frame:GetName(), this:GetID()) ) then
GameTooltip:AddLine(BAGNON_BAGS_HIDE);
else
GameTooltip:AddLine(BAGNON_BAGS_SHOW);
end
end
end
GameTooltip:Show();
end
function BagnonBag_OnLeave()
BagnonFrame_UnhighlightAll(this:GetParent():GetParent());
GameTooltip:Hide();
end
--[[ Update Functions ]]--
function BagnonBag_Update(bag)
local invID = ContainerIDToInventoryID(bag:GetID());
local textureName = GetInventoryItemTexture("player", invID);
if ( textureName ) then
SetItemButtonTexture(bag, textureName);
BagnonBag_SetCount(bag, GetInventoryItemCount("player", invID));
if ( not IsInventoryItemLocked(invID) ) then
SetItemButtonTextureVertexColor(bag, 1.0, 1.0, 1.0);
SetItemButtonNormalTextureVertexColor(bag, 1.0, 1.0, 1.0);
end
bag.hasItem = 1;
else
SetItemButtonTexture(bag, nil);
BagnonBag_SetCount(bag, 0);
SetItemButtonTextureVertexColor(bag, 1.0, 1.0, 1.0);
SetItemButtonNormalTextureVertexColor(bag, 1.0, 1.0, 1.0);
getglobal(bag:GetName().."Cooldown"):Hide();
bag.hasItem = nil;
end
if ( GameTooltip:IsOwned(bag) ) then
if ( textureName ) then
BagnonBag_OnEnter(bag);
else
GameTooltip:Hide();
ResetCursor();
end
end
BagnonBag_UpdateLock(bag);
-- Update repair all button status
if ( MerchantRepairAllIcon ) then
local repairAllCost, canRepair = GetRepairAllCost();
if ( canRepair ) then
SetDesaturation(MerchantRepairAllIcon, nil);
MerchantRepairAllButton:Enable();
else
SetDesaturation(MerchantRepairAllIcon, 1);
MerchantRepairAllButton:Disable();
end
end
end
function BagnonBag_UpdateLock(bag)
if ( IsInventoryItemLocked( ContainerIDToInventoryID(bag:GetID()) ) ) then
SetItemButtonDesaturated(bag, 1, 0.5, 0.5, 0.5);
else
SetItemButtonDesaturated(bag, nil);
end
end
function BagnonBag_UpdateCursor(bag)
if ( CursorCanGoInSlot( ContainerIDToInventoryID( bag:GetID() ) ) ) then
bag:LockHighlight();
else
bag:UnlockHighlight();
end
end
--[[
Update the texture and count of the bag
Used mainly for cached bags
--]]
function BagnonBag_UpdateTexture(frame, bagID)
local bag = getglobal(frame:GetName() .. "Bags" .. bagID);
if(not bag or bag:GetID() <= 0) then return; end
if( Bagnon_IsCachedBag(frame.player, bagID) ) then
local _, link, count = BagnonDB.GetBagData(frame.player, bagID);
if(link) then
local _, _, _, _, _, _, _, _, texture = GetItemInfo(link);
SetItemButtonTexture(bag, texture);
else
SetItemButtonTexture(bag, nil);
end
if(count) then
BagnonBag_SetCount(bag, count);
end
else
local texture = GetInventoryItemTexture("player", ContainerIDToInventoryID(bagID));
if(texture) then
SetItemButtonTexture(bag, texture);
else
SetItemButtonTexture(bag, nil);
end
BagnonBag_SetCount(bag, GetInventoryItemCount("player", ContainerIDToInventoryID(bagID)));
end
end
--this function is used when updating the frame's size based on a bag being replaced/removed/added, so we don't care about the keyring
function BagnonBag_UpdateFrameSize(bagFrame)
local size = 0;
for _, bag in pairs( { bagFrame:GetChildren() } ) do
if(bag:GetID() ~= KEYRING_CONTAINER) then
size = size + GetContainerNumSlots(bag:GetID());
end
end
--only generate the frame again if the size of the frame changed
if(bagFrame.size ~= size) then
BagnonFrame_Generate( bagFrame:GetParent() );
end
bagFrame.size = size;
end
function BagnonBag_SetCount(button, count)
if ( not button ) then return; end
if ( not count ) then
count = 0;
end
button.count = count;
if ( count > 1 or (button.isBag and count > 0) ) then
local countText = getglobal(button:GetName().."Count");
if(count > 9999) then
countText:SetFont(NumberFontNormal:GetFont(), 10, "OUTLINE");
elseif(count > 999) then
countText:SetFont(NumberFontNormal:GetFont(), 11, "OUTLINE");
else
countText:SetFont(NumberFontNormal:GetFont(), 12, "OUTLINE");
end
countText:SetText(count);
countText:Show();
else
getglobal(button:GetName().."Count"):Hide();
end
end
Generated by GNU Enscript 1.6.5.90.