789 lines
26 KiB
Lua
789 lines
26 KiB
Lua
MAX_GUILDBANK_SLOTS_PER_TAB = 98;
|
|
NUM_SLOTS_PER_GUILDBANK_GROUP = 14;
|
|
NUM_GUILDBANK_ICONS_SHOWN = 0;
|
|
NUM_GUILDBANK_ICONS_PER_ROW = 4;
|
|
NUM_GUILDBANK_ICON_ROWS = 4;
|
|
GUILDBANK_ICON_ROW_HEIGHT = 36;
|
|
NUM_GUILDBANK_COLUMNS = 7;
|
|
MAX_TRANSACTIONS_SHOWN = 21;
|
|
GUILDBANK_TRANSACTION_HEIGHT = 13;
|
|
|
|
UIPanelWindows["GuildBankFrame"] = { area = "doublewide", pushable = 0, width = 769 };
|
|
|
|
--REMOVE ME!
|
|
TABARDBACKGROUNDUPPER = "Textures\\GuildEmblems\\Background_%s_TU_U";
|
|
TABARDBACKGROUNDLOWER = "Textures\\GuildEmblems\\Background_%s_TL_U";
|
|
TABARDEMBLEMUPPER = "Textures\\GuildEmblems\\Emblem_%s_15_TU_U";
|
|
TABARDEMBLEMLOWER = "Textures\\GuildEmblems\\Emblem_%s_15_TL_U";
|
|
TABARDBORDERUPPER = "Textures\\GuildEmblems\\Border_%s_02_TU_U";
|
|
TABARDBORDERLOWER = "Textures\\GuildEmblems\\Border_%s_02_TL_U";
|
|
TABARDBACKGROUNDID = 1;
|
|
TABARDEMBLEMID = 1;
|
|
TABARDBORDERID = 1;
|
|
|
|
GUILD_BANK_LOG_TIME_PREPEND = "|cff009999 ";
|
|
|
|
function GuildBankFrame_ChangeBackground(id)
|
|
if ( id > 50 ) then
|
|
id = 1;
|
|
elseif ( id < 0 ) then
|
|
id = 50;
|
|
end
|
|
TABARDBACKGROUNDID = id;
|
|
GuildBankFrame_UpdateEmblem();
|
|
end
|
|
function GuildBankFrame_ChangeEmblem(id)
|
|
if ( id > 169 ) then
|
|
id = 1;
|
|
elseif ( id < 0 ) then
|
|
id = 169;
|
|
end
|
|
TABARDEMBLEMID = id;
|
|
GuildBankFrame_UpdateEmblem();
|
|
end
|
|
function GuildBankFrame_ChangeBorder(id)
|
|
if ( id > 9 ) then
|
|
id = 1;
|
|
elseif ( id < 0 ) then
|
|
id = 9;
|
|
end
|
|
TABARDBORDERID = id;
|
|
GuildBankFrame_UpdateEmblem();
|
|
end
|
|
|
|
function GuildBankFrame_UpdateEmblem()
|
|
local tabardBGID = TABARDBACKGROUNDID;
|
|
if ( tabardBGID < 10 ) then
|
|
tabardBGID = "0"..tabardBGID;
|
|
end
|
|
local tabardEmblemID = TABARDEMBLEMID;
|
|
if ( tabardEmblemID < 10 ) then
|
|
tabardEmblemID = "0"..tabardEmblemID;
|
|
end
|
|
local tabardBorderID = TABARDBORDERID;
|
|
if ( tabardBorderID < 10 ) then
|
|
tabardBorderID = "0"..tabardBorderID;
|
|
end
|
|
GuildBankEmblemBackgroundUL:SetTexture(format(TABARDBACKGROUNDUPPER, tabardBGID));
|
|
GuildBankEmblemBackgroundUR:SetTexture(format(TABARDBACKGROUNDUPPER, tabardBGID));
|
|
GuildBankEmblemBackgroundBL:SetTexture(format(TABARDBACKGROUNDLOWER, tabardBGID));
|
|
GuildBankEmblemBackgroundBR:SetTexture(format(TABARDBACKGROUNDLOWER, tabardBGID));
|
|
|
|
GuildBankEmblemUL:SetTexture(format(TABARDEMBLEMUPPER, tabardEmblemID));
|
|
GuildBankEmblemUR:SetTexture(format(TABARDEMBLEMUPPER, tabardEmblemID));
|
|
GuildBankEmblemBL:SetTexture(format(TABARDEMBLEMLOWER, tabardEmblemID));
|
|
GuildBankEmblemBR:SetTexture(format(TABARDEMBLEMLOWER, tabardEmblemID));
|
|
|
|
GuildBankEmblemBorderUL:SetTexture(format(TABARDBORDERUPPER, tabardBorderID));
|
|
GuildBankEmblemBorderUR:SetTexture(format(TABARDBORDERUPPER, tabardBorderID));
|
|
GuildBankEmblemBorderBL:SetTexture(format(TABARDBORDERLOWER, tabardBorderID));
|
|
GuildBankEmblemBorderBR:SetTexture(format(TABARDBORDERLOWER, tabardBorderID));
|
|
end
|
|
|
|
|
|
function GuildBankFrame_OnLoad(self)
|
|
NUM_GUILDBANK_ICONS_SHOWN = NUM_GUILDBANK_ICONS_PER_ROW * NUM_GUILDBANK_ICON_ROWS;
|
|
self:RegisterEvent("GUILDBANKBAGSLOTS_CHANGED");
|
|
self:RegisterEvent("GUILDBANK_ITEM_LOCK_CHANGED");
|
|
self:RegisterEvent("GUILDBANK_UPDATE_TABS");
|
|
self:RegisterEvent("GUILDBANK_UPDATE_MONEY");
|
|
self:RegisterEvent("GUILDBANK_UPDATE_WITHDRAWMONEY");
|
|
self:RegisterEvent("GUILD_ROSTER_UPDATE");
|
|
self:RegisterEvent("GUILDBANKLOG_UPDATE");
|
|
self:RegisterEvent("GUILDTABARD_UPDATE");
|
|
self:RegisterEvent("GUILDBANK_UPDATE_TEXT");
|
|
self:RegisterEvent("GUILDBANK_TEXT_CHANGED");
|
|
self:RegisterEvent("PLAYER_MONEY");
|
|
-- Set the button id's
|
|
local index, column, button;
|
|
for i=1, MAX_GUILDBANK_SLOTS_PER_TAB do
|
|
index = mod(i, NUM_SLOTS_PER_GUILDBANK_GROUP);
|
|
if ( index == 0 ) then
|
|
index = NUM_SLOTS_PER_GUILDBANK_GROUP;
|
|
end
|
|
column = ceil((i-0.5)/NUM_SLOTS_PER_GUILDBANK_GROUP);
|
|
button = _G["GuildBankColumn"..column.."Button"..index];
|
|
button:SetID(i);
|
|
end
|
|
GuildBankFrame.mode = "bank";
|
|
GuildBankFrame.numTabs = 4;
|
|
GuildBankFrame_UpdateTabs();
|
|
GuildBankFrame_UpdateTabard();
|
|
|
|
end
|
|
|
|
function GuildBankFrame_OnEvent(self, event, ...)
|
|
if ( not GuildBankFrame:IsVisible() ) then
|
|
return;
|
|
end
|
|
if ( event == "GUILDBANKBAGSLOTS_CHANGED" or event =="GUILDBANK_ITEM_LOCK_CHANGED" ) then
|
|
GuildBankFrame_UpdateTabs();
|
|
GuildBankFrame_Update();
|
|
elseif ( event == "GUILDBANK_UPDATE_TABS" or event == "GUILD_ROSTER_UPDATE" ) then
|
|
if ( event == "GUILD_ROSTER_UPDATE" and not select(1, ...) and GuildBankFrame.noViewableTabs and GuildBankFrame.mode == "bank" ) then
|
|
-- if rank changed while at the bank tab and not having any viewable tabs, query for new item data
|
|
QueryGuildBankTab(GetCurrentGuildBankTab());
|
|
end
|
|
|
|
GuildBankFrame_SelectAvailableTab();
|
|
|
|
if ( GuildBankFrameBuyInfo:IsShown() ) then
|
|
GuildBankFrame_UpdateTabBuyingInfo();
|
|
end
|
|
if ( CanEditGuildTabInfo(GetCurrentGuildBankTab()) ) then
|
|
GuildBankInfoSaveButton:Show();
|
|
else
|
|
GuildBankInfoSaveButton:Hide();
|
|
end
|
|
elseif ( event == "GUILDBANKLOG_UPDATE" ) then
|
|
if ( GuildBankFrame.mode == "log" ) then
|
|
GuildBankFrame_UpdateLog();
|
|
else
|
|
GuildBankFrame_UpdateMoneyLog();
|
|
end
|
|
GuildBankLogScroll();
|
|
elseif ( event == "GUILDTABARD_UPDATE" ) then
|
|
GuildBankFrame_UpdateTabard();
|
|
elseif ( event == "GUILDBANK_UPDATE_MONEY" or event == "GUILDBANK_UPDATE_WITHDRAWMONEY" ) then
|
|
GuildBankFrame_UpdateWithdrawMoney();
|
|
elseif ( event == "GUILDBANK_UPDATE_TEXT" ) then
|
|
GuildBankFrame_UpdateTabInfo(...);
|
|
elseif ( event == "GUILDBANK_TEXT_CHANGED" ) then
|
|
local arg1 = ...
|
|
if ( GetCurrentGuildBankTab() == tonumber(arg1) ) then
|
|
QueryGuildBankText(arg1);
|
|
end
|
|
elseif ( event == "PLAYER_MONEY" ) then
|
|
if ( GuildBankFrameBuyInfo:IsShown() ) then
|
|
GuildBankFrame_UpdateTabBuyingInfo();
|
|
end
|
|
end
|
|
end
|
|
|
|
function GuildBankFrame_SelectAvailableTab()
|
|
--If the selected tab is notViewable then select the next available one
|
|
if ( IsTabViewable(GetCurrentGuildBankTab()) ) then
|
|
GuildBankFrame_UpdateTabs();
|
|
GuildBankFrame_Update();
|
|
else
|
|
if ( GuildBankFrame.nextAvailableTab ) then
|
|
GuildBankTab_OnClick(_G["GuildBankTab" .. GuildBankFrame.nextAvailableTab], "LeftButton", GuildBankFrame.nextAvailableTab);
|
|
else
|
|
GuildBankFrame_UpdateTabs();
|
|
GuildBankFrame_Update();
|
|
end
|
|
end
|
|
end
|
|
|
|
function GuildBankFrame_OnShow()
|
|
GuildBankFrameTab_OnClick(GuildBankFrameTab1, 1);
|
|
GuildBankFrame_UpdateTabard();
|
|
GuildBankFrame_SelectAvailableTab();
|
|
PlaySound("GuildVaultOpen");
|
|
end
|
|
|
|
function GuildBankFrame_Update()
|
|
--Figure out which mode you're in and which tab is selected
|
|
if ( GuildBankFrame.mode == "bank" ) then
|
|
-- Determine whether its the buy tab or not
|
|
GuildBankFrameLog:Hide();
|
|
GuildBankInfo:Hide();
|
|
local tab = GetCurrentGuildBankTab();
|
|
if ( GuildBankFrame.noViewableTabs ) then
|
|
GuildBankFrame_HideColumns();
|
|
GuildBankFrameBuyInfo:Hide();
|
|
GuildBankErrorMessage:SetText(NO_VIEWABLE_GUILDBANK_TABS);
|
|
GuildBankErrorMessage:Show();
|
|
elseif ( tab > GetNumGuildBankTabs() ) then
|
|
if ( IsGuildLeader() ) then
|
|
--Show buy screen
|
|
GuildBankFrame_HideColumns();
|
|
GuildBankFrameBuyInfo:Show();
|
|
GuildBankErrorMessage:Hide();
|
|
else
|
|
GuildBankFrame_HideColumns();
|
|
GuildBankFrameBuyInfo:Hide();
|
|
GuildBankErrorMessage:SetText(NO_GUILDBANK_TABS);
|
|
GuildBankErrorMessage:Show();
|
|
end
|
|
else
|
|
local _, _, _, canDeposit, numWithdrawals = GetGuildBankTabInfo(tab);
|
|
if ( not canDeposit and numWithdrawals == 0 ) then
|
|
GuildBankFrame_DesaturateColumns(1);
|
|
else
|
|
GuildBankFrame_DesaturateColumns(nil);
|
|
end
|
|
GuildBankFrame_ShowColumns()
|
|
GuildBankFrameBuyInfo:Hide();
|
|
GuildBankErrorMessage:Hide();
|
|
end
|
|
|
|
-- Update the tab items
|
|
local button, index, column;
|
|
local texture, itemCount, locked;
|
|
for i=1, MAX_GUILDBANK_SLOTS_PER_TAB do
|
|
index = mod(i, NUM_SLOTS_PER_GUILDBANK_GROUP);
|
|
if ( index == 0 ) then
|
|
index = NUM_SLOTS_PER_GUILDBANK_GROUP;
|
|
end
|
|
column = ceil((i-0.5)/NUM_SLOTS_PER_GUILDBANK_GROUP);
|
|
button = _G["GuildBankColumn"..column.."Button"..index];
|
|
button:SetID(i);
|
|
texture, itemCount, locked = GetGuildBankItemInfo(tab, i);
|
|
SetItemButtonTexture(button, texture);
|
|
SetItemButtonCount(button, itemCount);
|
|
SetItemButtonDesaturated(button, locked, 0.5, 0.5, 0.5);
|
|
end
|
|
MoneyFrame_Update("GuildBankMoneyFrame", GetGuildBankMoney());
|
|
if ( CanWithdrawGuildBankMoney() ) then
|
|
GuildBankFrameWithdrawButton:Enable();
|
|
else
|
|
GuildBankFrameWithdrawButton:Disable();
|
|
end
|
|
elseif ( GuildBankFrame.mode == "log" or GuildBankFrame.mode == "moneylog" ) then
|
|
GuildBankFrame_HideColumns();
|
|
GuildBankFrameBuyInfo:Hide();
|
|
GuildBankInfo:Hide();
|
|
if ( GuildBankFrame.noViewableTabs and GuildBankFrame.mode == "log" ) then
|
|
GuildBankErrorMessage:SetText(NO_VIEWABLE_GUILDBANK_LOGS);
|
|
GuildBankErrorMessage:Show();
|
|
GuildBankFrameLog:Hide();
|
|
else
|
|
GuildBankErrorMessage:Hide();
|
|
GuildBankFrameLog:Show();
|
|
end
|
|
elseif ( GuildBankFrame.mode == "tabinfo" ) then
|
|
GuildBankFrame_HideColumns();
|
|
GuildBankErrorMessage:Hide();
|
|
GuildBankFrameBuyInfo:Hide();
|
|
GuildBankFrameLog:Hide();
|
|
GuildBankInfo:Show();
|
|
end
|
|
--Update remaining money
|
|
GuildBankFrame_UpdateWithdrawMoney();
|
|
end
|
|
|
|
function GuildBankFrameTab_OnClick(tab, id, doNotUpdate)
|
|
PanelTemplates_SetTab(GuildBankFrame, id);
|
|
if ( id == 1 ) then
|
|
--Bank
|
|
GuildBankFrame.mode = "bank";
|
|
if ( not doNotUpdate ) then
|
|
QueryGuildBankTab(GetCurrentGuildBankTab());
|
|
end
|
|
elseif ( id == 2 ) then
|
|
--Log
|
|
GuildBankMessageFrame:Clear();
|
|
GuildBankTransactionsScrollFrame:Hide();
|
|
GuildBankFrame.mode = "log";
|
|
if ( not doNotUpdate ) then
|
|
QueryGuildBankLog(GetCurrentGuildBankTab());
|
|
end
|
|
GuildBankTransactionsScrollFrameScrollBar:SetValue(0);
|
|
elseif ( id == 3 ) then
|
|
--Money log
|
|
GuildBankMessageFrame:Clear();
|
|
GuildBankTransactionsScrollFrame:Hide();
|
|
GuildBankFrame.mode = "moneylog";
|
|
if ( not doNotUpdate ) then
|
|
QueryGuildBankLog(MAX_GUILDBANK_TABS + 1);
|
|
end
|
|
GuildBankTransactionsScrollFrameScrollBar:SetValue(0);
|
|
else
|
|
--Tab Info
|
|
GuildBankFrame.mode = "tabinfo";
|
|
if ( not doNotUpdate ) then
|
|
QueryGuildBankText(GetCurrentGuildBankTab());
|
|
end
|
|
end
|
|
--Call this to gray out tabs or activate them
|
|
GuildBankFrame_UpdateTabs();
|
|
if ( not doNotUpdate ) then
|
|
GuildBankFrame_Update();
|
|
end
|
|
PlaySound("igCharacterInfoTab");
|
|
end
|
|
|
|
function GuildBankFrame_UpdateTabBuyingInfo()
|
|
local tabCost = GetGuildBankTabCost();
|
|
local numTabs = GetNumGuildBankTabs();
|
|
GuildBankFrameBuyInfoNumTabsPurchasedText:SetText(format(NUM_GUILDBANK_TABS_PURCHASED, numTabs, MAX_GUILDBANK_TABS));
|
|
if ( not tabCost ) then
|
|
--You've bought all the tabs
|
|
GuildBankTab_OnClick(GuildBankTab1, "LeftButton", 1);
|
|
else
|
|
if( GetMoney() >= tabCost or (GetMoney() + GetGuildBankMoney()) >= tabCost ) then
|
|
SetMoneyFrameColor("GuildBankFrameTabCostMoneyFrame", "white");
|
|
GuildBankFramePurchaseButton:Enable();
|
|
else
|
|
SetMoneyFrameColor("GuildBankFrameTabCostMoneyFrame", "red");
|
|
GuildBankFramePurchaseButton:Disable();
|
|
end
|
|
GuildBankTab_OnClick(_G["GuildBankTab" .. numTabs+1], "LeftButton", numTabs+1);
|
|
MoneyFrame_Update("GuildBankFrameTabCostMoneyFrame", tabCost);
|
|
end
|
|
end
|
|
|
|
function GuildBankFrame_UpdateTabs()
|
|
local tab, iconTexture, tabButton;
|
|
local name, icon, isViewable, canDeposit, numWithdrawals, remainingWithdrawals;
|
|
local numTabs = GetNumGuildBankTabs();
|
|
local currentTab = GetCurrentGuildBankTab();
|
|
local tabToBuyIndex = numTabs+1;
|
|
local unviewableCount = 0;
|
|
local disableAll = nil;
|
|
local updateAgain = nil;
|
|
local isLocked, titleText;
|
|
local withdrawalText, withdrawalStackCount;
|
|
-- Disable and gray out all tabs if in the moneyLog since the tab is irrelevant
|
|
if ( GuildBankFrame.mode == "moneylog" ) then
|
|
disableAll = 1;
|
|
end
|
|
for i=1, MAX_GUILDBANK_TABS do
|
|
tab = _G["GuildBankTab"..i];
|
|
tabButton = _G["GuildBankTab"..i.."Button"];
|
|
name, icon, isViewable, canDeposit, numWithdrawals, remainingWithdrawals = GetGuildBankTabInfo(i);
|
|
iconTexture = _G["GuildBankTab"..i.."ButtonIconTexture"];
|
|
if ( not name or name == "" ) then
|
|
name = format(GUILDBANK_TAB_NUMBER, i);
|
|
end
|
|
if ( i == tabToBuyIndex and IsGuildLeader() ) then
|
|
iconTexture:SetTexture("Interface\\GuildBankFrame\\UI-GuildBankFrame-NewTab");
|
|
tabButton.tooltip = BUY_GUILDBANK_TAB;
|
|
tab:Show();
|
|
|
|
if ( disableAll or GuildBankFrame.mode == "log" or GuildBankFrame.mode == "tabinfo" ) then
|
|
tabButton:SetChecked(nil);
|
|
SetDesaturation(iconTexture, 1);
|
|
tabButton:SetButtonState("NORMAL");
|
|
tabButton:Disable();
|
|
if ( GuildBankFrame.mode == "log" and i == currentTab and numTabs > 0 ) then
|
|
SetCurrentGuildBankTab(1);
|
|
updateAgain = 1;
|
|
end
|
|
else
|
|
if ( i == currentTab ) then
|
|
tabButton:SetChecked(1);
|
|
tabButton:Disable();
|
|
SetDesaturation(iconTexture, nil);
|
|
titleText = BUY_GUILDBANK_TAB;
|
|
else
|
|
tabButton:SetChecked(nil);
|
|
tabButton:Enable();
|
|
SetDesaturation(iconTexture, nil);
|
|
end
|
|
end
|
|
elseif ( i >= tabToBuyIndex ) then
|
|
tab:Hide();
|
|
else
|
|
iconTexture:SetTexture(icon);
|
|
tab:Show();
|
|
if ( isViewable ) then
|
|
tabButton.tooltip = name;
|
|
if ( i == currentTab ) then
|
|
if ( disableAll ) then
|
|
tabButton:SetChecked(nil);
|
|
else
|
|
tabButton:SetChecked(1);
|
|
tabButton:Enable();
|
|
end
|
|
withdrawalText = name;
|
|
titleText = name;
|
|
else
|
|
tabButton:SetChecked(nil);
|
|
tabButton:Enable();
|
|
end
|
|
if ( disableAll ) then
|
|
tabButton:Disable();
|
|
SetDesaturation(iconTexture, 1);
|
|
else
|
|
SetDesaturation(iconTexture, nil);
|
|
end
|
|
else
|
|
unviewableCount = unviewableCount+1;
|
|
tabButton:Disable();
|
|
SetDesaturation(iconTexture, 1);
|
|
tabButton:SetChecked(nil);
|
|
end
|
|
|
|
end
|
|
if ( unviewableCount == numTabs and not IsGuildLeader() ) then
|
|
--Can't view any tabs so hide everything
|
|
GuildBankFrame.noViewableTabs = 1;
|
|
else
|
|
GuildBankFrame.noViewableTabs = nil;
|
|
end
|
|
if ( updateAgain ) then
|
|
GuildBankFrame_UpdateTabs();
|
|
end
|
|
end
|
|
|
|
-- Set Title
|
|
if ( GuildBankFrame.mode == "moneylog" ) then
|
|
titleText = GUILD_BANK_MONEY_LOG;
|
|
withdrawalText = nil;
|
|
elseif ( GuildBankFrame.mode == "log" ) then
|
|
if ( titleText ) then
|
|
titleText = format(GUILDBANK_LOG_TITLE_FORMAT, titleText);
|
|
end
|
|
elseif ( GuildBankFrame.mode == "tabinfo" ) then
|
|
withdrawalText = nil;
|
|
if ( titleText ) then
|
|
titleText = format(GUILDBANK_INFO_TITLE_FORMAT, titleText);
|
|
end
|
|
end
|
|
--Get selected tab info
|
|
name, icon, isViewable, canDeposit, numWithdrawals, remainingWithdrawals = GetGuildBankTabInfo(currentTab);
|
|
if ( titleText and (GuildBankFrame.mode ~= "moneylog" and titleText ~= BUY_GUILDBANK_TAB) ) then
|
|
local access;
|
|
if ( not canDeposit and numWithdrawals == 0 ) then
|
|
access = RED_FONT_COLOR_CODE.."("..GUILDBANK_TAB_LOCKED..")"..FONT_COLOR_CODE_CLOSE;
|
|
elseif ( not canDeposit ) then
|
|
access = RED_FONT_COLOR_CODE.."("..GUILDBANK_TAB_WITHDRAW_ONLY..")"..FONT_COLOR_CODE_CLOSE;
|
|
elseif ( numWithdrawals == 0 ) then
|
|
access = RED_FONT_COLOR_CODE.."("..GUILDBANK_TAB_DEPOSIT_ONLY..")"..FONT_COLOR_CODE_CLOSE;
|
|
else
|
|
access = GREEN_FONT_COLOR_CODE.."("..GUILDBANK_TAB_FULL_ACCESS..")"..FONT_COLOR_CODE_CLOSE;
|
|
end
|
|
titleText = titleText.." "..access;
|
|
end
|
|
if ( titleText ) then
|
|
GuildBankTabTitle:SetText(titleText);
|
|
GuildBankTabTitleBackground:SetWidth(GuildBankTabTitle:GetWidth()+20);
|
|
|
|
GuildBankTabTitle:Show();
|
|
GuildBankTabTitleBackground:Show();
|
|
GuildBankTabTitleBackgroundLeft:Show();
|
|
GuildBankTabTitleBackgroundRight:Show();
|
|
else
|
|
GuildBankTabTitle:Hide();
|
|
GuildBankTabTitleBackground:Hide();
|
|
GuildBankTabTitleBackgroundLeft:Hide();
|
|
GuildBankTabTitleBackgroundRight:Hide();
|
|
end
|
|
if ( withdrawalText ) then
|
|
local stackString;
|
|
if ( remainingWithdrawals > 0 ) then
|
|
stackString = format(STACKS, remainingWithdrawals);
|
|
elseif ( remainingWithdrawals == 0 ) then
|
|
stackString = NONE;
|
|
else
|
|
stackString = UNLIMITED;
|
|
end
|
|
GuildBankLimitLabel:SetText(format(GUILDBANK_REMAINING_MONEY, withdrawalText, stackString));
|
|
GuildBankTabLimitBackground:SetWidth(GuildBankLimitLabel:GetWidth()+20);
|
|
--If the tab name is too long then reanchor the withdraw box so it's not longer centered
|
|
if ( GuildBankLimitLabel:GetWidth() > 298 ) then
|
|
GuildBankTabLimitBackground:ClearAllPoints();
|
|
GuildBankTabLimitBackground:SetPoint("RIGHT", GuildBankFrameWithdrawButton, "LEFT", -14, -1);
|
|
else
|
|
GuildBankTabLimitBackground:ClearAllPoints();
|
|
GuildBankTabLimitBackground:SetPoint("TOP", "GuildBankFrame", "TOP", 6, -388);
|
|
end
|
|
|
|
GuildBankLimitLabel:Show();
|
|
GuildBankTabLimitBackground:Show();
|
|
GuildBankTabLimitBackgroundLeft:Show();
|
|
GuildBankTabLimitBackgroundRight:Show();
|
|
else
|
|
GuildBankLimitLabel:Hide();
|
|
GuildBankTabLimitBackground:Hide();
|
|
GuildBankTabLimitBackgroundLeft:Hide();
|
|
GuildBankTabLimitBackgroundRight:Hide();
|
|
end
|
|
end
|
|
|
|
function GuildBankTab_OnClick(self, mouseButton, currentTab)
|
|
if ( GuildBankInfo:IsShown() ) then
|
|
GuildBankInfoSaveButton:Click();
|
|
end
|
|
if ( not currentTab ) then
|
|
currentTab = self:GetParent():GetID();
|
|
end
|
|
SetCurrentGuildBankTab(currentTab);
|
|
GuildBankFrame_UpdateTabs();
|
|
if ( IsGuildLeader() and mouseButton == "RightButton" and currentTab ~= (GetNumGuildBankTabs() + 1) ) then
|
|
--Show the popup if it's a right click
|
|
GuildBankPopupFrame:Show();
|
|
GuildBankPopupFrame_Update(currentTab);
|
|
end
|
|
GuildBankFrame_Update();
|
|
if ( GuildBankFrameLog:IsShown() ) then
|
|
if ( GuildBankFrame.mode == "log" ) then
|
|
QueryGuildBankTab(currentTab); --Need this to get the number of withdrawals left for this tab
|
|
QueryGuildBankLog(currentTab);
|
|
GuildBankFrame_UpdateLog();
|
|
else
|
|
QueryGuildBankLog(MAX_GUILDBANK_TABS+1);
|
|
GuildBankFrame_UpdateMoneyLog();
|
|
end
|
|
elseif ( GuildBankInfo:IsShown() ) then
|
|
QueryGuildBankText(currentTab);
|
|
else
|
|
QueryGuildBankTab(currentTab);
|
|
end
|
|
end
|
|
|
|
function GuildBankFrame_HideColumns()
|
|
if ( not GuildBankColumn1:IsShown() ) then
|
|
return;
|
|
end
|
|
for i=1, NUM_GUILDBANK_COLUMNS do
|
|
_G["GuildBankColumn"..i]:Hide();
|
|
end
|
|
end
|
|
|
|
function GuildBankFrame_ShowColumns()
|
|
if ( GuildBankColumn1:IsShown() ) then
|
|
return;
|
|
end
|
|
for i=1, NUM_GUILDBANK_COLUMNS do
|
|
_G["GuildBankColumn"..i]:Show();
|
|
end
|
|
end
|
|
|
|
function GuildBankFrame_DesaturateColumns(isDesaturated)
|
|
for i=1, NUM_GUILDBANK_COLUMNS do
|
|
SetDesaturation(_G["GuildBankColumn"..i.."Background"], isDesaturated);
|
|
end
|
|
end
|
|
|
|
function GuildBankItemButton_OnLoad(self)
|
|
self:RegisterForClicks("LeftButtonUp", "RightButtonUp");
|
|
self:RegisterForDrag("LeftButton");
|
|
self.SplitStack = function(button, split)
|
|
SplitGuildBankItem(GetCurrentGuildBankTab(), button:GetID(), split);
|
|
end
|
|
self.UpdateTooltip = GuildBankItemButton_OnEnter;
|
|
end
|
|
|
|
function GuildBankItemButton_OnEnter(self)
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
|
|
GameTooltip:SetGuildBankItem(GetCurrentGuildBankTab(), self:GetID());
|
|
end
|
|
|
|
function GuildBankFrame_UpdateLog()
|
|
local tab = GetCurrentGuildBankTab();
|
|
local numTransactions = GetNumGuildBankTransactions(tab);
|
|
local type, name, itemLink, count, tab1, tab2, year, month, day, hour;
|
|
|
|
local msg;
|
|
GuildBankMessageFrame:Clear();
|
|
for i=1, numTransactions, 1 do
|
|
type, name, itemLink, count, tab1, tab2, year, month, day, hour = GetGuildBankTransaction(tab, i);
|
|
if ( not name ) then
|
|
name = UNKNOWN;
|
|
end
|
|
name = NORMAL_FONT_COLOR_CODE..name..FONT_COLOR_CODE_CLOSE;
|
|
if ( type == "deposit" ) then
|
|
msg = format(GUILDBANK_DEPOSIT_FORMAT, name, itemLink);
|
|
if ( count > 1 ) then
|
|
msg = msg..format(GUILDBANK_LOG_QUANTITY, count);
|
|
end
|
|
elseif ( type == "withdraw" ) then
|
|
msg = format(GUILDBANK_WITHDRAW_FORMAT, name, itemLink);
|
|
if ( count > 1 ) then
|
|
msg = msg..format(GUILDBANK_LOG_QUANTITY, count);
|
|
end
|
|
elseif ( type == "move" ) then
|
|
msg = format(GUILDBANK_MOVE_FORMAT, name, itemLink, count, GetGuildBankTabInfo(tab1), GetGuildBankTabInfo(tab2));
|
|
end
|
|
if ( msg ) then
|
|
GuildBankMessageFrame:AddMessage( msg..GUILD_BANK_LOG_TIME_PREPEND..format(GUILD_BANK_LOG_TIME, RecentTimeDate(year, month, day, hour)) );
|
|
end
|
|
end
|
|
FauxScrollFrame_Update(GuildBankTransactionsScrollFrame, numTransactions, MAX_TRANSACTIONS_SHOWN, GUILDBANK_TRANSACTION_HEIGHT );
|
|
end
|
|
|
|
function GuildBankFrame_UpdateMoneyLog()
|
|
local numTransactions = GetNumGuildBankMoneyTransactions();
|
|
local type, name, amount, year, month, day, hour;
|
|
local msg;
|
|
local money;
|
|
GuildBankMessageFrame:Clear();
|
|
for i=1, numTransactions, 1 do
|
|
type, name, amount, year, month, day, hour = GetGuildBankMoneyTransaction(i);
|
|
if ( not name ) then
|
|
name = UNKNOWN;
|
|
end
|
|
name = NORMAL_FONT_COLOR_CODE..name..FONT_COLOR_CODE_CLOSE;
|
|
money = GetDenominationsFromCopper(amount);
|
|
if ( type == "deposit" ) then
|
|
msg = format(GUILDBANK_DEPOSIT_MONEY_FORMAT, name, money);
|
|
elseif ( type == "withdraw" ) then
|
|
msg = format(GUILDBANK_WITHDRAW_MONEY_FORMAT, name, money);
|
|
elseif ( type == "repair" ) then
|
|
msg = format(GUILDBANK_REPAIR_MONEY_FORMAT, name, money);
|
|
elseif ( type == "withdrawForTab" ) then
|
|
msg = format(GUILDBANK_WITHDRAWFORTAB_MONEY_FORMAT, name, money);
|
|
elseif ( type == "buyTab" ) then
|
|
msg = format(GUILDBANK_BUYTAB_MONEY_FORMAT, name, money);
|
|
end
|
|
GuildBankMessageFrame:AddMessage(msg..GUILD_BANK_LOG_TIME_PREPEND..format(GUILD_BANK_LOG_TIME, RecentTimeDate(year, month, day, hour)));
|
|
end
|
|
FauxScrollFrame_Update(GuildBankTransactionsScrollFrame, numTransactions, MAX_TRANSACTIONS_SHOWN, GUILDBANK_TRANSACTION_HEIGHT );
|
|
end
|
|
|
|
function GuildBankLogScroll()
|
|
local offset = FauxScrollFrame_GetOffset(GuildBankTransactionsScrollFrame);
|
|
local numTransactions = 0;
|
|
if ( GuildBankFrame.mode == "log" ) then
|
|
numTransactions = GetNumGuildBankTransactions(GetCurrentGuildBankTab());
|
|
elseif ( GuildBankFrame.mode == "moneylog" ) then
|
|
numTransactions = GetNumGuildBankMoneyTransactions();
|
|
end
|
|
GuildBankMessageFrame:SetScrollOffset(offset);
|
|
FauxScrollFrame_Update(GuildBankTransactionsScrollFrame, numTransactions, MAX_TRANSACTIONS_SHOWN, GUILDBANK_TRANSACTION_HEIGHT );
|
|
end
|
|
|
|
function IsTabViewable(tab)
|
|
GuildBankFrame.nextAvailableTab = nil;
|
|
local view = false;
|
|
for i=1, MAX_GUILDBANK_TABS do
|
|
local _, _, isViewable = GetGuildBankTabInfo(i);
|
|
if ( isViewable ) then
|
|
if ( not GuildBankFrame.nextAvailableTab ) then
|
|
GuildBankFrame.nextAvailableTab = i;
|
|
end
|
|
if ( i == tab ) then
|
|
view = true;
|
|
end
|
|
end
|
|
end
|
|
return view;
|
|
end
|
|
|
|
function GuildBankFrame_UpdateWithdrawMoney()
|
|
local withdrawLimit = GetGuildBankWithdrawMoney();
|
|
if ( withdrawLimit >= 0 ) then
|
|
local amount;
|
|
if ( (not CanGuildBankRepair() and not CanWithdrawGuildBankMoney()) or (CanGuildBankRepair() and not CanWithdrawGuildBankMoney()) ) then
|
|
amount = 0;
|
|
else
|
|
amount = GetGuildBankMoney();
|
|
end
|
|
withdrawLimit = min(withdrawLimit, amount);
|
|
MoneyFrame_Update("GuildBankWithdrawMoneyFrame", withdrawLimit);
|
|
GuildBankMoneyUnlimitedLabel:Hide();
|
|
GuildBankWithdrawMoneyFrame:Show();
|
|
else
|
|
GuildBankMoneyUnlimitedLabel:Show();
|
|
GuildBankWithdrawMoneyFrame:Hide();
|
|
end
|
|
end
|
|
|
|
function GuildBankFrame_UpdateTabard()
|
|
--Set the tabard images
|
|
local tabardBackgroundUpper, tabardBackgroundLower, tabardEmblemUpper, tabardEmblemLower, tabardBorderUpper, tabardBorderLower = GetGuildTabardFileNames();
|
|
if ( not tabardEmblemUpper ) then
|
|
tabardBackgroundUpper = "Textures\\GuildEmblems\\Background_49_TU_U";
|
|
tabardBackgroundLower = "Textures\\GuildEmblems\\Background_49_TL_U";
|
|
end
|
|
GuildBankEmblemBackgroundUL:SetTexture(tabardBackgroundUpper);
|
|
GuildBankEmblemBackgroundUR:SetTexture(tabardBackgroundUpper);
|
|
GuildBankEmblemBackgroundBL:SetTexture(tabardBackgroundLower);
|
|
GuildBankEmblemBackgroundBR:SetTexture(tabardBackgroundLower);
|
|
|
|
GuildBankEmblemUL:SetTexture(tabardEmblemUpper);
|
|
GuildBankEmblemUR:SetTexture(tabardEmblemUpper);
|
|
GuildBankEmblemBL:SetTexture(tabardEmblemLower);
|
|
GuildBankEmblemBR:SetTexture(tabardEmblemLower);
|
|
|
|
GuildBankEmblemBorderUL:SetTexture(tabardBorderUpper);
|
|
GuildBankEmblemBorderUR:SetTexture(tabardBorderUpper);
|
|
GuildBankEmblemBorderBL:SetTexture(tabardBorderLower);
|
|
GuildBankEmblemBorderBR:SetTexture(tabardBorderLower);
|
|
end
|
|
|
|
function GuildBankFrame_UpdateTabInfo(tab)
|
|
local text = GetGuildBankText(tab);
|
|
if ( text ) then
|
|
GuildBankTabInfoEditBox.text = text;
|
|
GuildBankTabInfoEditBox:SetText(text);
|
|
else
|
|
GuildBankTabInfoEditBox:SetText("");
|
|
end
|
|
end
|
|
|
|
--Popup functions
|
|
function GuildBankPopupFrame_Update(tab)
|
|
local numguildBankIcons = GetNumMacroItemIcons();
|
|
local guildBankPopupIcon, guildBankPopupButton;
|
|
local guildBankPopupOffset = FauxScrollFrame_GetOffset(GuildBankPopupScrollFrame);
|
|
local index;
|
|
|
|
local _, tabTexture = GetGuildBankTabInfo(GetCurrentGuildBankTab());
|
|
|
|
-- Icon list
|
|
local texture;
|
|
for i=1, NUM_GUILDBANK_ICONS_SHOWN do
|
|
guildBankPopupIcon = _G["GuildBankPopupButton"..i.."Icon"];
|
|
guildBankPopupButton = _G["GuildBankPopupButton"..i];
|
|
index = (guildBankPopupOffset * NUM_GUILDBANK_ICONS_PER_ROW) + i;
|
|
texture = GetMacroItemIconInfo(index);
|
|
if ( index <= numguildBankIcons ) then
|
|
guildBankPopupIcon:SetTexture(texture);
|
|
guildBankPopupButton:Show();
|
|
else
|
|
guildBankPopupIcon:SetTexture("");
|
|
guildBankPopupButton:Hide();
|
|
end
|
|
if ( GuildBankPopupFrame.selectedIcon ) then
|
|
if ( index == GuildBankPopupFrame.selectedIcon ) then
|
|
guildBankPopupButton:SetChecked(1);
|
|
else
|
|
guildBankPopupButton:SetChecked(nil);
|
|
end
|
|
elseif ( tabTexture == texture ) then
|
|
guildBankPopupButton:SetChecked(1);
|
|
GuildBankPopupFrame.selectedIcon = index;
|
|
else
|
|
guildBankPopupButton:SetChecked(nil);
|
|
end
|
|
end
|
|
--Only do this if the player hasn't clicked on an icon or the icon is not visible
|
|
if ( not GuildBankPopupFrame.selectedIcon ) then
|
|
for i=1, numguildBankIcons do
|
|
texture = GetMacroItemIconInfo(i);
|
|
if ( tabTexture == texture ) then
|
|
GuildBankPopupFrame.selectedIcon = i;
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Scrollbar stuff
|
|
FauxScrollFrame_Update(GuildBankPopupScrollFrame, ceil(numguildBankIcons / NUM_GUILDBANK_ICONS_PER_ROW) , NUM_GUILDBANK_ICON_ROWS, GUILDBANK_ICON_ROW_HEIGHT );
|
|
end
|
|
|
|
function GuildBankPopupFrame_OnShow(self)
|
|
local name = GetGuildBankTabInfo(GetCurrentGuildBankTab());
|
|
if ( not name or name == "" ) then
|
|
name = format(GUILDBANK_TAB_NUMBER, GetCurrentGuildBankTab());
|
|
end
|
|
GuildBankPopupEditBox:SetText(name);
|
|
GuildBankPopupFrame.selectedIcon = nil;
|
|
end
|
|
|
|
function GuildBankPopupButton_OnClick(self, button)
|
|
local offset = FauxScrollFrame_GetOffset(GuildBankPopupScrollFrame);
|
|
local index = (offset * NUM_GUILDBANK_ICONS_PER_ROW)+self:GetID();
|
|
GuildBankPopupFrame.selectedIcon = index;
|
|
GuildBankPopupFrame_Update(GetCurrentGuildBankTab());
|
|
end
|
|
|
|
function GuildBankPopupOkayButton_OnClick(self)
|
|
local name = GuildBankPopupEditBox:GetText();
|
|
local tab = GetCurrentGuildBankTab();
|
|
if ( not name or name == "" ) then
|
|
name = format(GUILDBANK_TAB_NUMBER, tab);
|
|
end
|
|
SetGuildBankTabInfo(tab, name, GuildBankPopupFrame.selectedIcon);
|
|
GuildBankPopupFrame:Hide();
|
|
end
|
|
|
|
function GuildBankPopupFrame_CancelEdit()
|
|
GuildBankPopupFrame:Hide();
|
|
end
|
|
|