BANK_CONTAINER = -1;
NUM_BAG_SLOTS = 4;
NUM_BANKGENERIC_SLOTS = 28;
NUM_BANKBAGSLOTS = 7;
function ButtonInventorySlot (self)
return BankButtonIDToInvSlotID(self:GetID(),self.isBag)
end
function BankFrameBaseButton_OnLoad (self)
self:RegisterForDrag("LeftButton");
self:RegisterForClicks("LeftButtonUp","RightButtonUp");
self.GetInventorySlot = ButtonInventorySlot;
self.UpdateTooltip = BankFrameItemButton_OnEnter;
end
function BankFrameItemButton_OnLoad (self)
BankFrameBaseButton_OnLoad (self);
self.SplitStack = function(button, split)
SplitContainerItem(BANK_CONTAINER, button:GetID(), split);
end
end
function BankFrameBagButton_OnLoad (self)
self.isBag = 1;
BankFrameBaseButton_OnLoad(self);
end
function BankFrameItemButton_OnEnter (self)
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
if ( not GameTooltip:SetInventoryItem("player", self:GetInventorySlot()) ) then
if ( self.isBag ) then
GameTooltip:SetText(self.tooltipText);
end
end
CursorUpdate(self);
end
function BankFrameItemButton_Update (button)
local texture = getglobal(button:GetName().."IconTexture");
local inventoryID = button:GetInventorySlot();
local textureName = GetInventoryItemTexture("player",inventoryID);
local slotName = button:GetName();
local id;
local slotTextureName;
button.hasItem = nil;
if( button.isBag ) then
id, slotTextureName = GetInventorySlotInfo(strsub(slotName,10));
end
if ( textureName ) then
texture:SetTexture(textureName);
texture:Show();
SetItemButtonCount(button,GetInventoryItemCount("player",inventoryID));
button.hasItem = 1;
elseif ( slotTextureName and button.isBag ) then
texture:SetTexture(slotTextureName);
SetItemButtonCount(button,0);
texture:Show();
else
texture:Hide();
SetItemButtonCount(button,0);
end
BankFrameItemButton_UpdateLocked(button);
end
function BankFrameItemButton_UpdateLocked (button)
local inventoryID = button:GetInventorySlot();
if ( IsInventoryItemLocked(inventoryID) ) then
SetItemButtonDesaturated(button, 1, 0.5, 0.5, 0.5);
else
if ( button.isBag and ((button:GetID() - 4) > GetNumBankSlots()) ) then
return;
end
SetItemButtonDesaturated(button, nil, 0.5, 0.5, 0.5);
end
end
function BankFrame_OnLoad (self)
self:RegisterEvent("BANKFRAME_OPENED");
self:RegisterEvent("BANKFRAME_CLOSED");
end
function UpdateBagSlotStatus ()
local purchaseFrame = BankFramePurchaseInfo;
if( purchaseFrame == nil ) then
return;
end
local numSlots,full = GetNumBankSlots();
local button;
for i=1, NUM_BANKBAGSLOTS, 1 do
button = getglobal("BankFrameBag"..i);
if ( button ) then
if ( i <= numSlots ) then
SetItemButtonTextureVertexColor(button, 1.0,1.0,1.0);
button.tooltipText = BANK_BAG;
else
SetItemButtonTextureVertexColor(button, 1.0,0.1,0.1);
button.tooltipText = BANK_BAG_PURCHASE;
end
end
end
-- pass in # of current slots, returns cost of next slot
local cost = GetBankSlotCost(numSlots);
BankFrame.nextSlotCost = cost;
if( GetMoney() >= cost ) then
SetMoneyFrameColor("BankFrameDetailMoneyFrame", "white");
else
SetMoneyFrameColor("BankFrameDetailMoneyFrame", "red")
end
MoneyFrame_Update("BankFrameDetailMoneyFrame", cost);
if( full ) then
purchaseFrame:Hide();
else
purchaseFrame:Show();
end
end
function CloseBankBagFrames ()
for i=NUM_BAG_SLOTS+1, (NUM_BAG_SLOTS + NUM_BANKBAGSLOTS), 1 do
CloseBag(i);
end
end
function BankFrame_OnEvent (self, event, ...)
if ( event == "BANKFRAME_OPENED" ) then
BankFrameTitleText:SetText(UnitName("npc"));
SetPortraitTexture(BankPortraitTexture,"npc");
ShowUIPanel(self);
if ( not self:IsShown() ) then
CloseBankFrame();
end
elseif ( event == "BANKFRAME_CLOSED" ) then
HideUIPanel(self);
elseif ( event == "ITEM_LOCK_CHANGED" ) then
local bag, slot = ...;
if ( bag == BANK_CONTAINER ) then
if ( slot <= NUM_BANKGENERIC_SLOTS ) then
BankFrameItemButton_UpdateLocked(getglobal("BankFrameItem"..slot));
else
BankFrameItemButton_UpdateLocked(getglobal("BankFrameBag"..(slot-NUM_BANKGENERIC_SLOTS)));
end
end
elseif ( event == "PLAYERBANKSLOTS_CHANGED" ) then
local slot = ...;
if ( slot <= NUM_BANKGENERIC_SLOTS ) then
BankFrameItemButton_Update(getglobal("BankFrameItem"..slot));
else
BankFrameItemButton_Update(getglobal("BankFrameBag"..(slot-NUM_BANKGENERIC_SLOTS)));
end
elseif ( event == "PLAYER_MONEY" or event == "PLAYERBANKBAGSLOTS_CHANGED" ) then
UpdateBagSlotStatus();
end
end
function BankFrame_OnShow (self)
PlaySound("igMainMenuOpen");
self:RegisterEvent("ITEM_LOCK_CHANGED");
self:RegisterEvent("PLAYERBANKSLOTS_CHANGED");
self:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED");
self:RegisterEvent("PLAYER_MONEY");
for i=1, NUM_BANKGENERIC_SLOTS, 1 do
button = getglobal("BankFrameItem"..i);
BankFrameItemButton_Update(button);
end
for i=1, NUM_BANKBAGSLOTS, 1 do
button = getglobal("BankFrameBag"..i);
BankFrameItemButton_Update(button);
end
UpdateBagSlotStatus();
end
function BankFrame_OnHide (self)
PlaySound("igMainMenuClose");
self:UnregisterEvent("ITEM_LOCK_CHANGED");
self:UnregisterEvent("PLAYERBANKSLOTS_CHANGED");
self:UnregisterEvent("PLAYERBANKBAGSLOTS_CHANGED");
self:UnregisterEvent("PLAYER_MONEY");
StaticPopup_Hide("CONFIRM_BUY_BANK_SLOT");
CloseBankBagFrames();
CloseBankFrame();
updateContainerFrameAnchors();
end
function BankFrameItemButtonGeneric_OnClick (self, button)
if ( button == "LeftButton" ) then
PickupContainerItem(BANK_CONTAINER, self:GetID());
else
UseContainerItem(BANK_CONTAINER, self:GetID());
end
end
function BankFrameItemButtonGeneric_OnModifiedClick (self, button)
if ( self.isBag ) then
return;
end
if ( HandleModifiedItemClick(GetContainerItemLink(BANK_CONTAINER, self:GetID())) ) then
return;
end
if ( IsModifiedClick("SPLITSTACK") ) then
local texture, itemCount, locked = GetContainerItemInfo(BANK_CONTAINER, self:GetID());
if ( not locked ) then
OpenStackSplitFrame(self.count, self, "BOTTOMLEFT", "TOPLEFT");
end
return;
end
end
function UpdateBagButtonHighlight (id)
local texture = getglobal("BankFrameBag"..(id - NUM_BAG_SLOTS).."HighlightFrameTexture");
if ( not texture ) then
return;
end
local frame;
for i=1, NUM_CONTAINER_FRAMES, 1 do
frame = getglobal("ContainerFrame"..i);
if ( ( frame:GetID() == id ) and frame:IsShown() ) then
texture:Show();
return;
end
end
texture:Hide();
end
function BankFrameItemButtonBag_OnClick (self, button)
local inventoryID = self:GetInventorySlot();
local hadItem = PutItemInBag(inventoryID);
local id = self:GetID();
if ( not hadItem ) then
-- open bag
ToggleBag(id);
end
UpdateBagButtonHighlight(id);
end
function BankFrameItemButtonBag_Pickup (self)
local inventoryID = self:GetInventorySlot();
PickupBagFromSlot(inventoryID);
UpdateBagButtonHighlight(self:GetID());
end