314 lines
9.5 KiB
Lua
314 lines
9.5 KiB
Lua
UIPanelWindows["TokenFrame"] = { area = "left", pushable = 1, whileDead = 1 };
|
|
TOKEN_BUTTON_OFFSET = 3;
|
|
MAX_WATCHED_TOKENS = 3;
|
|
BACKPACK_TOKENFRAME_HEIGHT = 22;
|
|
|
|
-- REMOVE ME!!!
|
|
SlashCmdList["TOKENUI"] = function() ToggleCharacter("TokenFrame"); end;
|
|
|
|
function TokenButton_OnLoad(self)
|
|
local name = self:GetName();
|
|
self.count = _G[name.."Count"];
|
|
self.name = _G[name.."Name"];
|
|
self.icon = _G[name.."Icon"];
|
|
self.check = _G[name.."Check"];
|
|
self.expandIcon = _G[name.."ExpandIcon"];
|
|
self.categoryLeft = _G[name.."CategoryLeft"];
|
|
self.categoryRight = _G[name.."CategoryRight"];
|
|
self.highlight = _G[name.."Highlight"];
|
|
self.stripe = _G[name.."Stripe"];
|
|
end
|
|
|
|
function TokenFrame_OnLoad()
|
|
TokenFrameContainerScrollBar.Show =
|
|
function (self)
|
|
TokenFrameContainer:SetWidth(299);
|
|
for _, button in next, _G["TokenFrameContainer"].buttons do
|
|
button:SetWidth(295);
|
|
end
|
|
getmetatable(self).__index.Show(self);
|
|
end
|
|
|
|
TokenFrameContainerScrollBar.Hide =
|
|
function (self)
|
|
TokenFrameContainer:SetWidth(313);
|
|
for _, button in next, TokenFrameContainer.buttons do
|
|
button:SetWidth(313);
|
|
end
|
|
getmetatable(self).__index.Hide(self);
|
|
end
|
|
TokenFrameContainer.update = TokenFrame_Update;
|
|
HybridScrollFrame_CreateButtons(TokenFrameContainer, "TokenButtonTemplate", 0, -2, "TOPLEFT", "TOPLEFT", 0, -TOKEN_BUTTON_OFFSET);
|
|
local buttons = TokenFrameContainer.buttons;
|
|
local numButtons = #buttons;
|
|
for i=1, numButtons do
|
|
if ( mod(i, 2) == 1 ) then
|
|
buttons[i].stripe:Hide();
|
|
end
|
|
end
|
|
end
|
|
|
|
function TokenFrame_OnShow(self)
|
|
SetButtonPulse(CharacterFrameTab5, 0, 1); --Stop the button pulse
|
|
TokenFrame_Update();
|
|
end
|
|
|
|
function TokenFrame_Update()
|
|
|
|
-- Setup the buttons
|
|
local scrollFrame = TokenFrameContainer;
|
|
local offset = HybridScrollFrame_GetOffset(scrollFrame);
|
|
local buttons = scrollFrame.buttons;
|
|
local numButtons = #buttons;
|
|
local numTokenTypes = GetCurrencyListSize();
|
|
local name, isHeader, isExpanded, isUnused, isWatched, count, extraCurrencyType, icon, itemID;
|
|
local button, index;
|
|
for i=1, numButtons do
|
|
index = offset+i;
|
|
name, isHeader, isExpanded, isUnused, isWatched, count, extraCurrencyType, icon, itemID = GetCurrencyListInfo(index);
|
|
|
|
button = buttons[i];
|
|
button.check:Hide();
|
|
if ( not name or name == "" ) then
|
|
button:Hide();
|
|
else
|
|
if ( isHeader ) then
|
|
button.categoryLeft:Show();
|
|
button.categoryRight:Show();
|
|
button.expandIcon:Show();
|
|
button.count:SetText("");
|
|
button.icon:SetTexture("");
|
|
if ( isExpanded ) then
|
|
button.expandIcon:SetTexCoord(0.5625, 1, 0, 0.4375);
|
|
else
|
|
button.expandIcon:SetTexCoord(0, 0.4375, 0, 0.4375);
|
|
end
|
|
button.highlight:SetTexture("Interface\\TokenFrame\\UI-TokenFrame-CategoryButton");
|
|
button.highlight:SetPoint("TOPLEFT", button, "TOPLEFT", 3, -2);
|
|
button.highlight:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -3, 2);
|
|
button:SetText(name);
|
|
button.name:SetText("");
|
|
button.itemID = nil;
|
|
button.LinkButton:Hide();
|
|
else
|
|
button.categoryLeft:Hide();
|
|
button.categoryRight:Hide();
|
|
button.expandIcon:Hide();
|
|
button.count:SetText(count);
|
|
button.extraCurrencyType = extraCurrencyType;
|
|
if ( extraCurrencyType == 1 ) then --Arena points
|
|
button.icon:SetTexture("Interface\\PVPFrame\\PVP-ArenaPoints-Icon");
|
|
button.icon:SetTexCoord(0, 1, 0, 1);
|
|
elseif ( extraCurrencyType == 2 ) then --Honor points
|
|
local factionGroup = UnitFactionGroup("player");
|
|
if ( factionGroup ) then
|
|
button.icon:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..factionGroup);
|
|
button.icon:SetTexCoord( 0.03125, 0.59375, 0.03125, 0.59375 );
|
|
else
|
|
button.icon:Hide() --We don't know their faction yet!
|
|
button.icon:SetTexCoord(0, 1, 0, 1);
|
|
end
|
|
else
|
|
button.icon:SetTexture(icon);
|
|
button.icon:SetTexCoord(0, 1, 0, 1);
|
|
end
|
|
if ( isWatched ) then
|
|
button.check:Show();
|
|
end
|
|
button.highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight");
|
|
button.highlight:SetPoint("TOPLEFT", button, "TOPLEFT", 0, 0);
|
|
button.highlight:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", 0, 0);
|
|
--Gray out the text if the count is 0
|
|
if ( count == 0 ) then
|
|
button.count:SetFontObject("GameFontDisable");
|
|
button.name:SetFontObject("GameFontDisable");
|
|
else
|
|
button.count:SetFontObject("GameFontHighlight");
|
|
button.name:SetFontObject("GameFontHighlight");
|
|
end
|
|
button:SetText("");
|
|
button.name:SetText(name);
|
|
button.itemID = itemID;
|
|
button.LinkButton:Show();
|
|
end
|
|
--Manage highlight
|
|
if ( name == TokenFrame.selectedToken ) then
|
|
TokenFrame.selectedID = index;
|
|
button:LockHighlight();
|
|
else
|
|
button:UnlockHighlight();
|
|
end
|
|
|
|
button.index = index;
|
|
button.isHeader = isHeader;
|
|
button.isExpanded = isExpanded;
|
|
button.isUnused = isUnused;
|
|
button.isWatched = isWatched;
|
|
button:Show();
|
|
end
|
|
end
|
|
local totalHeight = numTokenTypes * (button:GetHeight()+TOKEN_BUTTON_OFFSET);
|
|
local displayedHeight = #buttons * (button:GetHeight()+TOKEN_BUTTON_OFFSET);
|
|
|
|
HybridScrollFrame_Update(scrollFrame, totalHeight, displayedHeight);
|
|
|
|
if ( numTokenTypes == 0 ) then
|
|
CharacterFrameTab5:Hide();
|
|
else
|
|
CharacterFrameTab5:Show();
|
|
end
|
|
end
|
|
|
|
function TokenFramePopup_CloseIfHidden()
|
|
-- This handles the case where you close a category with the selected token popup shown
|
|
local numTokenTypes = GetCurrencyListSize();
|
|
local selectedFound;
|
|
for i=1, numTokenTypes do
|
|
if ( TokenFrame.selectedToken == GetCurrencyListInfo(i) ) then
|
|
selectedFound = 1;
|
|
end
|
|
end
|
|
if ( not selectedFound ) then
|
|
TokenFramePopup:Hide();
|
|
end
|
|
end
|
|
|
|
function BackpackTokenFrame_Update()
|
|
local watchButton;
|
|
local name, count, extraCurrencyType, icon;
|
|
for i=1, MAX_WATCHED_TOKENS do
|
|
name, count, extraCurrencyType, icon, itemID = GetBackpackCurrencyInfo(i);
|
|
-- Update watched tokens
|
|
if ( name ) then
|
|
watchButton = _G["BackpackTokenFrameToken"..i];
|
|
watchButton.extraCurrencyType = extraCurrencyType;
|
|
if ( extraCurrencyType == 1 ) then --Arena points
|
|
watchButton.icon:SetTexture("Interface\\PVPFrame\\PVP-ArenaPoints-Icon");
|
|
watchButton.icon:SetTexCoord(0, 1, 0, 1);
|
|
elseif ( extraCurrencyType == 2 ) then --Honor points
|
|
local factionGroup = UnitFactionGroup("player");
|
|
if ( factionGroup ) then
|
|
watchButton.icon:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..factionGroup);
|
|
watchButton.icon:SetTexCoord( 0.03125, 0.59375, 0.03125, 0.59375 );
|
|
else
|
|
watchButton.icon:SetTexCoord(0, 1, 0, 1);
|
|
end
|
|
else
|
|
watchButton.icon:SetTexture(icon);
|
|
watchButton.icon:SetTexCoord(0, 1, 0, 1);
|
|
end
|
|
if ( count <= 99999 ) then
|
|
watchButton.count:SetText(count);
|
|
else
|
|
watchButton.count:SetText("*");
|
|
end
|
|
watchButton:Show();
|
|
BackpackTokenFrame.shouldShow = 1;
|
|
BackpackTokenFrame.numWatchedTokens = i;
|
|
watchButton.itemID = itemID;
|
|
else
|
|
_G["BackpackTokenFrameToken"..i]:Hide();
|
|
if ( i == 1 ) then
|
|
BackpackTokenFrame.shouldShow = nil;
|
|
end
|
|
_G["BackpackTokenFrameToken"..i].itemID = nil;
|
|
end
|
|
end
|
|
end
|
|
|
|
function GetNumWatchedTokens()
|
|
if ( not BackpackTokenFrame.numWatchedTokens ) then
|
|
-- No count yet so get it
|
|
BackpackTokenFrame_Update();
|
|
end
|
|
return BackpackTokenFrame.numWatchedTokens or 0;
|
|
end
|
|
|
|
function BackpackTokenFrame_IsShown()
|
|
return BackpackTokenFrame.shouldShow;
|
|
end
|
|
|
|
function ManageBackpackTokenFrame(backpack)
|
|
if ( not backpack ) then
|
|
backpack = GetBackpackFrame();
|
|
end
|
|
if ( not backpack ) then
|
|
-- If still no backpack then we don't show the frame
|
|
BackpackTokenFrame:Hide();
|
|
return;
|
|
end
|
|
if ( BackpackTokenFrame_IsShown() ) then
|
|
BackpackTokenFrame:SetParent(backpack);
|
|
BackpackTokenFrame:SetPoint("BOTTOMLEFT", backpack, "BOTTOMLEFT", 9, 0);
|
|
backpack:SetHeight(BACKPACK_HEIGHT+BACKPACK_TOKENFRAME_HEIGHT);
|
|
BackpackTokenFrame:Show();
|
|
else
|
|
backpack:SetHeight(BACKPACK_HEIGHT);
|
|
BackpackTokenFrame:Hide();
|
|
end
|
|
end
|
|
|
|
function TokenButton_OnClick(self)
|
|
if ( self.isHeader ) then
|
|
if ( self.isExpanded ) then
|
|
ExpandCurrencyList(self.index, 0);
|
|
else
|
|
ExpandCurrencyList(self.index, 1);
|
|
end
|
|
else
|
|
TokenFrame.selectedToken = self.name:GetText();
|
|
if ( IsModifiedClick("TOKENWATCHTOGGLE") ) then
|
|
TokenFrame.selectedID = self.index;
|
|
if ( self.isWatched ) then
|
|
SetCurrencyBackpack(TokenFrame.selectedID, 0);
|
|
self.isWatched = false;
|
|
else
|
|
-- Set an error message if trying to show too many quests
|
|
if ( GetNumWatchedTokens() >= MAX_WATCHED_TOKENS ) then
|
|
UIErrorsFrame:AddMessage(format(TOO_MANY_WATCHED_TOKENS, MAX_WATCHED_TOKENS), 1.0, 0.1, 0.1, 1.0);
|
|
return;
|
|
end
|
|
SetCurrencyBackpack(TokenFrame.selectedID, 1);
|
|
self.isWatched = true;
|
|
end
|
|
if ( TokenFrame.selectedID == self.index ) then
|
|
TokenFrame_UpdatePopup(self);
|
|
end
|
|
BackpackTokenFrame_Update();
|
|
ManageBackpackTokenFrame();
|
|
else
|
|
|
|
if ( TokenFramePopup:IsShown() ) then
|
|
if ( TokenFrame.selectedID == self.index ) then
|
|
TokenFramePopup:Hide();
|
|
else
|
|
TokenFramePopup:Show();
|
|
end
|
|
else
|
|
TokenFramePopup:Show();
|
|
end
|
|
TokenFrame.selectedID = self.index;
|
|
TokenFrame_UpdatePopup(self);
|
|
end
|
|
end
|
|
TokenFrame_Update();
|
|
TokenFramePopup_CloseIfHidden();
|
|
end
|
|
|
|
function TokenFrame_UpdatePopup(button)
|
|
TokenFramePopupInactiveCheckBox:SetChecked(button.isUnused);
|
|
TokenFramePopupBackpackCheckBox:SetChecked(button.isWatched);
|
|
end
|
|
|
|
function TokenButtonLinkButton_OnClick(self, button)
|
|
if ( IsModifiedClick("CHATLINK") ) then
|
|
ChatEdit_InsertLink(select(2, GetItemInfo(self:GetParent().itemID)));
|
|
end
|
|
end
|
|
|
|
function BackpackTokenButton_OnClick(self, button)
|
|
if ( IsModifiedClick("CHATLINK") ) then
|
|
ChatEdit_InsertLink(select(2, GetItemInfo(self.itemID)));
|
|
end
|
|
end
|