Files

2831 lines
99 KiB
Lua

FRIENDS_TO_DISPLAY = 10;
FRIENDS_FRAME_FRIEND_HEIGHT = 34;
IGNORES_TO_DISPLAY = 19;
FRIENDS_FRAME_IGNORE_HEIGHT = 16;
PENDING_INVITES_TO_DISPLAY = 4;
PENDING_BUTTON_MIN_HEIGHT = 92;
FRIENDS_FRIENDS_TO_DISPLAY = 11;
FRIENDS_FRAME_FRIENDS_FRIENDS_HEIGHT = 16;
MAX_INVITE_MESSAGE_LINES = 10;
MAX_INVITE_MESSAGE_HEIGHT = 0; -- automatically set in FriendsFramePendingScrollFrame:OnLoad
WHOS_TO_DISPLAY = 17;
FRIENDS_FRAME_WHO_HEIGHT = 16;
GUILDMEMBERS_TO_DISPLAY = 13;
FRIENDS_FRAME_GUILD_HEIGHT = 14;
MAX_WHOS_FROM_SERVER = 50;
MAX_GUILDCONTROL_OPTIONS = 12;
CURRENT_GUILD_MOTD = "";
GUILD_DETAIL_NORM_HEIGHT = 195
GUILD_DETAIL_OFFICER_HEIGHT = 255
MAX_GUILDBANK_TABS = 6;
MAX_GOLD_WITHDRAW = 1000;
GUILDEVENT_TRANSACTION_HEIGHT = 13;
MAX_EVENTS_SHOWN = 25;
MAX_GOLD_WITHDRAW_DIGITS = 9;
PENDING_GUILDBANK_PERMISSIONS = {};
FRIENDS_BUTTON_HEADER_HEIGHT = 16;
FRIENDS_BUTTON_NORMAL_HEIGHT = 34;
FRIENDS_BUTTON_LARGE_HEIGHT = 48;
FRIENDS_BUTTON_TYPE_HEADER = 1;
FRIENDS_BUTTON_TYPE_BNET = 2;
FRIENDS_BUTTON_TYPE_WOW = 3;
FRIENDS_TEXTURE_ONLINE = "Interface\\FriendsFrame\\StatusIcon-Online";
FRIENDS_TEXTURE_AFK = "Interface\\FriendsFrame\\StatusIcon-Away";
FRIENDS_TEXTURE_DND = "Interface\\FriendsFrame\\StatusIcon-DnD";
FRIENDS_TEXTURE_OFFLINE = "Interface\\FriendsFrame\\StatusIcon-Offline";
FRIENDS_TEXTURE_BROADCAST = "Interface\\FriendsFrame\\BroadcastIcon";
FRIENDS_BNET_NAME_COLOR = {r=0.510, g=0.773, b=1.0};
FRIENDS_BNET_BACKGROUND_COLOR = {r=0, g=0.694, b=0.941, a=0.05};
FRIENDS_WOW_NAME_COLOR = {r=0.996, g=0.882, b=0.361};
FRIENDS_WOW_BACKGROUND_COLOR = {r=1.0, g=0.824, b=0.0, a=0.05};
FRIENDS_GRAY_COLOR = {r=0.486, g=0.518, b=0.541};
FRIENDS_OFFLINE_BACKGROUND_COLOR = {r=0.588, g=0.588, b=0.588, a=0.05};
FRIENDS_PRESENCE_COLOR_CODE = "|cff7c848a";
FRIENDS_BNET_NAME_COLOR_CODE = "|cff82c5ff";
FRIENDS_BROADCAST_TIME_COLOR_CODE = "|cff4381a8"
FRIENDS_WOW_NAME_COLOR_CODE = "|cfffde05c";
FRIENDS_OTHER_NAME_COLOR_CODE = "|cff7b8489";
SQUELCH_TYPE_IGNORE = 1;
SQUELCH_TYPE_BLOCK_INVITE = 2;
SQUELCH_TYPE_MUTE = 3;
SQUELCH_TYPE_BLOCK_TOON = 4;
FRIENDS_FRIENDS_POTENTIAL = 1;
FRIENDS_FRIENDS_MUTUAL = 2;
FRIENDS_FRIENDS_ALL = 3;
BNET_CLIENT_WOW = "WoW";
BNET_CLIENT_SC2 = "S2";
FRIENDS_TOOLTIP_MAX_TOONS = 5;
FRIENDS_TOOLTIP_MAX_WIDTH = 200;
FRIENDS_TOOLTIP_MARGIN_WIDTH = 12;
local FriendButtons = { };
local BNetBroadcasts = { };
local totalScrollHeight = 0;
local numOnlineBroadcasts = 0;
local numOfflineBroadcasts = 0;
local PendingInvitesNew = { };
local playerRealmName;
local playerFactionGroup;
WHOFRAME_DROPDOWN_LIST = {
{name = ZONE, sortType = "zone"},
{name = GUILD, sortType = "guild"},
{name = RACE, sortType = "race"}
};
FRIENDSFRAME_SUBFRAMES = { "FriendsListFrame", "IgnoreListFrame", "PendingListFrame", "WhoFrame", "GuildFrame", "ChannelFrame", "RaidFrame" };
function FriendsFrame_ShowSubFrame(frameName)
for index, value in pairs(FRIENDSFRAME_SUBFRAMES) do
if ( value == frameName ) then
_G[value]:Show()
else
_G[value]:Hide();
end
end
end
function FriendsFrame_SummonButton_OnEvent (self, event, ...)
if ( event == "SPELL_UPDATE_COOLDOWN" and self:GetParent().id ) then
FriendsFrame_SummonButton_Update(self);
end
end
function FriendsFrame_SummonButton_OnShow (self)
FriendsFrame_SummonButton_Update(self);
end
function FriendsFrame_SummonButton_Update (self)
local id = self:GetParent().id;
if ( not id or (self:GetParent().buttonType ~= FRIENDS_BUTTON_TYPE_WOW) or not IsReferAFriendLinked(GetFriendInfo(id)) ) then
self:Hide();
return;
end
self:Show();
local start, duration = GetSummonFriendCooldown();
if ( duration > 0 ) then
self.duration = duration;
self.start = start;
else
self.duration = nil;
self.start = nil;
end
local enable = CanSummonFriend(GetFriendInfo(id));
local icon = _G[self:GetName().."Icon"];
local normalTexture = _G[self:GetName().."NormalTexture"];
if ( enable ) then
icon:SetVertexColor(1.0, 1.0, 1.0);
normalTexture:SetVertexColor(1.0, 1.0, 1.0);
else
icon:SetVertexColor(0.4, 0.4, 0.4);
normalTexture:SetVertexColor(1.0, 1.0, 1.0);
end
CooldownFrame_SetTimer(_G[self:GetName().."Cooldown"], start, duration, ((enable and 0) or 1));
end
function FriendsFrame_ClickSummonButton (self)
local name = GetFriendInfo(self:GetParent().id);
if ( CanSummonFriend(name) ) then
SummonFriend(name);
end
end
function FriendsFrame_ShowDropdown(name, connected, lineID, chatType, chatFrame, friendsList)
HideDropDownMenu(1);
if ( connected or friendsList ) then
if ( connected ) then
FriendsDropDown.initialize = FriendsFrameDropDown_Initialize;
else
FriendsDropDown.initialize = FriendsFrameOfflineDropDown_Initialize;
end
FriendsDropDown.displayMode = "MENU";
FriendsDropDown.name = name;
FriendsDropDown.friendsList = friendsList;
FriendsDropDown.lineID = lineID;
FriendsDropDown.chatType = chatType;
FriendsDropDown.chatTarget = name;
FriendsDropDown.chatFrame = chatFrame;
FriendsDropDown.presenceID = nil;
ToggleDropDownMenu(1, nil, FriendsDropDown, "cursor");
end
end
function FriendsFrame_ShowBNDropdown(name, connected, lineID, chatType, chatFrame, friendsList, presenceID)
if ( connected or friendsList ) then
if ( connected ) then
FriendsDropDown.initialize = FriendsFrameBNDropDown_Initialize;
else
FriendsDropDown.initialize = FriendsFrameBNOfflineDropDown_Initialize;
end
FriendsDropDown.displayMode = "MENU";
FriendsDropDown.name = name;
FriendsDropDown.friendsList = friendsList;
FriendsDropDown.lineID = lineID;
FriendsDropDown.chatType = chatType;
FriendsDropDown.chatTarget = name;
FriendsDropDown.chatFrame = chatFrame;
FriendsDropDown.presenceID = presenceID;
ToggleDropDownMenu(1, nil, FriendsDropDown, "cursor");
end
end
function FriendsFrameDropDown_Initialize()
UnitPopup_ShowMenu(UIDROPDOWNMENU_OPEN_MENU, "FRIEND", nil, FriendsDropDown.name);
end
function FriendsFrameOfflineDropDown_Initialize()
UnitPopup_ShowMenu(UIDROPDOWNMENU_OPEN_MENU, "FRIEND_OFFLINE", nil, FriendsDropDown.name);
end
function FriendsFrameBNDropDown_Initialize()
UnitPopup_ShowMenu(UIDROPDOWNMENU_OPEN_MENU, "BN_FRIEND", nil, FriendsDropDown.name);
end
function FriendsFrameBNOfflineDropDown_Initialize()
UnitPopup_ShowMenu(UIDROPDOWNMENU_OPEN_MENU, "BN_FRIEND_OFFLINE", nil, FriendsDropDown.name);
end
function FriendsFrame_OnLoad(self)
PanelTemplates_SetNumTabs(self, 5);
self.selectedTab = 1;
PanelTemplates_UpdateTabs(self);
self:RegisterEvent("FRIENDLIST_SHOW");
self:RegisterEvent("FRIENDLIST_UPDATE");
self:RegisterEvent("IGNORELIST_UPDATE");
self:RegisterEvent("MUTELIST_UPDATE");
self:RegisterEvent("WHO_LIST_UPDATE");
self:RegisterEvent("GUILD_ROSTER_UPDATE");
self:RegisterEvent("PLAYER_GUILD_UPDATE");
self:RegisterEvent("GUILD_MOTD");
self:RegisterEvent("VOICE_CHAT_ENABLED_UPDATE");
self:RegisterEvent("PARTY_MEMBERS_CHANGED");
self:RegisterEvent("PLAYER_FLAGS_CHANGED");
self:RegisterEvent("BN_FRIEND_LIST_SIZE_CHANGED");
self:RegisterEvent("BN_FRIEND_INFO_CHANGED");
self:RegisterEvent("BN_FRIEND_INVITE_LIST_INITIALIZED");
self:RegisterEvent("BN_FRIEND_INVITE_ADDED");
self:RegisterEvent("BN_FRIEND_INVITE_REMOVED");
self:RegisterEvent("BN_CUSTOM_MESSAGE_CHANGED");
self:RegisterEvent("BN_CUSTOM_MESSAGE_LOADED");
self:RegisterEvent("BN_SELF_ONLINE");
self:RegisterEvent("BN_BLOCK_LIST_UPDATED");
self:RegisterEvent("PLAYER_ENTERING_WORLD");
self:RegisterEvent("BN_CONNECTED");
self:RegisterEvent("BN_DISCONNECTED");
self.playersInBotRank = 0;
self.playerStatusFrame = 1;
self.selectedFriend = 1;
self.selectedIgnore = 1;
self.guildStatus = 0;
GuildFrame.notesToggle = 1;
GuildFrame.selectedGuildMember = 0;
SetGuildRosterSelection(0);
CURRENT_GUILD_MOTD = GetGuildRosterMOTD();
GuildFrameNotesText:SetText(CURRENT_GUILD_MOTD);
GuildMemberDetailRankText:SetPoint("RIGHT", GuildFramePromoteButton, "LEFT");
-- friends list
DynamicScrollFrame_CreateButtons(FriendsFrameFriendsScrollFrame, "FriendsFrameButtonTemplate", FRIENDS_BUTTON_HEADER_HEIGHT, FriendsFrame_SetButton, FriendsFrame_GetTopButton);
FriendsFrameOfflineHeader:SetParent(FriendsFrameFriendsScrollFrameScrollChild);
FriendsFrameBroadcastInputClearButton.icon:SetVertexColor(FRIENDS_BNET_NAME_COLOR.r, FRIENDS_BNET_NAME_COLOR.g, FRIENDS_BNET_NAME_COLOR.b);
if ( not BNFeaturesEnabled() ) then
FriendsTabHeaderTab3:Hide();
FriendsFrameBroadcastInput:Hide();
FriendsFrameBattlenetStatus:Hide();
FriendsFrameStatusDropDown:Show();
end
end
function FriendsFrame_OnShow()
VoiceChat_Toggle();
FriendsList_Update();
FriendsFrame_Update();
UpdateMicroButtons();
PlaySound("igCharacterInfoTab");
GuildFrame.selectedGuildMember = 0;
SetGuildRosterSelection(0);
InGuildCheck();
end
function FriendsFrame_Update()
if ( FriendsFrame.selectedTab == 1 ) then
FriendsTabHeader:Show();
if ( FriendsTabHeader.selectedTab == 1 ) then
ShowFriends();
FriendsFrameTopLeft:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-TopLeft-bnet");
FriendsFrameTopRight:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-TopRight-bnet");
FriendsFrameBottomLeft:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrameMute-BotLeft-bnet");
FriendsFrameBottomRight:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrameMute-BotRight-bnet");
FriendsFrameTitleText:SetText(FRIENDS_LIST);
FriendsFrame_ShowSubFrame("FriendsListFrame");
elseif ( FriendsTabHeader.selectedTab == 3 ) then
FriendsFrameTopLeft:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-TopLeft-bnet");
FriendsFrameTopRight:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-TopRight-bnet");
FriendsFrameBottomRight:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-Pending-BotRight");
FriendsFrameBottomLeft:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-Pending-BotLeft");
FriendsFrameTitleText:SetText(PENDING_INVITE_LIST);
FriendsFrame_ShowSubFrame("PendingListFrame");
else
FriendsFrameTopLeft:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-TopLeft-bnet");
FriendsFrameTopRight:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrame-TopRight-bnet");
if ( IsVoiceChatEnabled() ) then
FriendsFrameMutePlayerButton:Show();
FriendsFrameBottomLeft:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrameThree-BotLeft-bnet");
FriendsFrameBottomRight:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrameThree-BotRight-bnet");
FriendsFrameIgnorePlayerButton:SetWidth(110);
FriendsFrameUnsquelchButton:SetWidth(111);
else
FriendsFrameMutePlayerButton:Hide();
FriendsFrameBottomLeft:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrameMute-BotLeft-bnet");
FriendsFrameBottomRight:SetTexture("Interface\\FriendsFrame\\UI-FriendsFrameMute-BotRight-bnet");
FriendsFrameIgnorePlayerButton:SetWidth(131);
FriendsFrameUnsquelchButton:SetWidth(134);
end
FriendsFrameTitleText:SetText(IGNORE_LIST);
FriendsFrame_ShowSubFrame("IgnoreListFrame");
IgnoreList_Update();
end
else
FriendsTabHeader:Hide();
if ( FriendsFrame.selectedTab == 2 ) then
FriendsFrameTopLeft:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-TopLeft");
FriendsFrameTopRight:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-TopRight");
FriendsFrameBottomLeft:SetTexture("Interface\\FriendsFrame\\WhoFrame-BotLeft");
FriendsFrameBottomRight:SetTexture("Interface\\FriendsFrame\\WhoFrame-BotRight");
FriendsFrameTitleText:SetText(WHO_LIST);
FriendsFrame_ShowSubFrame("WhoFrame");
WhoList_Update();
elseif ( FriendsFrame.selectedTab == 3 ) then
FriendsFrameTopLeft:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-TopLeft");
FriendsFrameTopRight:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-TopRight");
FriendsFrameBottomLeft:SetTexture("Interface\\FriendsFrame\\GuildFrame-BotLeft");
FriendsFrameBottomRight:SetTexture("Interface\\FriendsFrame\\GuildFrame-BotRight");
local guildName, title, rank = GetGuildInfo("player");
if ( guildName ) then
FriendsFrameTitleText:SetFormattedText(GUILD_TITLE_TEMPLATE, title, guildName);
else
FriendsFrameTitleText:SetText("");
end
GuildStatus_Update();
FriendsFrame_ShowSubFrame("GuildFrame");
elseif ( FriendsFrame.selectedTab == 4 ) then
FriendsFrameTopLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopLeft");
FriendsFrameTopRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopRight");
FriendsFrameBottomLeft:SetTexture("Interface\\FriendsFrame\\UI-ChannelFrame-BotLeft");
FriendsFrameBottomRight:SetTexture("Interface\\FriendsFrame\\UI-ChannelFrame-BotRight");
FriendsFrameTitleText:SetText(CHAT_CHANNELS);
FriendsFrame_ShowSubFrame("ChannelFrame");
elseif ( FriendsFrame.selectedTab == 5 ) then
FriendsFrameTopLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopLeft");
FriendsFrameTopRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-TopRight");
FriendsFrameBottomLeft:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-BottomLeft");
FriendsFrameBottomRight:SetTexture("Interface\\PaperDollInfoFrame\\UI-Character-General-BottomRight");
FriendsFrameTitleText:SetText(RAID);
FriendsFrame_ShowSubFrame("RaidFrame");
end
end
end
function FriendsFrame_OnHide()
UpdateMicroButtons();
PlaySound("igMainMenuClose");
SetGuildRosterSelection(0);
GuildFrame.selectedGuildMember = 0;
GuildFramePopup_HideAll();
RaidInfoFrame:Hide();
for index, value in pairs(FRIENDSFRAME_SUBFRAMES) do
_G[value]:Hide();
end
end
function FriendsList_Update()
local numBNetTotal, numBNetOnline = BNGetNumFriends();
local numBNetOffline = numBNetTotal - numBNetOnline;
local numWoWTotal, numWoWOnline = GetNumFriends();
local numWoWOffline = numWoWTotal - numWoWOnline;
FriendsMicroButtonCount:SetText(numBNetOnline + numWoWOnline);
if ( not FriendsListFrame:IsShown() ) then
return;
end
local buttonCount = numBNetTotal + numWoWTotal;
local haveHeader;
totalScrollHeight = 0;
if ( numBNetOnline > 0 or numWoWOnline > 0 ) then
totalScrollHeight = totalScrollHeight + (numBNetOnline + numWoWOnline) * FRIENDS_BUTTON_NORMAL_HEIGHT + numOnlineBroadcasts * (FRIENDS_BUTTON_LARGE_HEIGHT - FRIENDS_BUTTON_NORMAL_HEIGHT);
end
if ( numBNetOffline > 0 or numWoWOffline > 0 ) then
totalScrollHeight = totalScrollHeight + (numBNetOffline + numWoWOffline) * FRIENDS_BUTTON_NORMAL_HEIGHT + numOfflineBroadcasts * (FRIENDS_BUTTON_LARGE_HEIGHT - FRIENDS_BUTTON_NORMAL_HEIGHT);
-- use a header if there are online and offline friends
if ( numBNetOnline > 0 or numWoWOnline > 0 ) then
haveHeader = true;
buttonCount = buttonCount + 1;
totalScrollHeight = totalScrollHeight + FRIENDS_BUTTON_HEADER_HEIGHT;
end
end
if ( buttonCount > #FriendButtons ) then
for i = #FriendButtons + 1, buttonCount do
FriendButtons[i] = { };
end
end
local index = 0;
-- online Battlenet friends
for i = 1, numBNetOnline do
index = index + 1;
FriendButtons[index].buttonType = FRIENDS_BUTTON_TYPE_BNET;
FriendButtons[index].id = i;
end
-- online WoW friends
for i = 1, numWoWOnline do
index = index + 1;
FriendButtons[index].buttonType = FRIENDS_BUTTON_TYPE_WOW;
FriendButtons[index].id = i;
end
-- offline header
if ( haveHeader ) then
index = index + 1;
FriendButtons[index].buttonType = FRIENDS_BUTTON_TYPE_HEADER;
end
-- offline Battlenet friends
for i = 1, numBNetOffline do
index = index + 1;
FriendButtons[index].buttonType = FRIENDS_BUTTON_TYPE_BNET;
FriendButtons[index].id = i + numBNetOnline;
end
-- offline WoW friends
for i = 1, numWoWOffline do
index = index + 1;
FriendButtons[index].buttonType = FRIENDS_BUTTON_TYPE_WOW;
FriendButtons[index].id = i + numWoWOnline;
end
-- selection
local selectedFriend = 0;
-- check that we have at least 1 friend
if ( index > 0 ) then
-- get friend
if ( FriendsFrame.selectedFriendType == FRIENDS_BUTTON_TYPE_WOW ) then
selectedFriend = GetSelectedFriend();
elseif ( FriendsFrame.selectedFriendType == FRIENDS_BUTTON_TYPE_BNET ) then
selectedFriend = BNGetSelectedFriend();
end
-- set to first in list if no friend
if ( selectedFriend == 0 ) then
FriendsFrame_SelectFriend(FriendButtons[1].buttonType, 1);
selectedFriend = 1;
end
-- check if friend is online
local isOnline;
if ( FriendsFrame.selectedFriendType == FRIENDS_BUTTON_TYPE_WOW ) then
local name, level, class, area;
name, level, class, area, isOnline = GetFriendInfo(selectedFriend);
elseif ( FriendsFrame.selectedFriendType == FRIENDS_BUTTON_TYPE_BNET ) then
local presenceID, givenName, surname, toonName, toonID, client;
presenceID, givenName, surname, toonName, toonID, client, isOnline = BNGetFriendInfo(selectedFriend);
if ( not givenName or not surname ) then
isOnline = false;
end
end
if ( isOnline ) then
FriendsFrameSendMessageButton:Enable();
else
FriendsFrameSendMessageButton:Disable();
end
else
FriendsFrameSendMessageButton:Disable();
end
FriendsFrame.selectedFriend = selectedFriend;
DynamicScrollFrame_Update(FriendsFrameFriendsScrollFrame);
end
function IgnoreList_Update()
local button;
local numIgnores = GetNumIgnores();
local numBlocks = BNGetNumBlocked();
local numToonBlocks = BNGetNumBlockedToons();
local numMutes = 0;
if ( IsVoiceChatEnabled() ) then
numMutes = GetNumMutes();
end
-- Headers stuff
local ignoredHeader, blockedHeader, mutedHeader, blockedToonHeader;
if ( numIgnores > 0 ) then
ignoredHeader = 1;
else
ignoredHeader = 0;
end
if ( numBlocks > 0 ) then
blockedHeader = 1;
else
blockedHeader = 0;
end
if ( numToonBlocks > 0 ) then
blockedToonHeader = 1;
else
blockedToonHeader = 0;
end
if ( numMutes > 0 ) then
mutedHeader = 1;
else
mutedHeader = 0;
end
local lastIgnoredIndex = numIgnores + ignoredHeader;
local lastBlockedIndex = lastIgnoredIndex + numBlocks + blockedHeader;
local lastBlockedToonIndex = lastBlockedIndex + numToonBlocks + blockedToonHeader;
local lastMutedIndex = lastBlockedToonIndex + numMutes + mutedHeader;
local numEntries = lastMutedIndex;
FriendsFrameIgnoredHeader:Hide();
FriendsFrameBlockedInviteHeader:Hide();
FriendsFrameBlockedToonHeader:Hide();
FriendsFrameMutedHeader:Hide();
-- selection stuff
local selectedSquelchType = FriendsFrame.selectedSquelchType;
local selectedSquelchIndex = 0 ;
if ( selectedSquelchType == SQUELCH_TYPE_IGNORE ) then
selectedSquelchIndex = GetSelectedIgnore();
elseif ( selectedSquelchType == SQUELCH_TYPE_BLOCK_INVITE ) then
selectedSquelchIndex = BNGetSelectedBlock();
elseif ( selectedSquelchType == SQUELCH_TYPE_BLOCK_TOON ) then
selectedSquelchIndex = BNGetSelectedToonBlock();
elseif ( selectedSquelchType == SQUELCH_TYPE_MUTE ) then
selectedSquelchIndex = GetSelectedMute();
end
if ( selectedSquelchIndex == 0 ) then
if ( numIgnores > 0 ) then
FriendsFrame_SelectSquelched(SQUELCH_TYPE_IGNORE, 1);
selectedSquelchType = SQUELCH_TYPE_IGNORE;
selectedSquelchIndex = 1;
elseif ( numBlocks > 0 ) then
FriendsFrame_SelectSquelched(SQUELCH_TYPE_BLOCK_INVITE, 1);
selectedSquelchType = SQUELCH_TYPE_BLOCK_INVITE;
selectedSquelchIndex = 1;
elseif ( numToonBlocks > 0 ) then
FriendsFrame_SelectSquelched(SQUELCH_TYPE_BLOCK_TOON, 1);
selectedSquelchType = SQUELCH_TYPE_BLOCK_TOON;
selectedSquelchIndex = 1;
elseif ( numMutes > 0 ) then
FriendsFrame_SelectSquelched(SQUELCH_TYPE_MUTE, 1);
selectedSquelchType = SQUELCH_TYPE_MUTE;
selectedSquelchIndex = 1;
end
end
if ( selectedSquelchIndex > 0 ) then
FriendsFrameUnsquelchButton:Enable();
else
FriendsFrameUnsquelchButton:Disable();
end
local scrollOffset = FauxScrollFrame_GetOffset(FriendsFrameIgnoreScrollFrame);
local squelchedIndex;
for i = 1, IGNORES_TO_DISPLAY, 1 do
squelchedIndex = i + scrollOffset;
button = _G["FriendsFrameIgnoreButton"..i];
button.type = nil;
if ( squelchedIndex == ignoredHeader ) then
-- ignored header
IgnoreList_SetHeader(FriendsFrameIgnoredHeader, button);
elseif ( squelchedIndex <= lastIgnoredIndex ) then
-- ignored
button.index = squelchedIndex - ignoredHeader;
button.name:SetText(GetIgnoreName(button.index));
button.type = SQUELCH_TYPE_IGNORE;
elseif ( blockedHeader == 1 and squelchedIndex == lastIgnoredIndex + 1 ) then
-- blocked header
IgnoreList_SetHeader(FriendsFrameBlockedInviteHeader, button);
elseif ( squelchedIndex <= lastBlockedIndex ) then
-- blocked
button.index = squelchedIndex - lastIgnoredIndex - blockedHeader;
local blockID, blockName = BNGetBlockedInfo(button.index);
button.name:SetText(blockName);
button.type = SQUELCH_TYPE_BLOCK_INVITE;
elseif ( blockedToonHeader == 1 and squelchedIndex == lastBlockedIndex + 1 ) then
-- blocked TOON header
IgnoreList_SetHeader(FriendsFrameBlockedToonHeader, button);
elseif ( squelchedIndex <= lastBlockedToonIndex ) then
-- blocked TOON
button.index = squelchedIndex - lastBlockedIndex - blockedToonHeader;
local blockID, blockName = BNGetBlockedToonInfo(button.index);
button.name:SetText(blockName);
button.type = SQUELCH_TYPE_BLOCK_TOON;
elseif ( mutedHeader == 1 and squelchedIndex == lastBlockedToonIndex + 1 ) then
-- muted header
IgnoreList_SetHeader(FriendsFrameMutedHeader, button);
elseif ( squelchedIndex <= lastMutedIndex ) then
-- muted
button.index = squelchedIndex - lastBlockedToonIndex - mutedHeader;
button.name:SetText(GetMuteName(button.index));
button.type = SQUELCH_TYPE_MUTE;
end
if ( selectedSquelchType == button.type and selectedSquelchIndex == button.index ) then
button:LockHighlight();
else
button:UnlockHighlight();
end
if ( squelchedIndex > numEntries ) then
button:Hide();
else
button:Show();
end
end
-- ScrollFrame stuff
FauxScrollFrame_Update(FriendsFrameIgnoreScrollFrame, numEntries, IGNORES_TO_DISPLAY, FRIENDS_FRAME_IGNORE_HEIGHT );
end
function IgnoreList_SetHeader(header, parent)
parent.name:SetText("");
header:SetParent(parent);
header:SetPoint("TOPLEFT", parent, 0, 0);
header:Show();
end
function PendingListFrame_OnShow(self)
PendingList_Update();
end
function PendingList_Update(newInvite)
local numPending = BNGetNumFriendInvites();
PendingList_UpdateTab();
if ( numPending > 0 ) then
if ( not GetCVarBool("pendingInviteInfoShown") ) then
PendingListInfoFrame:SetFrameLevel(FriendsFramePendingButton1:GetFrameLevel() + 1);
PendingListInfoFrame:Show();
end
local scrollFrame = FriendsFramePendingScrollFrame;
local buttonHeight, message, _;
local heightLeft = scrollFrame.scrollHeight;
local scrollBar = scrollFrame.scrollBar;
FriendsFramePendingButton1.message:SetHeight(0);
for i = numPending, 1, -1 do
buttonHeight = PENDING_BUTTON_MIN_HEIGHT;
_, _, _, message = BNGetFriendInviteInfo(i);
if ( message and message ~= "" ) then
FriendsFramePendingButton1.message:SetText(message);
local textHeight = min(FriendsFramePendingButton1.message:GetHeight(), MAX_INVITE_MESSAGE_HEIGHT);
buttonHeight = buttonHeight + textHeight;
end
heightLeft = heightLeft - buttonHeight;
if ( heightLeft <= 0 ) then
-- one less notch on the scrollbar if it's a perfect fit
if ( heightLeft == 0 ) then
i = i - 1;
end
local value = scrollBar:GetValue();
scrollFrame.extraHeight = -heightLeft;
scrollFrame.max = i;
scrollBar:Show();
scrollBar:SetMinMaxValues(0, i);
if ( newInvite ) then
-- adjust the scroll if the user is looking at the frame, otherwise jump it to the top
if ( PendingListFrame:IsShown() ) then
scrollBar:SetValue(value + 1);
else
scrollBar:SetValue(0)
end
elseif ( value <= i ) then
scrollBar:SetValue(value);
PendingList_Scroll(value);
end
return;
end
end
-- not enough buttons to have a scrollbar
scrollFrame.extraHeight = 0;
scrollFrame.max = numPending;
scrollBar:Hide();
scrollBar:SetValue(0);
end
PendingList_Scroll(0);
end
function PendingList_Scroll(offset)
local button, buttonHeight;
local name, surname, message;
local heightUsed = 0;
local scrollFrame = FriendsFramePendingScrollFrame;
local scrollHeight = scrollFrame.scrollHeight;
local max = scrollFrame.max;
local numPending = BNGetNumFriendInvites();
offset = offset or scrollFrame.scrollBar:GetValue();
-- if scrolled to the bottom and there would be a button partially showing, start with it and "scroll" it up
if ( offset == max and scrollFrame.extraHeight > 0 ) then
offset = offset - 1;
_G["FriendsFramePendingButton1"]:SetPoint("TOPLEFT", 0, scrollFrame.extraHeight);
heightUsed = heightUsed - scrollFrame.extraHeight;
else
_G["FriendsFramePendingButton1"]:SetPoint("TOPLEFT", 0, 0);
end
for i = 1, PENDING_INVITES_TO_DISPLAY do
button = _G["FriendsFramePendingButton"..i];
offset = offset + 1;
if ( offset > numPending or heightUsed > scrollHeight ) then
button:Hide();
else
inviteID, givenName, surname, message, timeSent, days = BNGetFriendInviteInfo(offset);
button.index = offset;
button.inviteID = inviteID;
buttonHeight = PENDING_BUTTON_MIN_HEIGHT;
if ( givenName and surname ) then
button.name:SetFormattedText(BATTLENET_NAME_FORMAT, givenName, surname);
else
button.name:SetText(UNKNOWN);
end
if ( message ) then
button.message:SetHeight(0);
button.message:SetText(message);
local textHeight = button.message:GetHeight();
if ( textHeight > MAX_INVITE_MESSAGE_HEIGHT ) then
textHeight = MAX_INVITE_MESSAGE_HEIGHT;
button.message:SetHeight(textHeight);
end
buttonHeight = buttonHeight + textHeight;
else
button.message:SetText("");
button.message:SetHeight(0);
end
if ( timeSent and timeSent ~= 0 ) then
button.sent:SetFormattedText(BNET_INVITE_SENT_TIME, FriendsFrame_GetLastOnline(timeSent));
else
button.sent:SetText("");
end
button:SetHeight(buttonHeight);
heightUsed = heightUsed + buttonHeight;
if ( PendingInvitesNew["all"] or PendingInvitesNew[inviteID] ) then
button.highlight:Show();
else
button.highlight:Hide();
end
button:Show();
end
end
end
function FriendsFramePendingScrollFrame_AdjustScroll(delta)
local scrollBar = FriendsFramePendingScrollFrame.scrollBar;
if ( scrollBar:IsShown() ) then
scrollBar:SetValue(scrollBar:GetValue() + delta);
end
end
function PendingListFrame_OnHide()
table.wipe(PendingInvitesNew);
PendingList_UpdateTab();
end
function PendingListFrame_BlockCommunication(self)
local inviteID, name, surname, message = BNGetFriendInviteInfo(self:GetParent().index);
local dialog = StaticPopup_Show("CONFIRM_BLOCK_INVITES", string.format(BATTLENET_NAME_FORMAT, name, surname));
if ( dialog ) then
dialog.data = inviteID;
end
end
function PendingListFrame_ReportSpam(self)
local inviteID, name, surname, message = BNGetFriendInviteInfo(self:GetParent().index);
local dialog = StaticPopup_Show("CONFIRM_REPORT_SPAM_INVITE", string.format(BATTLENET_NAME_FORMAT, name, surname));
if ( dialog ) then
dialog.data = inviteID;
end
end
function PendingListFrame_ReportPlayer(self)
ToggleDropDownMenu(1, self:GetParent().index, PendingListFrameDropDown, "cursor", 3, -3)
end
function PendingListFrameDropDown_OnLoad(self)
UIDropDownMenu_Initialize(self, PendingListFrameDropDown_Initialize, "MENU");
end
function PendingListFrameDropDown_Initialize(self)
UnitPopup_ShowMenu(self, "BN_REPORT", nil, BNET_REPORT);
end
function PendingList_UpdateTab()
local numPending = BNGetNumFriendInvites();
if ( numPending > 0 ) then
FriendsTabHeaderTab3:SetText(PENDING_INVITE.." ("..numPending..")");
if ( next(PendingInvitesNew) and FriendsTabHeader.selectedTab ~= 3 and not FriendsTabHeaderTab3:IsMouseOver() ) then
FriendsTabHeaderInviteAlert:Show();
else
FriendsTabHeaderInviteAlert:Hide();
end
else
FriendsTabHeaderTab3:SetText(PENDING_INVITE);
FriendsTabHeaderInviteAlert:Hide();
end
PanelTemplates_TabResize(FriendsTabHeaderTab3, 0);
end
function WhoList_Update()
local numWhos, totalCount = GetNumWhoResults();
local name, guild, level, race, class, zone;
local button, buttonText, classTextColor, classFileName;
local columnTable;
local whoOffset = FauxScrollFrame_GetOffset(WhoListScrollFrame);
local whoIndex;
local showScrollBar = nil;
if ( numWhos > WHOS_TO_DISPLAY ) then
showScrollBar = 1;
end
local displayedText = "";
if ( totalCount > MAX_WHOS_FROM_SERVER ) then
displayedText = format(WHO_FRAME_SHOWN_TEMPLATE, MAX_WHOS_FROM_SERVER);
end
WhoFrameTotals:SetText(format(WHO_FRAME_TOTAL_TEMPLATE, totalCount).." "..displayedText);
for i=1, WHOS_TO_DISPLAY, 1 do
whoIndex = whoOffset + i;
button = _G["WhoFrameButton"..i];
button.whoIndex = whoIndex;
name, guild, level, race, class, zone, classFileName = GetWhoInfo(whoIndex);
columnTable = { zone, guild, race };
if ( classFileName ) then
classTextColor = RAID_CLASS_COLORS[classFileName];
else
classTextColor = HIGHLIGHT_FONT_COLOR;
end
buttonText = _G["WhoFrameButton"..i.."Name"];
buttonText:SetText(name);
buttonText = _G["WhoFrameButton"..i.."Level"];
buttonText:SetText(level);
buttonText = _G["WhoFrameButton"..i.."Class"];
buttonText:SetText(class);
buttonText:SetTextColor(classTextColor.r, classTextColor.g, classTextColor.b);
local variableText = _G["WhoFrameButton"..i.."Variable"];
variableText:SetText(columnTable[UIDropDownMenu_GetSelectedID(WhoFrameDropDown)]);
-- If need scrollbar resize columns
if ( showScrollBar ) then
variableText:SetWidth(95);
else
variableText:SetWidth(110);
end
-- Highlight the correct who
if ( WhoFrame.selectedWho == whoIndex ) then
button:LockHighlight();
else
button:UnlockHighlight();
end
if ( whoIndex > numWhos ) then
button:Hide();
else
button:Show();
end
end
if ( not WhoFrame.selectedWho ) then
WhoFrameGroupInviteButton:Disable();
WhoFrameAddFriendButton:Disable();
else
WhoFrameGroupInviteButton:Enable();
WhoFrameAddFriendButton:Enable();
WhoFrame.selectedName = GetWhoInfo(WhoFrame.selectedWho);
end
-- If need scrollbar resize columns
if ( showScrollBar ) then
WhoFrameColumn_SetWidth(WhoFrameColumnHeader2, 105);
UIDropDownMenu_SetWidth(WhoFrameDropDown, 80);
else
WhoFrameColumn_SetWidth(WhoFrameColumnHeader2, 120);
UIDropDownMenu_SetWidth(WhoFrameDropDown, 95);
end
-- ScrollFrame update
FauxScrollFrame_Update(WhoListScrollFrame, numWhos, WHOS_TO_DISPLAY, FRIENDS_FRAME_WHO_HEIGHT );
PanelTemplates_SetTab(FriendsFrame, 2);
ShowUIPanel(FriendsFrame);
end
function GuildStatus_Update()
-- Set the tab
PanelTemplates_SetTab(FriendsFrame, 3);
-- Show the frame
ShowUIPanel(FriendsFrame);
-- Number of players in the lowest rank
FriendsFrame.playersInBotRank = 0;
local numGuildMembers = GetNumGuildMembers();
local name, rank, rankIndex, level, class, zone, note, officernote, online, status, classFileName;
local guildName, guildRankName, guildRankIndex = GetGuildInfo("player");
local maxRankIndex = GuildControlGetNumRanks() - 1;
local button, buttonText, classTextColor;
local onlinecount = 0;
local guildIndex;
-- Get selected guild member info
name, rank, rankIndex, level, class, zone, note, officernote, online = GetGuildRosterInfo(GetGuildRosterSelection());
GuildFrame.selectedName = name;
-- If there's a selected guildmember
if ( GetGuildRosterSelection() > 0 ) then
-- Update the guild member details frame
GuildMemberDetailName:SetText(GuildFrame.selectedName);
GuildMemberDetailLevel:SetFormattedText(FRIENDS_LEVEL_TEMPLATE, level, class);
GuildMemberDetailZoneText:SetText(zone);
GuildMemberDetailRankText:SetText(rank);
if ( online ) then
GuildMemberDetailOnlineText:SetText(GUILD_ONLINE_LABEL);
else
GuildMemberDetailOnlineText:SetText(GuildFrame_GetLastOnline(GetGuildRosterSelection()));
end
-- Update public note
if ( CanEditPublicNote() ) then
PersonalNoteText:SetTextColor(1.0, 1.0, 1.0);
if ( (not note) or (note == "") ) then
note = GUILD_NOTE_EDITLABEL;
end
else
PersonalNoteText:SetTextColor(0.65, 0.65, 0.65);
end
GuildMemberNoteBackground:EnableMouse(CanEditPublicNote());
PersonalNoteText:SetText(note);
-- Update officer note
if ( CanViewOfficerNote() ) then
if ( CanEditOfficerNote() ) then
if ( (not officernote) or (officernote == "") ) then
officernote = GUILD_OFFICERNOTE_EDITLABEL;
end
OfficerNoteText:SetTextColor(1.0, 1.0, 1.0);
else
OfficerNoteText:SetTextColor(0.65, 0.65, 0.65);
end
GuildMemberOfficerNoteBackground:EnableMouse(CanEditOfficerNote());
OfficerNoteText:SetText(officernote);
-- Resize detail frame
GuildMemberDetailOfficerNoteLabel:Show();
GuildMemberOfficerNoteBackground:Show();
GuildMemberDetailFrame:SetHeight(GUILD_DETAIL_OFFICER_HEIGHT);
else
GuildMemberDetailOfficerNoteLabel:Hide();
GuildMemberOfficerNoteBackground:Hide();
GuildMemberDetailFrame:SetHeight(GUILD_DETAIL_NORM_HEIGHT);
end
-- Manage guild member related buttons
if ( CanGuildPromote() and ( rankIndex > 1 ) and ( rankIndex > (guildRankIndex + 1) ) ) then
GuildFramePromoteButton:Enable();
else
GuildFramePromoteButton:Disable();
end
if ( CanGuildDemote() and ( rankIndex >= 1 ) and ( rankIndex > guildRankIndex ) and ( rankIndex ~= maxRankIndex ) ) then
GuildFrameDemoteButton:Enable();
else
GuildFrameDemoteButton:Disable();
end
-- Hide promote/demote buttons if both disabled
if ( GuildFrameDemoteButton:IsEnabled() == 0 and GuildFramePromoteButton:IsEnabled() == 0 ) then
GuildFramePromoteButton:Hide();
GuildFrameDemoteButton:Hide();
else
GuildFramePromoteButton:Show();
GuildFrameDemoteButton:Show();
end
if ( CanGuildRemove() and ( rankIndex >= 1 ) and ( rankIndex > guildRankIndex ) ) then
GuildMemberRemoveButton:Enable();
else
GuildMemberRemoveButton:Disable();
end
if ( (UnitName("player") == name) or (not online) ) then
GuildMemberGroupInviteButton:Disable();
else
GuildMemberGroupInviteButton:Enable();
end
GuildFrame.selectedName = GetGuildRosterInfo(GetGuildRosterSelection());
else
GuildMemberDetailFrame:Hide();
end
-- Message of the day stuff
local guildMOTD = GetGuildRosterMOTD();
if ( CanEditMOTD() ) then
if ( (not guildMOTD) or (guildMOTD == "") ) then
guildMOTD = GUILD_MOTD_EDITLABEL;
end
GuildFrameNotesText:SetTextColor(1.0, 1.0, 1.0);
GuildMOTDEditButton:Enable();
else
GuildFrameNotesText:SetTextColor(0.65, 0.65, 0.65);
GuildMOTDEditButton:Disable();
end
GuildFrameNotesText:SetText(CURRENT_GUILD_MOTD);
-- Scrollbar stuff
local showScrollBar = nil;
if ( numGuildMembers > GUILDMEMBERS_TO_DISPLAY ) then
showScrollBar = 1;
end
-- Get number of online members
for i=1, numGuildMembers, 1 do
name, rank, rankIndex, level, class, zone, note, officernote, online = GetGuildRosterInfo(i);
if ( online ) then
onlinecount = onlinecount + 1;
end
if ( rankIndex == maxRankIndex ) then
FriendsFrame.playersInBotRank = FriendsFrame.playersInBotRank + 1;
end
end
GuildFrameTotals:SetFormattedText(GUILD_TOTAL, numGuildMembers);
GuildFrameOnlineTotals:SetFormattedText(GUILD_TOTALONLINE, onlinecount);
-- Update global guild frame buttons
if ( IsGuildLeader() ) then
GuildFrameControlButton:Enable();
else
GuildFrameControlButton:Disable();
end
if ( CanGuildInvite() ) then
GuildFrameAddMemberButton:Enable();
else
GuildFrameAddMemberButton:Disable();
end
if ( FriendsFrame.playerStatusFrame ) then
-- Player specific info
local guildOffset = FauxScrollFrame_GetOffset(GuildListScrollFrame);
for i=1, GUILDMEMBERS_TO_DISPLAY, 1 do
guildIndex = guildOffset + i;
button = _G["GuildFrameButton"..i];
button.guildIndex = guildIndex;
name, rank, rankIndex, level, class, zone, note, officernote, online, status, classFileName = GetGuildRosterInfo(guildIndex);
if ( not online ) then
buttonText = _G["GuildFrameButton"..i.."Name"];
buttonText:SetText(name);
buttonText:SetTextColor(0.5, 0.5, 0.5);
buttonText = _G["GuildFrameButton"..i.."Zone"];
buttonText:SetText(zone);
buttonText:SetTextColor(0.5, 0.5, 0.5);
buttonText = _G["GuildFrameButton"..i.."Level"];
buttonText:SetText(level);
buttonText:SetTextColor(0.5, 0.5, 0.5);
buttonText = _G["GuildFrameButton"..i.."Class"];
buttonText:SetText(class);
buttonText:SetTextColor(0.5, 0.5, 0.5);
else
if ( classFileName ) then
classTextColor = RAID_CLASS_COLORS[classFileName];
else
classTextColor = NORMAL_FONT_COLOR;
end
buttonText = _G["GuildFrameButton"..i.."Name"];
buttonText:SetText(name);
buttonText:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
buttonText = _G["GuildFrameButton"..i.."Zone"];
buttonText:SetText(zone);
buttonText:SetTextColor(1.0, 1.0, 1.0);
buttonText = _G["GuildFrameButton"..i.."Level"];
buttonText:SetText(level);
buttonText:SetTextColor(1.0, 1.0, 1.0);
buttonText = _G["GuildFrameButton"..i.."Class"];
buttonText:SetText(class);
buttonText:SetTextColor(classTextColor.r, classTextColor.g, classTextColor.b);
end
-- If need scrollbar resize columns
if ( showScrollBar ) then
_G["GuildFrameButton"..i.."Zone"]:SetWidth(95);
else
_G["GuildFrameButton"..i.."Zone"]:SetWidth(110);
end
-- Highlight the correct who
if ( GetGuildRosterSelection() == guildIndex ) then
button:LockHighlight();
else
button:UnlockHighlight();
end
if ( guildIndex > numGuildMembers ) then
button:Hide();
else
button:Show();
end
end
GuildFrameGuildListToggleButton:SetText(PLAYER_STATUS);
-- If need scrollbar resize column headers
if ( showScrollBar ) then
WhoFrameColumn_SetWidth(GuildFrameColumnHeader2, 105);
GuildFrameGuildListToggleButton:SetPoint("LEFT", "GuildFrame", "LEFT", 284, -67);
else
WhoFrameColumn_SetWidth(GuildFrameColumnHeader2, 120);
GuildFrameGuildListToggleButton:SetPoint("LEFT", "GuildFrame", "LEFT", 307, -67);
end
-- ScrollFrame update
FauxScrollFrame_Update(GuildListScrollFrame, numGuildMembers, GUILDMEMBERS_TO_DISPLAY, FRIENDS_FRAME_GUILD_HEIGHT );
GuildPlayerStatusFrame:Show();
GuildStatusFrame:Hide();
else
-- Guild specific info
local year, month, day, hour;
local yearlabel, monthlabel, daylabel, hourlabel;
local guildOffset = FauxScrollFrame_GetOffset(GuildListScrollFrame);
local classFileName;
for i=1, GUILDMEMBERS_TO_DISPLAY, 1 do
guildIndex = guildOffset + i;
button = _G["GuildFrameGuildStatusButton"..i];
button.guildIndex = guildIndex;
name, rank, rankIndex, level, class, zone, note, officernote, online, status, classFileName = GetGuildRosterInfo(guildIndex);
_G["GuildFrameGuildStatusButton"..i.."Name"]:SetText(name);
_G["GuildFrameGuildStatusButton"..i.."Rank"]:SetText(rank);
_G["GuildFrameGuildStatusButton"..i.."Note"]:SetText(note);
if ( online ) then
if ( status == "" ) then
_G["GuildFrameGuildStatusButton"..i.."Online"]:SetText(GUILD_ONLINE_LABEL);
else
_G["GuildFrameGuildStatusButton"..i.."Online"]:SetText(status);
end
if ( classFileName ) then
classTextColor = RAID_CLASS_COLORS[classFileName];
else
classTextColor = NORMAL_FONT_COLOR;
end
_G["GuildFrameGuildStatusButton"..i.."Name"]:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
_G["GuildFrameGuildStatusButton"..i.."Rank"]:SetTextColor(1.0, 1.0, 1.0);
_G["GuildFrameGuildStatusButton"..i.."Note"]:SetTextColor(1.0, 1.0, 1.0);
_G["GuildFrameGuildStatusButton"..i.."Online"]:SetTextColor(classTextColor.r, classTextColor.g, classTextColor.b);
else
_G["GuildFrameGuildStatusButton"..i.."Online"]:SetText(GuildFrame_GetLastOnline(guildIndex));
_G["GuildFrameGuildStatusButton"..i.."Name"]:SetTextColor(0.5, 0.5, 0.5);
_G["GuildFrameGuildStatusButton"..i.."Rank"]:SetTextColor(0.5, 0.5, 0.5);
_G["GuildFrameGuildStatusButton"..i.."Note"]:SetTextColor(0.5, 0.5, 0.5);
_G["GuildFrameGuildStatusButton"..i.."Online"]:SetTextColor(0.5, 0.5, 0.5);
end
-- If need scrollbar resize columns
if ( showScrollBar ) then
_G["GuildFrameGuildStatusButton"..i.."Note"]:SetWidth(70);
else
_G["GuildFrameGuildStatusButton"..i.."Note"]:SetWidth(85);
end
-- Highlight the correct who
if ( GetGuildRosterSelection() == guildIndex ) then
button:LockHighlight();
else
button:UnlockHighlight();
end
if ( guildIndex > numGuildMembers ) then
button:Hide();
else
button:Show();
end
end
GuildFrameGuildListToggleButton:SetText(GUILD_STATUS);
-- If need scrollbar resize columns
if ( showScrollBar ) then
WhoFrameColumn_SetWidth(GuildFrameGuildStatusColumnHeader3, 75);
GuildFrameGuildListToggleButton:SetPoint("LEFT", "GuildFrame", "LEFT", 284, -67);
else
WhoFrameColumn_SetWidth(GuildFrameGuildStatusColumnHeader3, 90);
GuildFrameGuildListToggleButton:SetPoint("LEFT", "GuildFrame", "LEFT", 307, -67);
end
-- ScrollFrame update
FauxScrollFrame_Update(GuildListScrollFrame, numGuildMembers, GUILDMEMBERS_TO_DISPLAY, FRIENDS_FRAME_GUILD_HEIGHT );
GuildPlayerStatusFrame:Hide();
GuildStatusFrame:Show();
end
end
function WhoFrameColumn_SetWidth(frame, width)
frame:SetWidth(width);
_G[frame:GetName().."Middle"]:SetWidth(width - 9);
end
function WhoFrameDropDown_Initialize()
local info = UIDropDownMenu_CreateInfo();
for i=1, getn(WHOFRAME_DROPDOWN_LIST), 1 do
info.text = WHOFRAME_DROPDOWN_LIST[i].name;
info.func = WhoFrameDropDownButton_OnClick;
info.checked = nil;
UIDropDownMenu_AddButton(info);
end
end
function WhoFrameDropDown_OnLoad(self)
UIDropDownMenu_Initialize(self, WhoFrameDropDown_Initialize);
UIDropDownMenu_SetWidth(self, 80);
UIDropDownMenu_SetButtonWidth(self, 24);
UIDropDownMenu_JustifyText(WhoFrameDropDown, "LEFT")
end
function WhoFrameDropDownButton_OnClick(self)
UIDropDownMenu_SetSelectedID(WhoFrameDropDown, self:GetID());
WhoList_Update();
end
function FriendsFrame_OnEvent(self, event, ...)
if ( event == "FRIENDLIST_SHOW" ) then
FriendsList_Update();
FriendsFrame_Update();
elseif ( event == "FRIENDLIST_UPDATE" or event == "PARTY_MEMBERS_CHANGED" ) then
FriendsList_Update();
elseif ( event == "BN_FRIEND_LIST_SIZE_CHANGED" or event == "BN_FRIEND_INFO_CHANGED" ) then
BNetBroadcasts, numOnlineBroadcasts, numOfflineBroadcasts = BNGetCustomMessageTable(BNetBroadcasts);
if(not BNetBroadcasts) then
BNetBroadcasts = { };
end
FriendsList_Update();
elseif ( event == "BN_CUSTOM_MESSAGE_CHANGED" ) then
local arg1 = ...;
if ( arg1 ) then --There is no presenceID given if this is ourself.
BNetBroadcasts, numOnlineBroadcasts, numOfflineBroadcasts = BNGetCustomMessageTable(BNetBroadcasts);
if(not BNetBroadcasts) then
BNetBroadcasts = { };
end
FriendsList_Update();
else
FriendsFrameBroadcastInput_UpdateDisplay();
end
elseif ( event == "BN_CUSTOM_MESSAGE_LOADED" ) then
FriendsFrameBroadcastInput_UpdateDisplay();
elseif ( event == "BN_FRIEND_INVITE_ADDED" ) then
local arg1 = ...;
if ( arg1 ) then
PendingInvitesNew[arg1] = true;
PendingList_Update(true);
end
elseif ( event == "BN_FRIEND_INVITE_LIST_INITIALIZED" ) then
PendingInvitesNew["all"] = true;
PendingList_Update();
elseif ( event == "BN_FRIEND_INVITE_REMOVED" ) then
PendingList_Update();
elseif ( event == "IGNORELIST_UPDATE" or event == "MUTELIST_UPDATE" or event == "BN_BLOCK_LIST_UPDATED" ) then
IgnoreList_Update();
elseif ( event == "WHO_LIST_UPDATE" ) then
WhoList_Update();
FriendsFrame_Update();
elseif ( event == "GUILD_ROSTER_UPDATE" ) then
GuildInfoFrame.cachedText = nil;
if ( GuildFrame:IsShown() ) then
local arg1 = ...;
if ( arg1 ) then
GuildRoster();
end
GuildStatus_Update();
FriendsFrame_Update();
GuildControlPopupFrame_Initialize();
end
elseif ( event == "PLAYER_GUILD_UPDATE" ) then
if ( FriendsFrame:IsVisible() ) then
InGuildCheck();
end
if ( not IsInGuild() ) then
GuildControlPopupFrame.initialized = false;
end
elseif ( event == "GUILD_MOTD") then
CURRENT_GUILD_MOTD = ...;
GuildFrameNotesText:SetText(CURRENT_GUILD_MOTD);
elseif ( event == "VOICE_CHAT_ENABLED_UPDATE" ) then
VoiceChat_Toggle();
elseif ( event == "PLAYER_FLAGS_CHANGED" ) then
SynchronizeBNetStatus();
FriendsFrameStatusDropDown_Update();
elseif ( event == "PLAYER_ENTERING_WORLD" or event == "BN_CONNECTED" or event == "BN_DISCONNECTED" or event == "BN_SELF_ONLINE" ) then
FriendsFrame_CheckBattlenetStatus();
end
end
function FriendsFrameFriendButton_OnClick(self, button)
if ( button == "LeftButton" ) then
PlaySound("igMainMenuOptionCheckBoxOn");
FriendsFrame_SelectFriend(self.buttonType, self.id);
FriendsList_Update();
elseif ( button == "RightButton" ) then
PlaySound("igMainMenuOptionCheckBoxOn");
if ( self.buttonType == FRIENDS_BUTTON_TYPE_BNET ) then
-- bnet friend
local presenceID, givenName, surname, toonName, toonID, client, isOnline = BNGetFriendInfo(self.id);
FriendsFrame_ShowBNDropdown(format(BATTLENET_NAME_FORMAT, givenName, surname), isOnline, nil, nil, nil, 1, presenceID);
else
-- wow friend
local name, level, class, area, connected = GetFriendInfo(self.id);
FriendsFrame_ShowDropdown(name, connected, nil, nil, nil, 1);
end
end
end
function FriendsFrame_SelectFriend(friendType, id)
if ( friendType == FRIENDS_BUTTON_TYPE_WOW ) then
SetSelectedFriend(id);
elseif ( friendType == FRIENDS_BUTTON_TYPE_BNET ) then
BNSetSelectedFriend(id);
end
FriendsFrame.selectedFriendType = friendType;
end
function FriendsFrame_SelectSquelched(ignoreType, index)
if ( ignoreType == SQUELCH_TYPE_IGNORE ) then
SetSelectedIgnore(index);
elseif ( ignoreType == SQUELCH_TYPE_BLOCK_INVITE ) then
BNSetSelectedBlock(index);
elseif ( ignoreType == SQUELCH_TYPE_BLOCK_TOON ) then
BNSetSelectedToonBlock(index);
elseif ( ignoreType == SQUELCH_TYPE_MUTE ) then
SetSelectedMute(index);
end
FriendsFrame.selectedSquelchType = ignoreType;
end
function FriendsFrameAddFriendButton_OnClick(self)
if ( UnitIsPlayer("target") and UnitCanCooperate("player", "target") and not GetFriendInfo(UnitName("target")) ) then
local name, server = UnitName("target");
if ( server and (not UnitIsSameServer("player", "target")) ) then
name = name.."-"..server;
end
AddFriend(name);
PlaySound("UChatScrollButton");
else
if ( BNFeaturesEnabled() ) then
AddFriendEntryFrame_Collapse(true);
AddFriendFrame.editFocus = AddFriendNameEditBox;
StaticPopupSpecial_Show(AddFriendFrame);
if ( GetCVarBool("addFriendInfoShown") ) then
AddFriendFrame_ShowEntry();
else
AddFriendFrame_ShowInfo();
end
else
StaticPopup_Show("ADD_FRIEND");
end
end
end
function FriendsFrameSendMessageButton_OnClick(self)
local name;
if ( FriendsFrame.selectedFriendType == FRIENDS_BUTTON_TYPE_WOW ) then
name = GetFriendInfo(FriendsFrame.selectedFriend);
elseif ( FriendsFrame.selectedFriendType == FRIENDS_BUTTON_TYPE_BNET ) then
local presenceID, givenName, surname = BNGetFriendInfo(FriendsFrame.selectedFriend);
name = string.format(BATTLENET_NAME_FORMAT, givenName, surname);
end
if ( name ) then
PlaySound("igMainMenuOptionCheckBoxOn");
ChatFrame_SendTell(name);
end
end
function FriendsFrameMuteButton_OnClick(self)
SetSelectedMute(self:GetID());
MutedList_Update();
end
function FriendsFrameUnsquelchButton_OnClick(self)
local selectedSquelchType = FriendsFrame.selectedSquelchType;
if ( selectedSquelchType == SQUELCH_TYPE_IGNORE ) then
local name = GetIgnoreName(GetSelectedIgnore());
DelIgnore(name);
elseif ( selectedSquelchType == SQUELCH_TYPE_BLOCK_INVITE ) then
local blockID = BNGetBlockedInfo(BNGetSelectedBlock());
BNSetBlocked(blockID, false);
elseif ( selectedSquelchType == SQUELCH_TYPE_BLOCK_TOON ) then
local blockID = BNGetBlockedToonInfo(BNGetSelectedToonBlock());
BNSetToonBlocked(blockID, false);
elseif ( selectedSquelchType == SQUELCH_TYPE_MUTE ) then
local name = GetMuteName(GetSelectedMute());
DelMute(name);
end
PlaySound("igMainMenuOptionCheckBoxOn");
end
function FriendsFrameWhoButton_OnClick(self, button)
if ( button == "LeftButton" ) then
WhoFrame.selectedWho = _G["WhoFrameButton"..self:GetID()].whoIndex;
WhoFrame.selectedName = _G["WhoFrameButton"..self:GetID().."Name"]:GetText();
WhoList_Update();
else
local name = _G["WhoFrameButton"..self:GetID().."Name"]:GetText();
FriendsFrame_ShowDropdown(name, 1);
end
end
function FriendsFrameGuildStatusButton_OnClick(self, button)
if ( button == "LeftButton" ) then
GuildFrame.previousSelectedGuildMember = GuildFrame.selectedGuildMember;
GuildFrame.selectedGuildMember = self.guildIndex;
GuildFrame.selectedName = _G[self:GetName().."Name"]:GetText();
SetGuildRosterSelection(GuildFrame.selectedGuildMember);
-- Toggle guild details frame
if ( GuildMemberDetailFrame:IsShown() and (GuildFrame.previousSelectedGuildMember and (GuildFrame.previousSelectedGuildMember == GuildFrame.selectedGuildMember)) ) then
GuildMemberDetailFrame:Hide();
GuildFrame.selectedGuildMember = 0;
SetGuildRosterSelection(0);
else
GuildFramePopup_Show(GuildMemberDetailFrame);
end
GuildStatus_Update();
else
local guildIndex = self.guildIndex;
local name, rank, rankIndex, level, class, zone, note, officernote, online = GetGuildRosterInfo(guildIndex);
FriendsFrame_ShowDropdown(name, online);
end
end
function FriendsFrame_UnIgnore(button, name)
DelIgnore(name);
end
function FriendsFrame_UnMute(button, name)
DelMute(name);
end
function FriendsFrame_UnBlock(button, blockID)
BNSetBlocked(blockID, false);
end
function FriendsFrame_RemoveFriend()
if ( FriendsFrame.selectedFriend ) then
RemoveFriend(FriendsFrame.selectedFriend);
PlaySound("UChatScrollButton");
end
end
function FriendsFrame_SendMessage()
local name = GetFriendInfo(FriendsFrame.selectedFriend);
ChatFrame_SendTell(name);
PlaySound("UChatScrollButton");
end
function FriendsFrame_GroupInvite()
local name = GetFriendInfo(FriendsFrame.selectedFriend);
InviteUnit(name);
PlaySound("UChatScrollButton");
end
function ToggleFriendsFrame(tab)
if ( not tab ) then
if ( FriendsFrame:IsShown() ) then
HideUIPanel(FriendsFrame);
else
ShowUIPanel(FriendsFrame);
end
else
-- If not in a guild don't do anything when they try to toggle the guild tab
if ( tab == 3 and not IsInGuild() ) then
return;
end
if ( tab == PanelTemplates_GetSelectedTab(FriendsFrame) and FriendsFrame:IsShown() ) then
HideUIPanel(FriendsFrame);
return;
end
PanelTemplates_SetTab(FriendsFrame, tab);
if ( FriendsFrame:IsShown() ) then
FriendsFrame_OnShow();
else
ShowUIPanel(FriendsFrame);
end
end
end
function WhoFrameEditBox_OnEnterPressed(self)
SendWho(self:GetText());
self:ClearFocus();
end
function ToggleFriendsPanel()
local friendsTabShown =
FriendsFrame:IsShown() and
PanelTemplates_GetSelectedTab(FriendsFrame) == 1 and
FriendsTabHeader.selectedTab == 1;
if ( friendsTabShown ) then
HideUIPanel(FriendsFrame);
else
PanelTemplates_SetTab(FriendsFrame, 1);
PanelTemplates_SetTab(FriendsTabHeader, 1);
ShowUIPanel(FriendsFrame);
end
end
function ShowWhoPanel()
PanelTemplates_SetTab(FriendsFrame, 2);
if ( FriendsFrame:IsShown() ) then
FriendsFrame_OnShow();
else
ShowUIPanel(FriendsFrame);
end
end
function ToggleIgnorePanel()
local ignoreTabShown =
FriendsFrame:IsShown() and
PanelTemplates_GetSelectedTab(FriendsFrame) == 1 and
FriendsTabHeader.selectedTab == 2;
if ( ignoreTabShown ) then
HideUIPanel(FriendsFrame);
else
PanelTemplates_SetTab(FriendsFrame, 1);
PanelTemplates_SetTab(FriendsTabHeader, 2);
FriendsFrame_Update();
ShowUIPanel(FriendsFrame);
end
end
function WhoFrame_GetDefaultWhoCommand()
local level = UnitLevel("player");
local minLevel = level-3;
if ( minLevel <= 0 ) then
minLevel = 1;
end
local command = WHO_TAG_ZONE.."\""..GetRealZoneText().."\" "..minLevel.."-"..(level+3);
return command;
end
function GuildControlPopupFrame_OnLoad()
local buttonText;
for i=1, 17 do
buttonText = _G["GuildControlPopupFrameCheckbox"..i.."Text"];
if ( buttonText ) then
buttonText:SetText(_G["GUILDCONTROL_OPTION"..i]);
end
end
GuildControlTabPermissionsViewTabText:SetText(GUILDCONTROL_VIEW_TAB);
GuildControlTabPermissionsDepositItemsText:SetText(GUILDCONTROL_DEPOSIT_ITEMS);
GuildControlTabPermissionsUpdateTextText:SetText(GUILDCONTROL_UPDATE_TEXT);
ClearPendingGuildBankPermissions();
end
--Need to call this function on an event since the guildroster is not available during OnLoad()
function GuildControlPopupFrame_Initialize()
if ( GuildControlPopupFrame.initialized ) then
return;
end
UIDropDownMenu_Initialize(GuildControlPopupFrameDropDown, GuildControlPopupFrameDropDown_Initialize);
GuildControlSetRank(1);
UIDropDownMenu_SetSelectedID(GuildControlPopupFrameDropDown, 1);
UIDropDownMenu_SetText(GuildControlPopupFrameDropDown, GuildControlGetRankName(1));
-- Select tab 1
GuildBankTabPermissionsTab_OnClick(1);
GuildControlPopupFrame:SetScript("OnEvent", GuildControlPopupFrame_OnEvent);
GuildControlPopupFrame.initialized = 1;
GuildControlPopupFrame.rank = GuildControlGetRankName(1);
end
function GuildControlPopupFrame_OnShow()
FriendsFrame:SetAttribute("UIPanelLayout-defined", nil);
FriendsFrame.guildControlShow = 1;
GuildControlPopupAcceptButton:Disable();
-- Update popup
GuildControlPopupframe_Update();
UIPanelWindows["FriendsFrame"].width = FriendsFrame:GetWidth() + GuildControlPopupFrame:GetWidth();
UpdateUIPanelPositions(FriendsFrame);
--GuildControlPopupFrame:RegisterEvent("GUILD_ROSTER_UPDATE"); --It was decided that having a risk of conflict when two people are editing the guild permissions at once is better than resetting whenever someone joins the guild or changes ranks.
end
function GuildControlPopupFrame_OnEvent (self, event, ...)
if ( not IsGuildLeader(UnitName("player")) ) then
GuildControlPopupFrame:Hide();
return;
end
local rank
for i = 1, GuildControlGetNumRanks() do
rank = GuildControlGetRankName(i);
if ( GuildControlPopupFrame.rank and rank == GuildControlPopupFrame.rank ) then
UIDropDownMenu_SetSelectedID(GuildControlPopupFrameDropDown, i);
UIDropDownMenu_SetText(GuildControlPopupFrameDropDown, rank);
end
end
GuildControlPopupframe_Update()
end
function GuildControlPopupFrame_OnHide()
FriendsFrame:SetAttribute("UIPanelLayout-defined", nil);
FriendsFrame.guildControlShow = 0;
UIPanelWindows["FriendsFrame"].width = FriendsFrame:GetWidth();
UpdateUIPanelPositions();
GuildControlPopupFrame.goldChanged = nil;
GuildControlPopupFrame:UnregisterEvent("GUILD_ROSTER_UPDATE");
end
function GuildControlPopupframe_Update(loadPendingTabPermissions, skipCheckboxUpdate)
-- Skip non-tab specific updates to fix Bug ID: 110210
if ( not skipCheckboxUpdate ) then
-- Update permission flags
GuildControlCheckboxUpdate(GuildControlGetRankFlags());
end
local rankID = UIDropDownMenu_GetSelectedID(GuildControlPopupFrameDropDown);
GuildControlPopupFrameEditBox:SetText(GuildControlGetRankName(rankID));
if ( GuildControlPopupFrame.previousSelectedRank and GuildControlPopupFrame.previousSelectedRank ~= rankID ) then
ClearPendingGuildBankPermissions();
end
GuildControlPopupFrame.previousSelectedRank = rankID;
--If rank to modify is guild master then gray everything out
if ( IsGuildLeader() and rankID == 1 ) then
GuildBankTabLabel:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
GuildControlTabPermissionsDepositItems:SetChecked(1);
GuildControlTabPermissionsViewTab:SetChecked(1);
GuildControlTabPermissionsUpdateText:SetChecked(1);
BlizzardOptionsPanel_CheckButton_Disable(GuildControlTabPermissionsDepositItems);
BlizzardOptionsPanel_CheckButton_Disable(GuildControlTabPermissionsViewTab);
BlizzardOptionsPanel_CheckButton_Disable(GuildControlTabPermissionsUpdateText);
GuildControlTabPermissionsWithdrawItemsText:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
GuildControlWithdrawItemsEditBox:SetNumeric(nil);
GuildControlWithdrawItemsEditBox:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
GuildControlWithdrawItemsEditBox:SetText(UNLIMITED);
GuildControlWithdrawItemsEditBox:ClearFocus();
GuildControlWithdrawItemsEditBoxMask:Show();
GuildControlWithdrawGoldText:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
GuildControlWithdrawGoldAmountText:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
GuildControlWithdrawGoldEditBox:SetNumeric(nil);
GuildControlWithdrawGoldEditBox:SetMaxLetters(0);
GuildControlWithdrawGoldEditBox:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
GuildControlWithdrawGoldEditBox:SetText(UNLIMITED);
GuildControlWithdrawGoldEditBox:ClearFocus();
GuildControlWithdrawGoldEditBoxMask:Show();
BlizzardOptionsPanel_CheckButton_Disable(GuildControlPopupFrameCheckbox15);
BlizzardOptionsPanel_CheckButton_Disable(GuildControlPopupFrameCheckbox16);
else
if ( GetNumGuildBankTabs() == 0 ) then
-- No tabs, no permissions! Disable the tab related doohickies
GuildBankTabLabel:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
BlizzardOptionsPanel_CheckButton_Disable(GuildControlTabPermissionsViewTab);
BlizzardOptionsPanel_CheckButton_Disable(GuildControlTabPermissionsDepositItems);
BlizzardOptionsPanel_CheckButton_Disable(GuildControlTabPermissionsUpdateText);
GuildControlTabPermissionsWithdrawItemsText:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
GuildControlWithdrawItemsEditBox:SetText(UNLIMITED);
GuildControlWithdrawItemsEditBox:ClearFocus();
GuildControlWithdrawItemsEditBoxMask:Show();
else
GuildBankTabLabel:SetVertexColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
BlizzardOptionsPanel_CheckButton_Enable(GuildControlTabPermissionsViewTab);
GuildControlTabPermissionsWithdrawItemsText:SetVertexColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
GuildControlWithdrawItemsEditBox:SetNumeric(1);
GuildControlWithdrawItemsEditBox:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
GuildControlWithdrawItemsEditBoxMask:Hide();
end
GuildControlWithdrawGoldText:SetVertexColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
GuildControlWithdrawGoldAmountText:SetVertexColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
GuildControlWithdrawGoldEditBox:SetNumeric(1);
GuildControlWithdrawGoldEditBox:SetMaxLetters(MAX_GOLD_WITHDRAW_DIGITS);
GuildControlWithdrawGoldEditBox:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
GuildControlWithdrawGoldEditBoxMask:Hide();
BlizzardOptionsPanel_CheckButton_Enable(GuildControlPopupFrameCheckbox15);
BlizzardOptionsPanel_CheckButton_Enable(GuildControlPopupFrameCheckbox16);
-- Update tab specific info
local viewTab, canDeposit, canUpdateText, numWithdrawals = GetGuildBankTabPermissions(GuildControlPopupFrameTabPermissions.selectedTab);
if ( rankID == 1 ) then
--If is guildmaster then force checkboxes to be selected
viewTab = 1;
canDeposit = 1;
canUpdateText = 1;
elseif ( loadPendingTabPermissions ) then
local permissions = PENDING_GUILDBANK_PERMISSIONS[GuildControlPopupFrameTabPermissions.selectedTab];
local value;
value = permissions[GuildControlTabPermissionsViewTab:GetID()];
if ( value ) then
viewTab = value;
end
value = permissions[GuildControlTabPermissionsDepositItems:GetID()];
if ( value ) then
canDeposit = value;
end
value = permissions[GuildControlTabPermissionsUpdateText:GetID()];
if ( value ) then
canUpdateText = value;
end
value = permissions["withdraw"];
if ( value ) then
numWithdrawals = value;
end
end
GuildControlTabPermissionsViewTab:SetChecked(viewTab);
GuildControlTabPermissionsDepositItems:SetChecked(canDeposit);
GuildControlTabPermissionsUpdateText:SetChecked(canUpdateText);
GuildControlWithdrawItemsEditBox:SetText(numWithdrawals);
local goldWithdrawLimit = GetGuildBankWithdrawLimit();
-- Only write to the editbox if the value hasn't been changed by the player
if ( not GuildControlPopupFrame.goldChanged ) then
if ( goldWithdrawLimit >= 0 ) then
GuildControlWithdrawGoldEditBox:SetText(goldWithdrawLimit);
else
-- This is for the guild leader who defaults to -1
GuildControlWithdrawGoldEditBox:SetText(MAX_GOLD_WITHDRAW);
end
end
GuildControlPopup_UpdateDepositCheckBox();
end
--Only show available tabs
local tab;
local numTabs = GetNumGuildBankTabs();
local name, permissionsTabBackground, permissionsText;
for i=1, MAX_GUILDBANK_TABS do
name = GetGuildBankTabInfo(i);
tab = _G["GuildBankTabPermissionsTab"..i];
if ( i <= numTabs ) then
tab:Show();
tab.tooltip = name;
permissionsTabBackground = _G["GuildBankTabPermissionsTab"..i.."Background"];
permissionsText = _G["GuildBankTabPermissionsTab"..i.."Text"];
if ( GuildControlPopupFrameTabPermissions.selectedTab == i ) then
tab:LockHighlight();
permissionsTabBackground:SetTexCoord(0, 1.0, 0, 1.0);
permissionsTabBackground:SetHeight(32);
permissionsText:SetPoint("CENTER", permissionsTabBackground, "CENTER", 0, -3);
else
tab:UnlockHighlight();
permissionsTabBackground:SetTexCoord(0, 1.0, 0, 0.875);
permissionsTabBackground:SetHeight(28);
permissionsText:SetPoint("CENTER", permissionsTabBackground, "CENTER", 0, -5);
end
if ( IsGuildLeader() and rankID == 1 ) then
tab:Disable();
else
tab:Enable();
end
else
tab:Hide();
end
end
end
function WithdrawGoldEditBox_Update()
if ( not GuildControlPopupFrameCheckbox15:GetChecked() and not GuildControlPopupFrameCheckbox16:GetChecked() ) then
GuildControlWithdrawGoldAmountText:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
GuildControlWithdrawGoldEditBox:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
GuildControlWithdrawGoldEditBox:ClearFocus();
GuildControlWithdrawGoldEditBoxMask:Show();
else
GuildControlWithdrawGoldAmountText:SetVertexColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
GuildControlWithdrawGoldEditBox:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
GuildControlWithdrawGoldEditBoxMask:Hide();
end
end
function GuildControlPopupAcceptButton_OnClick()
local amount = GuildControlWithdrawGoldEditBox:GetText();
if(amount and amount ~= "" and amount ~= UNLIMITED and tonumber(amount) and tonumber(amount) > 0) then
SetGuildBankWithdrawLimit(amount);
else
SetGuildBankWithdrawLimit(0);
end
SavePendingGuildBankTabPermissions()
GuildControlSaveRank(GuildControlPopupFrameEditBox:GetText());
GuildStatus_Update();
GuildControlPopupAcceptButton:Disable();
UIDropDownMenu_SetText(GuildControlPopupFrameDropDown, GuildControlPopupFrameEditBox:GetText());
GuildControlPopupFrame:Hide();
ClearPendingGuildBankPermissions();
end
function GuildControlPopupFrameDropDown_OnLoad(self)
UIDropDownMenu_SetWidth(self, 160);
UIDropDownMenu_SetButtonWidth(self, 54);
UIDropDownMenu_JustifyText(GuildControlPopupFrameDropDown, "LEFT");
end
function GuildControlPopupFrameDropDown_Initialize()
local info = UIDropDownMenu_CreateInfo();
for i=1, GuildControlGetNumRanks() do
info.text = GuildControlGetRankName(i);
info.func = GuildControlPopupFrameDropDownButton_OnClick;
info.checked = nil;
UIDropDownMenu_AddButton(info);
end
end
function GuildControlPopupFrameDropDownButton_OnClick(self)
local rank = self:GetID();
UIDropDownMenu_SetSelectedID(GuildControlPopupFrameDropDown, rank);
GuildControlSetRank(rank);
GuildControlPopupFrame.rank = GuildControlGetRankName(rank);
GuildControlPopupFrame.goldChanged = nil;
GuildControlPopupframe_Update();
GuildControlPopupFrameAddRankButton_OnUpdate(GuildControlPopupFrameAddRankButton);
GuildControlPopupFrameRemoveRankButton_OnUpdate(GuildControlPopupFrameRemoveRankButton);
GuildControlPopupAcceptButton:Disable();
end
function GuildControlCheckboxUpdate(...)
local checkbox;
for i=1, select("#", ...), 1 do
checkbox = _G["GuildControlPopupFrameCheckbox"..i]
if ( checkbox ) then
checkbox:SetChecked(select(i, ...));
else
--We need to skip checkbox 14 since it's a deprecated flag
--message("GuildControlPopupFrameCheckbox"..i.." does not exist!");
end
end
end
function GuildControlPopupFrameAddRankButton_OnUpdate(self)
if ( GuildControlGetNumRanks() >= 10 ) then
self:Disable();
else
self:Enable();
end
end
function GuildControlPopupFrameRemoveRankButton_OnClick()
GuildControlDelRank(GuildControlGetRankName(UIDropDownMenu_GetSelectedID(GuildControlPopupFrameDropDown)));
GuildControlPopupFrame.rank = GuildControlGetRankName(1);
GuildControlSetRank(1);
GuildStatus_Update();
UIDropDownMenu_SetSelectedID(GuildControlPopupFrameDropDown, 1);
GuildControlPopupFrameEditBox:SetText(GuildControlGetRankName(1));
GuildControlCheckboxUpdate(GuildControlGetRankFlags());
CloseDropDownMenus();
-- Set this to call guildroster in the next frame
--GuildRoster();
--GuildControlPopupFrame.update = 1;
end
function GuildControlPopupFrameRemoveRankButton_OnUpdate(self)
local numRanks = GuildControlGetNumRanks()
if ( (UIDropDownMenu_GetSelectedID(GuildControlPopupFrameDropDown) == numRanks) and (numRanks > 5) ) then
self:Show();
if ( FriendsFrame.playersInBotRank > 0 ) then
self:Disable();
else
self:Enable();
end
else
self:Hide();
end
end
function GuildControlPopup_UpdateDepositCheckBox()
if(GuildControlTabPermissionsViewTab:GetChecked()) then
BlizzardOptionsPanel_CheckButton_Enable(GuildControlTabPermissionsDepositItems);
BlizzardOptionsPanel_CheckButton_Enable(GuildControlTabPermissionsUpdateText);
else
BlizzardOptionsPanel_CheckButton_Disable(GuildControlTabPermissionsDepositItems);
BlizzardOptionsPanel_CheckButton_Disable(GuildControlTabPermissionsUpdateText);
end
end
function InGuildCheck()
if ( not IsInGuild() ) then
PanelTemplates_DisableTab( FriendsFrame, 3 );
if ( FriendsFrame.selectedTab == 3 ) then
FriendsFrame.selectedTab = 1;
FriendsFrame_Update();
end
else
PanelTemplates_EnableTab( FriendsFrame, 3 );
FriendsFrame_Update();
end
end
function GuildFrameGuildListToggleButton_OnClick()
if ( FriendsFrame.playerStatusFrame ) then
FriendsFrame.playerStatusFrame = nil;
else
FriendsFrame.playerStatusFrame = 1;
end
GuildStatus_Update();
end
function GuildFrameControlButton_OnUpdate()
if ( FriendsFrame.guildControlShow == 1 ) then
GuildFrameControlButton:LockHighlight();
else
GuildFrameControlButton:UnlockHighlight();
end
-- Janky way to make sure a change made to the guildroster will reflect in the guildroster call
if ( GuildControlPopupFrame.update == 1 ) then
GuildControlPopupFrame.update = 2;
elseif ( GuildControlPopupFrame.update == 2 ) then
GuildRoster();
GuildControlPopupFrame.update = nil;
end
end
function GuildFrame_GetLastOnline(guildIndex)
return RecentTimeDate( GetGuildRosterLastOnline(guildIndex) );
end
function FriendsFrame_GetLastOnline(lastOnline)
local year, month, day, hour, minute;
local timeDifference = time() - lastOnline;
local ONE_MINUTE = 60;
local ONE_HOUR = 60 * ONE_MINUTE;
local ONE_DAY = 24 * ONE_HOUR;
local ONE_MONTH = 30 * ONE_DAY;
local ONE_YEAR = 12 * ONE_MONTH;
-- local ONE_MILLENIUM = 1000 * ONE_YEAR; for the future
if ( timeDifference < ONE_MINUTE ) then
return LASTONLINE_SECS;
elseif ( timeDifference >= ONE_MINUTE and timeDifference < ONE_HOUR ) then
return format(LASTONLINE_MINUTES, floor(timeDifference / ONE_MINUTE));
elseif ( timeDifference >= ONE_HOUR and timeDifference < ONE_DAY ) then
return format(LASTONLINE_HOURS, floor(timeDifference / ONE_HOUR));
elseif ( timeDifference >= ONE_DAY and timeDifference < ONE_MONTH ) then
return format(LASTONLINE_DAYS, floor(timeDifference / ONE_DAY));
elseif ( timeDifference >= ONE_MONTH and timeDifference < ONE_YEAR ) then
return format(LASTONLINE_MONTHS, floor(timeDifference / ONE_MONTH));
else
return format(LASTONLINE_YEARS, floor(timeDifference / ONE_YEAR));
end
end
function ToggleGuildInfoFrame()
if ( GuildInfoFrame:IsShown() ) then
GuildInfoFrame:Hide();
else
GuildFramePopup_Show(GuildInfoFrame);
end
end
function GuildBankTabPermissionsTab_OnClick(tab)
GuildControlPopupFrameTabPermissions.selectedTab = tab;
GuildControlPopupframe_Update(true, true);
end
-- Functions to allow canceling
function ClearPendingGuildBankPermissions()
for i=1, MAX_GUILDBANK_TABS do
PENDING_GUILDBANK_PERMISSIONS[i] = {};
end
end
function SetPendingGuildBankTabPermissions(tab, id, checked)
if ( not checked ) then
checked = 0;
end
PENDING_GUILDBANK_PERMISSIONS[tab][id] = checked;
end
function SetPendingGuildBankTabWithdraw(tab, amount)
PENDING_GUILDBANK_PERMISSIONS[tab]["withdraw"] = amount;
end
function SavePendingGuildBankTabPermissions()
for index, value in pairs(PENDING_GUILDBANK_PERMISSIONS) do
for i=1, 3 do
if ( value[i] ) then
SetGuildBankTabPermissions(index, i, value[i]);
end
end
if ( value["withdraw"] ) then
SetGuildBankTabWithdraw(index, value["withdraw"]);
end
end
end
-- Guild event log functions
function ToggleGuildEventLog()
if ( GuildEventLogFrame:IsShown() ) then
GuildEventLogFrame:Hide();
else
GuildFramePopup_Show(GuildEventLogFrame);
-- QueryGuildEventLog();
end
end
function GuildEventLog_Update()
local numEvents = GetNumGuildEvents();
local type, player1, player2, rank, year, month, day, hour;
local msg;
local buffer = "";
local max = GuildEventMessage:GetFieldSize()
local length = 0;
for i=numEvents, 1, -1 do
type, player1, player2, rank, year, month, day, hour = GetGuildEventInfo(i);
if ( not player1 ) then
player1 = UNKNOWN;
end
if ( not player2 ) then
player2 = UNKNOWN;
end
if ( type == "invite" ) then
msg = format(GUILDEVENT_TYPE_INVITE, player1, player2);
elseif ( type == "join" ) then
msg = format(GUILDEVENT_TYPE_JOIN, player1);
elseif ( type == "promote" ) then
msg = format(GUILDEVENT_TYPE_PROMOTE, player1, player2, rank);
elseif ( type == "demote" ) then
msg = format(GUILDEVENT_TYPE_DEMOTE, player1, player2, rank);
elseif ( type == "remove" ) then
msg = format(GUILDEVENT_TYPE_REMOVE, player1, player2);
elseif ( type == "quit" ) then
msg = format(GUILDEVENT_TYPE_QUIT, player1);
end
if ( msg ) then
msg = msg.."|cff009999 "..format(GUILD_BANK_LOG_TIME, RecentTimeDate(year, month, day, hour)).."|r|n";
length = length + msg:len();
if(length>max) then
i=0
else
buffer = buffer..msg
end
end
end
GuildEventMessage:SetText(buffer);
end
GUILDFRAME_POPUPS = {
"GuildEventLogFrame",
"GuildInfoFrame",
"GuildMemberDetailFrame",
"GuildControlPopupFrame",
};
function GuildFramePopup_Show(frame)
local name = frame:GetName();
for index, value in ipairs(GUILDFRAME_POPUPS) do
if ( name ~= value ) then
_G[value]:Hide();
end
end
frame:Show();
end
function GuildFramePopup_HideAll()
for index, value in ipairs(GUILDFRAME_POPUPS) do
_G[value]:Hide();
end
end
-- Battle.net stuff starts here
function FriendsFrame_CheckBattlenetStatus()
if ( BNFeaturesEnabled() ) then
if ( BNConnected() ) then
BNetBroadcasts, numOnlineBroadcasts, numOfflineBroadcasts = BNGetCustomMessageTable(BNetBroadcasts);
if(not BNetBroadcasts) then
BNetBroadcasts = { };
end
playerRealmName = GetRealmName();
playerFactionGroup = UnitFactionGroup("player");
FriendsFrameBattlenetStatus:Hide();
FriendsFrameStatusDropDown:Show();
FriendsFrameBroadcastInput:Show();
FriendsFrameBroadcastInput_UpdateDisplay();
else
numOnlineBroadcasts = 0;
numOfflineBroadcasts = 0;
FriendsFrameBattlenetStatus:Show();
FriendsFrameStatusDropDown:Hide();
FriendsFrameBroadcastInput:Hide();
FriendsFrameOfflineHeader:Hide();
end
if ( FriendsFrame:IsShown() ) then
IgnoreList_Update();
PendingList_Update();
end
-- has its own check if it is being shown, after it updates the count on the FriendsMicroButton
FriendsList_Update();
end
end
function FriendsFrame_GetTopButton(offset)
local heightLeft = offset;
local priorHeight = 0;
local buttonHeight;
local numBNetTotal, numBNetOnline = BNGetNumFriends();
local numBNetOffline = numBNetTotal - numBNetOnline;
local numWoWTotal, numWoWOnline = GetNumFriends();
local numWoWOffline = numWoWTotal - numWoWOnline;
local buttonIndex = 0;
-- online
if ( numBNetOnline + numWoWOnline > 0 ) then
local totalBNOnlineHeight = numBNetOnline * FRIENDS_BUTTON_NORMAL_HEIGHT + numOnlineBroadcasts * (FRIENDS_BUTTON_LARGE_HEIGHT - FRIENDS_BUTTON_NORMAL_HEIGHT);
if ( heightLeft < totalBNOnlineHeight ) then
for i = 1, numBNetOnline do
if ( BNetBroadcasts[i] ) then
buttonHeight = FRIENDS_BUTTON_LARGE_HEIGHT;
else
buttonHeight = FRIENDS_BUTTON_NORMAL_HEIGHT;
end
if ( (heightLeft - buttonHeight) < 1 ) then
return i + buttonIndex, offset - heightLeft, totalScrollHeight;
else
heightLeft = heightLeft - buttonHeight;
end
end
end
heightLeft = heightLeft - totalBNOnlineHeight;
buttonIndex = buttonIndex + numBNetOnline;
if ( heightLeft < numWoWOnline * FRIENDS_BUTTON_NORMAL_HEIGHT ) then
local index = math.floor(heightLeft / FRIENDS_BUTTON_NORMAL_HEIGHT) + 1;
return buttonIndex + index, offset - heightLeft + (index - 1) * FRIENDS_BUTTON_NORMAL_HEIGHT, totalScrollHeight;
end
heightLeft = heightLeft - numWoWOnline * FRIENDS_BUTTON_NORMAL_HEIGHT;
buttonIndex = buttonIndex + numWoWOnline;
end
-- offline
if ( numBNetOffline + numWoWOffline > 0 ) then
-- check header first
if ( numBNetOnline + numWoWOnline > 0 ) then
buttonIndex = buttonIndex + 1;
if ( heightLeft < FRIENDS_BUTTON_HEADER_HEIGHT ) then
return buttonIndex, offset - heightLeft, totalScrollHeight;
else
heightLeft = heightLeft - FRIENDS_BUTTON_HEADER_HEIGHT;
end
end
local totalBNOfflineHeight = numBNetOffline * FRIENDS_BUTTON_NORMAL_HEIGHT + numOfflineBroadcasts * (FRIENDS_BUTTON_LARGE_HEIGHT - FRIENDS_BUTTON_NORMAL_HEIGHT);
if ( heightLeft < totalBNOfflineHeight ) then
for i = 1, numBNetOffline do
if ( BNetBroadcasts[numBNetOnline + i] ) then
buttonHeight = FRIENDS_BUTTON_LARGE_HEIGHT;
else
buttonHeight = FRIENDS_BUTTON_NORMAL_HEIGHT;
end
if ( (heightLeft - buttonHeight) < 1 ) then
return i + buttonIndex, offset - heightLeft, totalScrollHeight;
else
heightLeft = heightLeft - buttonHeight;
end
end
end
heightLeft = heightLeft - totalBNOfflineHeight;
buttonIndex = buttonIndex + numBNetOffline;
if ( heightLeft < numWoWOffline * FRIENDS_BUTTON_NORMAL_HEIGHT ) then
local index = math.floor(heightLeft / FRIENDS_BUTTON_NORMAL_HEIGHT) + 1;
return buttonIndex + index, offset - heightLeft + (index - 1) * FRIENDS_BUTTON_NORMAL_HEIGHT, totalScrollHeight;
end
end
end
function FriendsFrame_SetButton(button, index, firstButton)
local height;
local nameText, nameColor, infoText, broadcastText;
if ( firstButton ) then
FriendsFrameOfflineHeader:Hide();
DynamicScrollFrame_UnlockAllHighlights(FriendsFrameFriendsScrollFrame);
end
button.buttonType = FriendButtons[index].buttonType;
button.id = FriendButtons[index].id;
if ( FriendButtons[index].buttonType == FRIENDS_BUTTON_TYPE_WOW ) then
local name, level, class, area, connected, status, note = GetFriendInfo(FriendButtons[index].id);
if ( connected ) then
button.background:SetTexture(FRIENDS_WOW_BACKGROUND_COLOR.r, FRIENDS_WOW_BACKGROUND_COLOR.g, FRIENDS_WOW_BACKGROUND_COLOR.b, FRIENDS_WOW_BACKGROUND_COLOR.a);
if ( status == "" ) then
button.status:SetTexture(FRIENDS_TEXTURE_ONLINE);
elseif ( status == CHAT_FLAG_AFK ) then
button.status:SetTexture(FRIENDS_TEXTURE_AFK);
elseif ( status == CHAT_FLAG_DND ) then
button.status:SetTexture(FRIENDS_TEXTURE_DND);
end
nameText = name..", "..format(FRIENDS_LEVEL_TEMPLATE, level, class);
nameColor = FRIENDS_WOW_NAME_COLOR;
else
button.background:SetTexture(FRIENDS_OFFLINE_BACKGROUND_COLOR.r, FRIENDS_OFFLINE_BACKGROUND_COLOR.g, FRIENDS_OFFLINE_BACKGROUND_COLOR.b, FRIENDS_OFFLINE_BACKGROUND_COLOR.a);
button.status:SetTexture(FRIENDS_TEXTURE_OFFLINE);
nameText = name;
nameColor = FRIENDS_GRAY_COLOR;
end
infoText = area;
button.gameIcon:Hide();
FriendsFrame_SummonButton_Update(button.summonButton);
elseif ( FriendButtons[index].buttonType == FRIENDS_BUTTON_TYPE_BNET ) then
local presenceID, givenName, surname, toonName, toonID, client, isOnline, lastOnline, isAFK, isDND, messageText, noteText = BNGetFriendInfo(FriendButtons[index].id);
broadcastText = messageText;
if ( isOnline ) then
local _, _, _, _, _, _, _, _, zoneName, _, gameText = BNGetToonInfo(toonID);
button.background:SetTexture(FRIENDS_BNET_BACKGROUND_COLOR.r, FRIENDS_BNET_BACKGROUND_COLOR.g, FRIENDS_BNET_BACKGROUND_COLOR.b, FRIENDS_BNET_BACKGROUND_COLOR.a);
if ( isAFK ) then
button.status:SetTexture(FRIENDS_TEXTURE_AFK);
elseif ( isDND ) then
button.status:SetTexture(FRIENDS_TEXTURE_DND);
else
button.status:SetTexture(FRIENDS_TEXTURE_ONLINE);
end
if ( client == BNET_CLIENT_WOW ) then
if ( not zoneName or zoneName == "" ) then
infoText = UNKNOWN;
else
infoText = zoneName;
end
button.gameIcon:SetTexture("Interface\\FriendsFrame\\Battlenet-WoWicon");
elseif ( client == BNET_CLIENT_SC2 ) then
button.gameIcon:SetTexture("Interface\\FriendsFrame\\Battlenet-Sc2icon");
infoText = gameText;
end
nameColor = FRIENDS_BNET_NAME_COLOR;
button.gameIcon:Show();
else
button.background:SetTexture(FRIENDS_OFFLINE_BACKGROUND_COLOR.r, FRIENDS_OFFLINE_BACKGROUND_COLOR.g, FRIENDS_OFFLINE_BACKGROUND_COLOR.b, FRIENDS_OFFLINE_BACKGROUND_COLOR.a);
button.status:SetTexture(FRIENDS_TEXTURE_OFFLINE);
nameColor = FRIENDS_GRAY_COLOR;
button.gameIcon:Hide();
if ( lastOnline == 0 ) then
infoText = FRIENDS_LIST_OFFLINE;
else
infoText = string.format(BNET_LAST_ONLINE_TIME, FriendsFrame_GetLastOnline(lastOnline));
end
end
if ( givenName and surname ) then
if ( toonName ) then
if ( client == BNET_CLIENT_WOW and CanCooperateWithToon(toonID) ) then
nameText = string.format(BATTLENET_NAME_FORMAT, givenName, surname).." "..FRIENDS_WOW_NAME_COLOR_CODE.."("..toonName..")";
else
if ( ENABLE_COLORBLIND_MODE == "1" ) then
toonName = toonName..CANNOT_COOPERATE_LABEL;
end
nameText = string.format(BATTLENET_NAME_FORMAT, givenName, surname).." "..FRIENDS_OTHER_NAME_COLOR_CODE.."("..toonName..")";
end
else
nameText = string.format(BATTLENET_NAME_FORMAT, givenName, surname);
end
else
nameText = UNKNOWN;
end
FriendsFrame_SummonButton_Update(button.summonButton);
else -- header
button:Hide();
FriendsFrameOfflineHeader:Show();
FriendsFrameOfflineHeader:SetAllPoints(button);
return FRIENDS_BUTTON_HEADER_HEIGHT;
end
if ( FriendsFrame.selectedFriendType == FriendButtons[index].buttonType and FriendsFrame.selectedFriend == FriendButtons[index].id ) then
button:LockHighlight();
end
button.name:SetText(nameText);
button.name:SetTextColor(nameColor.r, nameColor.g, nameColor.b);
button.info:SetText(infoText);
-- don't display a broadcast if the BNetBroadcasts data is out of sync
if ( broadcastText and broadcastText ~= "" and BNetBroadcasts[FriendButtons[index].id] ) then
height = FRIENDS_BUTTON_LARGE_HEIGHT;
button.broadcastMessage:SetText(broadcastText);
button.broadcastMessage:Show();
button.broadcastIcon:Show();
else
height = FRIENDS_BUTTON_NORMAL_HEIGHT;
button.broadcastMessage:Hide();
button.broadcastIcon:Hide();
end
-- update the tooltip if hovering over a button
if ( FriendsTooltip.button == button ) then
FriendsFrameTooltip_Show(button);
end
button:Show();
return height;
end
function FriendsFrameStatusDropDown_OnLoad(self)
UIDropDownMenu_Initialize(self, FriendsFrameStatusDropDown_Initialize);
UIDropDownMenu_SetWidth(FriendsFrameStatusDropDown, 28);
FriendsFrameStatusDropDownText:Hide();
FriendsFrameStatusDropDownButton:SetScript("OnEnter", FriendsFrameStatusDropDown_ShowTooltip);
FriendsFrameStatusDropDownButton:SetScript("OnLeave", function() GameTooltip:Hide(); end);
end
function FriendsFrameStatusDropDown_ShowTooltip()
local statusText;
local status = FriendsFrameStatusDropDown.status;
if ( status == 2 ) then
statusText = FRIENDS_LIST_AWAY;
elseif ( status == 3 ) then
statusText = FRIENDS_LIST_BUSY;
else
statusText = FRIENDS_LIST_AVAILABLE;
end
GameTooltip:SetOwner(FriendsFrameStatusDropDown, "ANCHOR_RIGHT", -18, 0);
GameTooltip:SetText(format(FRIENDS_LIST_STATUS_TOOLTIP, statusText));
GameTooltip:Show();
end
function FriendsFrameStatusDropDown_OnShow(self)
UIDropDownMenu_Initialize(self, FriendsFrameStatusDropDown_Initialize);
FriendsFrameStatusDropDown_Update(self);
end
function FriendsFrameStatusDropDown_Initialize()
local info = UIDropDownMenu_CreateInfo();
local optionText = "\124T%s.tga:16:16:0:0\124t %s";
info.padding = 8;
info.checked = nil;
info.notCheckable = 1;
info.func = FriendsFrame_SetOnlineStatus;
info.text = string.format(optionText, FRIENDS_TEXTURE_ONLINE, FRIENDS_LIST_AVAILABLE);
UIDropDownMenu_AddButton(info);
info.text = string.format(optionText, FRIENDS_TEXTURE_AFK, FRIENDS_LIST_AWAY);
UIDropDownMenu_AddButton(info);
info.text = string.format(optionText, FRIENDS_TEXTURE_DND, FRIENDS_LIST_BUSY);
UIDropDownMenu_AddButton(info);
end
function FriendsFrameStatusDropDown_Update(self)
local status;
self = self or FriendsFrameStatusDropDown;
if ( UnitIsAFK("player") ) then
FriendsFrameStatusDropDownStatus:SetTexture(FRIENDS_TEXTURE_AFK);
status = 2;
elseif ( UnitIsDND("player") ) then
FriendsFrameStatusDropDownStatus:SetTexture(FRIENDS_TEXTURE_DND);
status = 3;
else
FriendsFrameStatusDropDownStatus:SetTexture(FRIENDS_TEXTURE_ONLINE);
status = 1;
end
FriendsFrameStatusDropDown.status = status;
end
function FriendsFrame_SetOnlineStatus(button, status)
status = status or button:GetID();
if ( status == FriendsFrameStatusDropDown.status ) then
return;
end
if ( status == 1 ) then
if ( UnitIsAFK("player") ) then
SendChatMessage("", "AFK");
elseif ( UnitIsDND("player") ) then
SendChatMessage("", "DND");
end
elseif ( status == 2 ) then
SendChatMessage("", "AFK");
else
SendChatMessage("", "DND");
end
end
function FriendsFrameBroadcastInput_OnEnterPressed(self)
local broadcastText = self:GetText()
BNSetCustomMessage(broadcastText);
FriendsFrameBroadcastInput_UpdateDisplay(self, broadcastText);
end
function FriendsFrameBroadcastInput_OnEscapePressed(self)
FriendsFrameBroadcastInput_UpdateDisplay(self);
end
function FriendsFrameBroadcastInput_OnClearPressed(self)
BNSetCustomMessage("");
FriendsFrameBroadcastInput_UpdateDisplay(nil, "");
end
function FriendsFrameBroadcastInput_UpdateDisplay(self, broadcastText)
local _;
self = self or FriendsFrameBroadcastInput;
if ( not broadcastText ) then
_, _, broadcastText = BNGetInfo();
broadcastText = broadcastText or "";
end
self:ClearFocus();
self:SetText(broadcastText);
if ( broadcastText ~= "" ) then
self.icon:SetAlpha(1);
self:SetCursorPosition(0);
self.clear:Show();
self:SetTextInsets(0, 18, 0, 0);
else
self.icon:SetAlpha(0.35);
self.clear:Hide();
self:SetTextInsets(0, 10, 0, 0);
end
end
function FriendsFrameTooltip_Show(self)
if ( self.buttonType == FRIENDS_BUTTON_TYPE_HEADER ) then
return;
end
local anchor, text;
local FRIENDS_TOOLTIP_WOW_INFO_TEMPLATE = NORMAL_FONT_COLOR_CODE..FRIENDS_LIST_ZONE.."|r%1$s|n"..NORMAL_FONT_COLOR_CODE..FRIENDS_LIST_REALM.."|r%2$s";
local numToons = 0;
local tooltip = FriendsTooltip;
tooltip.height = 0;
tooltip.maxWidth = 0;
if ( self.buttonType == FRIENDS_BUTTON_TYPE_BNET ) then
local nameText;
local presenceID, givenName, surname, toonName, toonID, client, isOnline, lastOnline, isAFK, isDND, broadcastText, noteText, isFriend, broadcastTime = BNGetFriendInfo(self.id);
-- account name
if ( givenName and surname ) then
nameText = format(BATTLENET_NAME_FORMAT, givenName, surname);
else
nameText = UNKNOWN;
end
anchor = FriendsFrameTooltip_SetLine(FriendsTooltipHeader, nil, nameText);
-- toon 1
if ( toonID ) then
local hasFocus, toonName, client, realmName, faction, race, class, guild, zoneName, level, gameText = BNGetToonInfo(toonID);
level = level or "";
race = race or "";
class = class or "";
if ( client == BNET_CLIENT_WOW ) then
if ( CanCooperateWithToon(toonID) ) then
text = string.format(FRIENDS_TOOLTIP_WOW_TOON_TEMPLATE, toonName, level, race, class);
else
text = string.format(FRIENDS_TOOLTIP_WOW_TOON_TEMPLATE, toonName..CANNOT_COOPERATE_LABEL, level, race, class);
end
FriendsFrameTooltip_SetLine(FriendsTooltipToon1Name, nil, text);
anchor = FriendsFrameTooltip_SetLine(FriendsTooltipToon1Info, nil, string.format(FRIENDS_TOOLTIP_WOW_INFO_TEMPLATE, zoneName, realmName), -4);
elseif ( client == BNET_CLIENT_SC2 ) then
FriendsFrameTooltip_SetLine(FriendsTooltipToon1Name, nil, toonName);
anchor = FriendsFrameTooltip_SetLine(FriendsTooltipToon1Info, nil, gameText, -4);
end
else
FriendsTooltipToon1Info:Hide();
FriendsTooltipToon1Name:Hide();
end
-- note
if ( noteText and noteText ~= "" ) then
FriendsTooltipNoteIcon:Show();
anchor = FriendsFrameTooltip_SetLine(FriendsTooltipNoteText, anchor, noteText, -8);
else
FriendsTooltipNoteIcon:Hide();
FriendsTooltipNoteText:Hide();
end
-- broadcast
if ( broadcastText and broadcastText ~= "" ) then
FriendsTooltipBroadcastIcon:Show();
broadcastText = broadcastText.."|n"..FRIENDS_BROADCAST_TIME_COLOR_CODE..string.format(BNET_BROADCAST_SENT_TIME, FriendsFrame_GetLastOnline(broadcastTime));
anchor = FriendsFrameTooltip_SetLine(FriendsTooltipBroadcastText, anchor, broadcastText, -8);
else
FriendsTooltipBroadcastIcon:Hide();
FriendsTooltipBroadcastText:Hide();
end
if ( isOnline ) then
FriendsTooltipHeader:SetTextColor(FRIENDS_BNET_NAME_COLOR.r, FRIENDS_BNET_NAME_COLOR.g, FRIENDS_BNET_NAME_COLOR.b);
FriendsTooltipLastOnline:Hide();
numToons = BNGetNumFriendToons(self.id);
else
FriendsTooltipHeader:SetTextColor(FRIENDS_GRAY_COLOR.r, FRIENDS_GRAY_COLOR.g, FRIENDS_GRAY_COLOR.b);
if ( lastOnline == 0 ) then
text = FRIENDS_LIST_OFFLINE;
else
text = string.format(BNET_LAST_ONLINE_TIME, FriendsFrame_GetLastOnline(lastOnline));
end
anchor = FriendsFrameTooltip_SetLine(FriendsTooltipLastOnline, anchor, text, -4);
end
elseif ( self.buttonType == FRIENDS_BUTTON_TYPE_WOW ) then
local name, level, class, area, connected, status, noteText = GetFriendInfo(self.id);
anchor = FriendsFrameTooltip_SetLine(FriendsTooltipHeader, nil, name);
if ( connected ) then
FriendsTooltipHeader:SetTextColor(FRIENDS_WOW_NAME_COLOR.r, FRIENDS_WOW_NAME_COLOR.g, FRIENDS_WOW_NAME_COLOR.b);
FriendsFrameTooltip_SetLine(FriendsTooltipToon1Name, nil, string.format(FRIENDS_LEVEL_TEMPLATE, level, class));
anchor = FriendsFrameTooltip_SetLine(FriendsTooltipToon1Info, nil, area);
else
FriendsTooltipHeader:SetTextColor(FRIENDS_GRAY_COLOR.r, FRIENDS_GRAY_COLOR.g, FRIENDS_GRAY_COLOR.b);
FriendsTooltipToon1Name:Hide();
FriendsTooltipToon1Info:Hide();
end
if ( noteText ) then
FriendsTooltipNoteIcon:Show();
anchor = FriendsFrameTooltip_SetLine(FriendsTooltipNoteText, anchor, noteText, -8);
else
FriendsTooltipNoteIcon:Hide();
FriendsTooltipNoteText:Hide();
end
FriendsTooltipBroadcastIcon:Hide();
FriendsTooltipBroadcastText:Hide();
FriendsTooltipLastOnline:Hide();
end
-- other toons
local toonIndex = 1;
local toonNameString;
local toonInfoString;
if ( numToons > 1 ) then
FriendsFrameTooltip_SetLine(FriendsTooltipOtherToons, anchor, nil, -8);
for i = 1, numToons do
local hasFocus, toonName, client, realmName, faction, race, class, guild, zoneName, level, gameText = BNGetFriendToonInfo(self.id, i);
-- the focused toon is already at the top of the tooltip
if ( not hasFocus ) then
toonIndex = toonIndex + 1;
if ( toonIndex > FRIENDS_TOOLTIP_MAX_TOONS ) then
break;
end
toonNameString = _G["FriendsTooltipToon"..toonIndex.."Name"];
toonInfoString = _G["FriendsTooltipToon"..toonIndex.."Info"];
if ( client == BNET_CLIENT_WOW ) then
if ( realmName == playerRealmName and PLAYER_FACTION_GROUP[faction] == playerFactionGroup ) then
text = string.format(FRIENDS_TOOLTIP_WOW_TOON_TEMPLATE, toonName, level, race, class);
else
text = string.format(FRIENDS_TOOLTIP_WOW_TOON_TEMPLATE, toonName..CANNOT_COOPERATE_LABEL, level, race, class);
end
gameText = zoneName;
elseif ( client == BNET_CLIENT_SC2 ) then
text = toonName;
end
FriendsFrameTooltip_SetLine(toonNameString, nil, text);
FriendsFrameTooltip_SetLine(toonInfoString, nil, gameText);
end
end
else
FriendsTooltipOtherToons:Hide();
end
for i = toonIndex + 1, FRIENDS_TOOLTIP_MAX_TOONS do
toonNameString = _G["FriendsTooltipToon"..i.."Name"];
toonInfoString = _G["FriendsTooltipToon"..i.."Info"];
toonNameString:Hide();
toonInfoString:Hide();
end
if ( numToons > FRIENDS_TOOLTIP_MAX_TOONS ) then
FriendsFrameTooltip_SetLine(FriendsTooltipToonMany, nil, string.format(FRIENDS_TOOLTIP_TOO_MANY_CHARACTERS, numToons - FRIENDS_TOOLTIP_MAX_TOONS), 0);
else
FriendsTooltipToonMany:Hide();
end
tooltip.button = self;
tooltip:SetPoint("TOPLEFT", self, "TOPRIGHT", 36, 0);
tooltip:SetHeight(tooltip.height + FRIENDS_TOOLTIP_MARGIN_WIDTH);
tooltip:SetWidth(min(FRIENDS_TOOLTIP_MAX_WIDTH, tooltip.maxWidth + FRIENDS_TOOLTIP_MARGIN_WIDTH));
tooltip:Show();
end
function FriendsFrameTooltip_SetLine(line, anchor, text, yOffset)
local tooltip = FriendsTooltip;
local top = 0;
local left = FRIENDS_TOOLTIP_MAX_WIDTH - FRIENDS_TOOLTIP_MARGIN_WIDTH - line:GetWidth();
if ( text ) then
line:SetText(text);
end
if ( anchor ) then
top = yOffset or 0;
line:SetPoint("TOP", anchor, "BOTTOM", 0, top);
else
local point, _, _, _, y = line:GetPoint(1);
if ( point == "TOP" or point == "TOPLEFT" ) then
top = y;
end
end
line:Show();
tooltip.height = tooltip.height + line:GetHeight() - top;
tooltip.maxWidth = max(tooltip.maxWidth, line:GetStringWidth() + left);
return line;
end
function AddFriendFrame_OnShow()
local factionGroup = UnitFactionGroup("player");
if ( factionGroup ) then
local textureFile = "Interface\\FriendsFrame\\PlusManz-"..factionGroup;
AddFriendInfoFrameFactionIcon:SetTexture(textureFile);
AddFriendInfoFrameFactionIcon:Show();
AddFriendEntryFrameRightIcon:SetTexture(textureFile);
AddFriendEntryFrameRightIcon:Show();
end
end
function AddFriendFrame_ShowInfo()
AddFriendFrame:SetWidth(AddFriendInfoFrame:GetWidth());
AddFriendFrame:SetHeight(AddFriendInfoFrame:GetHeight());
AddFriendInfoFrame:Show();
AddFriendEntryFrame:Hide();
PlaySound("igMainMenuOpen");
end
function AddFriendFrame_ShowEntry()
AddFriendFrame:SetWidth(AddFriendEntryFrame:GetWidth());
AddFriendFrame:SetHeight(AddFriendEntryFrame:GetHeight());
AddFriendInfoFrame:Hide();
AddFriendEntryFrame:Show();
if ( BNFeaturesEnabledAndConnected() ) then
AddFriendFrame.BNconnected = true;
AddFriendEntryFrameLeftTitle:SetAlpha(1);
AddFriendEntryFrameLeftDescription:SetText(BATTLENET_FRIEND_LABEL);
AddFriendEntryFrameLeftDescription:SetTextColor(1, 1, 1);
AddFriendEntryFrameLeftIcon:SetVertexColor(1, 1, 1);
AddFriendEntryFrameLeftFriend:SetVertexColor(1, 1, 1);
else
AddFriendFrame.BNconnected = nil;
AddFriendEntryFrameLeftTitle:SetAlpha(0.35);
AddFriendEntryFrameLeftDescription:SetText(BATTLENET_UNAVAILABLE);
AddFriendEntryFrameLeftDescription:SetTextColor(1, 0, 0);
AddFriendEntryFrameLeftIcon:SetVertexColor(.4, .4, .4);
AddFriendEntryFrameLeftFriend:SetVertexColor(.4, .4, .4);
end
if ( AddFriendFrame.editFocus ) then
AddFriendFrame.editFocus:SetFocus();
end
PlaySound("igMainMenuOpen");
end
function AddFriendNameEditBox_OnTextChanged(self, userInput)
if ( not AutoCompleteEditBox_OnTextChanged(self, userInput) ) then
local text = self:GetText();
if ( text ~= "" ) then
AddFriendNameEditBoxFill:Hide();
if ( AddFriendFrame.BNconnected ) then
if ( string.find(text, "@") ) then
AddFriendEntryFrame_Expand();
else
AddFriendEntryFrame_Collapse();
end
end
else
AddFriendEntryFrame_Collapse();
AddFriendNameEditBoxFill:Show();
end
end
end
function AddFriendEntryFrame_Expand()
AddFriendEntryFrame:SetHeight(296);
AddFriendFrame:SetHeight(296);
AddFriendNoteFrame:Show();
AddFriendEntryFrameAcceptButton:SetText(SEND_REQUEST);
AddFriendEntryFrameRightTitle:SetAlpha(0.35);
AddFriendEntryFrameRightDescription:SetAlpha(0.35);
AddFriendEntryFrameRightIcon:SetVertexColor(.4, .4, .4);
AddFriendEntryFrameRightFriend:SetVertexColor(.4, .4, .4);
AddFriendEntryFrameLeftIcon:SetAlpha(1);
AddFriendEntryFrameOrLabel:SetVertexColor(.3, .3, .3);
end
function AddFriendEntryFrame_Collapse(clearText)
AddFriendEntryFrame:SetHeight(218);
AddFriendFrame:SetHeight(218);
AddFriendNoteFrame:Hide();
AddFriendEntryFrameAcceptButton:SetText(ADD_FRIEND);
AddFriendEntryFrameRightTitle:SetAlpha(1);
AddFriendEntryFrameRightDescription:SetAlpha(1);
AddFriendEntryFrameRightIcon:SetVertexColor(1, 1, 1);
AddFriendEntryFrameRightFriend:SetVertexColor(1, 1, 1);
AddFriendEntryFrameLeftIcon:SetAlpha(0.5);
if ( AddFriendFrame.BNconnected ) then
AddFriendEntryFrameOrLabel:SetVertexColor(1, 1, 1);
else
AddFriendEntryFrameOrLabel:SetVertexColor(0.3, 0.3, 0.3);
end
if ( clearText ) then
AddFriendNameEditBox:SetText("");
AddFriendNoteEditBox:SetText("");
end
end
function AddFriendFrame_Accept()
local name = AddFriendNameEditBox:GetText();
if ( AddFriendFrame.BNconnected and string.find(name, "@") ) then
BNSendFriendInvite(name, AddFriendNoteEditBox:GetText());
else
AddFriend(name);
end
StaticPopupSpecial_Hide(AddFriendFrame);
end
function FriendsFriendsFrameDropDown_Initialize()
local info = UIDropDownMenu_CreateInfo();
local value = FriendsFriendsFrame.view;
info.value = FRIENDS_FRIENDS_ALL;
info.text = FRIENDS_FRIENDS_CHOICE_EVERYONE;
info.func = FriendsFriendsFrameDropDown_OnClick;
info.arg1 = FRIENDS_FRIENDS_ALL;
if ( value == info.value ) then
info.checked = 1;
UIDropDownMenu_SetText(FriendsFriendsFrameDropDown, info.text);
else
info.checked = nil;
end
UIDropDownMenu_AddButton(info);
info.value = FRIENDS_FRIENDS_POTENTIAL;
info.text = FRIENDS_FRIENDS_CHOICE_POTENTIAL;
info.func = FriendsFriendsFrameDropDown_OnClick;
info.arg1 = FRIENDS_FRIENDS_POTENTIAL;
if ( value == info.value ) then
info.checked = 1;
UIDropDownMenu_SetText(FriendsFriendsFrameDropDown, info.text);
else
info.checked = nil;
end
UIDropDownMenu_AddButton(info);
info.value = FRIENDS_FRIENDS_MUTUAL;
info.text = FRIENDS_FRIENDS_CHOICE_MUTUAL;
info.func = FriendsFriendsFrameDropDown_OnClick;
info.arg1 = FRIENDS_FRIENDS_MUTUAL;
if ( value == info.value ) then
info.checked = 1;
UIDropDownMenu_SetText(FriendsFriendsFrameDropDown, info.text);
else
info.checked = nil;
end
UIDropDownMenu_AddButton(info);
end
function FriendsFriendsFrameDropDown_OnClick(self, value)
FriendsFriendsFrame.view = value;
UIDropDownMenu_SetSelectedValue(FriendsFriendsFrameDropDown, value);
FriendsFriendsScrollFrameScrollBar:SetValue(0);
FriendsFriendsList_Update();
end
function FriendsFriendsList_Update()
if ( FriendsFriendsWaitFrame:IsShown() ) then
return;
end
local friendsButton, friendsIndex;
local showMutual, showPotential;
local view = FriendsFriendsFrame.view;
local selection = FriendsFriendsFrame.selection;
local requested = FriendsFriendsFrame.requested;
local presenceID = FriendsFriendsFrame.presenceID;
local numFriendsFriends = 0;
local numMutual, numPotential = BNGetNumFOF(presenceID);
local offset = FauxScrollFrame_GetOffset(FriendsFriendsScrollFrame);
local haveSelection;
if ( view == FRIENDS_FRIENDS_POTENTIAL or view == FRIENDS_FRIENDS_ALL ) then
showPotential = true;
numFriendsFriends = numFriendsFriends + numPotential;
end
if ( view == FRIENDS_FRIENDS_MUTUAL or view == FRIENDS_FRIENDS_ALL ) then
showMutual = true;
numFriendsFriends = numFriendsFriends + numMutual;
end
for i = 1, FRIENDS_FRIENDS_TO_DISPLAY, 1 do
friendsIndex = i + offset;
friendsButton = _G["FriendsFriendsButton"..i];
if ( friendsIndex > numFriendsFriends ) then
friendsButton:Hide();
else
local friendID, givenName, surname, isMutual = BNGetFOFInfo(presenceID, showMutual, showPotential, friendsIndex);
local name = string.format(BATTLENET_NAME_FORMAT, givenName, surname);
if ( isMutual ) then
friendsButton:Disable();
if ( view ~= FRIENDS_FRIENDS_MUTUAL ) then
friendsButton.name:SetText(name.." "..HIGHLIGHT_FONT_COLOR_CODE..FRIENDS_FRIENDS_MUTUAL_TEXT);
else
friendsButton.name:SetText(name);
end
friendsButton.name:SetTextColor(GRAY_FONT_COLOR .r, GRAY_FONT_COLOR .g, GRAY_FONT_COLOR .b);
elseif ( requested[friendID] ) then
friendsButton.name:SetText(name.." "..HIGHLIGHT_FONT_COLOR_CODE..FRIENDS_FRIENDS_REQUESTED_TEXT);
friendsButton:Disable();
friendsButton.name:SetTextColor(GRAY_FONT_COLOR .r, GRAY_FONT_COLOR .g, GRAY_FONT_COLOR .b);
else
friendsButton.name:SetText(name);
friendsButton:Enable();
friendsButton.name:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
if ( selection == friendID ) then
haveSelection = true;
friendsButton:LockHighlight();
else
friendsButton:UnlockHighlight();
end
end
friendsButton.friendID = friendID;
friendsButton:Show();
end
end
if ( haveSelection ) then
FriendsFriendsSendRequestButton:Enable();
else
FriendsFriendsSendRequestButton:Disable();
end
FauxScrollFrame_Update(FriendsFriendsScrollFrame, numFriendsFriends, FRIENDS_FRIENDS_TO_DISPLAY, FRIENDS_FRAME_FRIENDS_FRIENDS_HEIGHT);
end
function FriendsFriendsButton_OnClick(self)
PlaySound("igMainMenuOptionCheckBoxOn");
FriendsFriendsFrame.selection = self.friendID;
FriendsFriendsList_Update();
end
function FriendsFrameIgnoreButton_OnClick(self)
FriendsFrame_SelectSquelched(self.type, self.index);
IgnoreList_Update();
end
function FriendsFriendsFrame_SendRequest()
PlaySound("igCharacterInfoTab");
FriendsFriendsFrame.requested[FriendsFriendsFrame.selection] = true;
BNSendFriendInviteByID(FriendsFriendsFrame.selection, FriendsFriendsNoteEditBox:GetText());
FriendsFriendsFrame_Reset();
FriendsFriendsList_Update();
end
function FriendsFriendsFrame_Close()
StaticPopupSpecial_Hide(FriendsFriendsFrame);
end
function FriendsFriendsFrame_OnEvent(self, event)
if ( event == "BN_REQUEST_FOF_SUCCEEDED" ) then
if ( self:IsShown() ) then
FriendsFriendsFrame.view = FRIENDS_FRIENDS_ALL;
UIDropDownMenu_EnableDropDown(FriendsFriendsFrameDropDown);
UIDropDownMenu_Initialize(FriendsFriendsFrameDropDown, FriendsFriendsFrameDropDown_Initialize);
UIDropDownMenu_SetSelectedValue(FriendsFriendsFrameDropDown, FRIENDS_FRIENDS_ALL);
local waitFrame = FriendsFriendsWaitFrame;
-- need to stop the flashing because it's flashing with showWhenDone set to true
if ( UIFrameIsFlashing(waitFrame) ) then
UIFrameFlashStop(waitFrame);
end
waitFrame:Hide();
FriendsFriendsList_Update();
end
elseif ( event == "BN_REQUEST_FOF_FAILED" ) then
-- FIX ME - need an error here
elseif ( event == "BN_DISCONNECTED" ) then
FriendsFriendsFrame_Close();
end
end
function FriendsFriendsFrame_Reset()
FriendsFriendsSendRequestButton:Disable();
FriendsFriendsNoteEditBox:SetText("");
FriendsFriendsNoteEditBox:ClearFocus();
FriendsFriendsFrame.selection = nil;
end
function FriendsFriendsFrame_Show(presenceID)
local presenceID, givenName, surname = BNGetFriendInfoByID(presenceID);
FriendsFriendsFrameTitle:SetFormattedText(FRIENDS_FRIENDS_HEADER, FRIENDS_BNET_NAME_COLOR_CODE..string.format(BATTLENET_NAME_FORMAT, givenName, surname));
FriendsFriendsFrame.presenceID = presenceID;
UIDropDownMenu_DisableDropDown(FriendsFriendsFrameDropDown);
FriendsFriendsFrame_Reset();
FriendsFriendsWaitFrame:Show();
for i = 1, FRIENDS_FRIENDS_TO_DISPLAY, 1 do
_G["FriendsFriendsButton"..i]:Hide();
end
FauxScrollFrame_Update(FriendsFriendsScrollFrame, 0, FRIENDS_FRIENDS_TO_DISPLAY, FRIENDS_FRAME_FRIENDS_FRIENDS_HEIGHT);
StaticPopupSpecial_Show(FriendsFriendsFrame);
BNRequestFOFInfo(presenceID);
end
function CanCooperateWithToon(toonID)
local hasFocus, toonName, client, realmName, faction = BNGetToonInfo(toonID);
if ( realmName == playerRealmName and PLAYER_FACTION_GROUP[faction] == playerFactionGroup ) then
return true;
else
return false;
end
end