vanilla-wow-addons – Rev 1
?pathlinks?
--
-- Define the basic styles.
--
local ConfabStyles = {
[0] = {
info = CONFAB_STYLE1_INFO,
style = 0,
docked = true,
dockpoints = {
[0] = {
point = "TOPLEFT",
relto = "ChatFrame1",
relpoint = "BOTTOMLEFT",
xoff = -5,
yoff = -1
},
[1] = {
point = "TOPRIGHT",
relto = "ChatFrame1",
relpoint = "BOTTOMRIGHT",
xoff = 5,
yoff = -1
}
}
},
[1] = {
info = CONFAB_STYLE2_INFO,
style = 1,
autohide = true, -- overrides the /conflag autohide option
docked = true,
dockpoints = {
[0] = {
point = "BOTTOMLEFT",
relto = "ChatFrame1",
relpoint = "BOTTOMLEFT",
xoff = -5,
yoff = -14
},
[1] = {
point = "BOTTOMRIGHT",
relto = "ChatFrame1",
relpoint = "BOTTOMRIGHT",
xoff = 5,
yoff = -14
}
}
},
[2] = {
info = CONFAB_STYLE3_INFO,
style = 2,
autohide = true, -- overrides the /conflag autohide option
docked = true,
dockpoints = {
[0] = {
point = "TOPLEFT",
relto = "ChatFrame1",
relpoint = "TOPLEFT",
xoff = -5,
yoff = 10
},
[1] = {
point = "TOPRIGHT",
relto = "ChatFrame1",
relpoint = "TOPRIGHT",
xoff = 5,
yoff = 10
}
}
},
[3] = {
info = CONFAB_STYLE4_INFO,
style = 3,
docked = true,
dockpoints = {
[0] = {
point = "BOTTOMLEFT",
relto = "ChatFrame1",
relpoint = "TOPLEFT",
xoff = -5,
yoff = -3
},
[1] = {
point = "BOTTOMRIGHT",
relto = "ChatFrame1",
relpoint = "TOPRIGHT",
xoff = 5,
yoff = -3
}
}
},
["undock"] = {
info = CONFAB_UNDOCKED_INFO,
docked = false,
locked = false
}
};
--
-- Change the chat groups to split out the Officer and Raid channels.
--
ChatTypeGroup["PARTY"] = {
"CHAT_MSG_PARTY"
};
ChatTypeGroup["RAID"] = {
"CHAT_MSG_RAID"
};
ChatTypeGroup["GUILD"] = {
"CHAT_MSG_GUILD",
"GUILD_MOTD"
};
ChatTypeGroup["OFFICER"] = {
"CHAT_MSG_OFFICER"
};
--
-- Add them to the channel filter menu
--
ChannelMenuChatTypeGroups[6] = "RAID";
ChannelMenuChatTypeGroups[7] = "OFFICER";
--
-- Define some local variables
--
local OldEditBox = nil;
local OldChatFrameEditBox = nil;
local PlayerName = nil;
local SLASH_TT = "/tt";
local SLASH_TELLTARGET = "/telltarget";
local SLASH_RT = "/rt";
local SLASH_RETELL = "/retell";
local LastSentTellTarget = nil;
local ShowFlag = false;
local InitDone = false;
--
-- Define global variables
--
CONFAB_VERSION = "1.77"; -- obligatory version
ConfabUser = {}; -- table user data is saved in
ConfabDetails = {
name = "Confab",
description = "Customize the look and placement of the chat edit box",
version = CONFAB_VERSION,
releaseDate = "July 20, 2005",
author = "Kulyeh",
--email = "",
website = "http://www.curse-gaming.com",
category = MYADDONS_CATEGORY_CHAT,
frame = "Confab",
--optionsframe = "HelloWorldOptionsFrame"
};
ConfabHelp = {};
ConfabHelp[1] = string.format(CONFAB_USAGE, "/confab").."\n"..CONFAB_HELP1..
"\n|cffffffff style1|cff00ff00|||cffffffffstyle2|cff00ff00|||cffffffffstyle3|cff00ff00|||cffffffffstyle4 |cff00ff00"..
"\n|cffffffff chatsticky off|cff00ff00|||cffffffffdefault|cff00ff00|||cffffffffconfab|cff00ff00|||cffffffffparty|cff00ff00|||cffffffffguild|cff00ff00|||cffffffffraid|cff00ff00|||cffffffffofficer|cff00ff00|||cffffffffsay|cff00ff00|||cffffffff1-10 |cff00ff00"..
"\n|cffffffff autohide on|cff00ff00|||cffffffffoff |cff00ff00\n|cffffffff undock |r|cff00ff00\n|cffffffff dock |cff00ff00[|cffffffffframe|cff00ff00] |cff00ff00"..
"\n|cffffffff autodock on|cff00ff00|||cffffffffoff |cff00ff00\n|cffffffff lock |cff00ff00\n|cffffffff unlock |cff00ff00"..
"\n|cffffffff enableArrowKeys |cff00ff00\n|cffffffff disableArrowKeys |cff00ff00\n|cffffffff texture |cff00ff00\n|cffffffff alpha |cff00ff00\n\n"..CONFAB_HELP14..
"\n|cffffffff /tt |cff00ff00\n|cffffffff /targettell |cff00ff00\n|cffffffff /telltarget |cff00ff00\n|cffffffff /rt, /retell |cff00ff00"..
"\n|cffffffff /targetsave, /tsave |cff00ff00\n|cffffffff /targetrestore, /trestore |cff00ff00";
function Confab_OnLoad()
if (not DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME = ChatFrame1;
end
if (not SELECTED_CHAT_FRAME) then
SELECTED_CHAT_FRAME = ChatFrame1;
end
if (DEFAULT_CHAT_FRAME.editBox) then
OldEditBox = DEFAULT_CHAT_FRAME.editBox;
OldChatFrameEditBox = ChatFrameEditBox;
end
SLASH_CONFAB1 = "/confab";
SLASH_CONFAB2 = "/cf";
SlashCmdList["CONFAB"] = function(msg)
ConfabSlashHandler(msg);
end
if (SlashCmdList["RT"] == nil) then
SLASH_RT1 = SLASH_RT;
SLASH_RT2 = SLASH_RETELL;
SlashCmdList["RT"] = function(msg)
--Confab_ReTell()
end
end
SLASH_TT1 = SLASH_TT;
SlashCmdList["TT"] = function(msg)
Confab_TT(msg);
end
SLASH_TARGETTELL1 = "/targettell";
SlashCmdList["TARGETTELL"] = function(msg)
Confab_TT();
end
SLASH_TELLTARGET1 = SLASH_TELLTARGET;
SlashCmdList["TELLTARGET"] = function(msg)
if (msg ~= nil and strlen(msg) > 0) then
Confab_TT(msg);
end;
end
SLASH_SAVETARGET1 = "/targetsave";
SLASH_SAVETARGET2 = "/tsave";
SlashCmdList["SAVETARGET"] = function(msg)
Confab_SaveTarget();
end
SLASH_LOADTARGET1 = "/targetrestore";
SLASH_LOADTARGET2 = "/trestore";
SlashCmdList["LOADTARGET"] = function(msg)
Confab_LoadTarget();
end
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("UNIT_NAME_UPDATE");
end
function Confab_RegisterUltimateUI()
UltimateUI_RegisterConfiguration(
"UUI_CONFAB",
"SECTION",
"Confab",
"Options to configure your chat edit box."
);
UltimateUI_RegisterConfiguration(
"UUI_CONFAB_SEPARATOR",
"SEPARATOR",
"Confab",
"Options to configure your chat edit box."
);
UltimateUI_RegisterConfiguration(
"UUI_CONFAB_UNLOCK",
"CHECKBOX",
"Unlock edit box",
"Check to allow dragging of the edit box.",
Confab_Toggle,
1
);
end
function Confab_Toggle(arg)
if( arg == 1 ) then
if (ConfabUser[PlayerName].currentstyle.docked) then
if (ConfabUser[PlayerName].autodock) then
ConfabUser[PlayerName].autodock = false;
Confab:Hide();
end
Confab_SetStyle(ConfabStyles["undock"], ConfabUser[PlayerName].autohide);
end
if (ConfabUser[PlayerName].currentstyle.locked) then
ConfabUser[PlayerName].currentstyle.locked = false;
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, ConfabUser[PlayerName].autohide);
end
elseif( arg == 0) then
if (not ConfabUser[PlayerName].currentstyle.locked) then
ConfabUser[PlayerName].currentstyle.locked = true;
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, ConfabUser[PlayerName].autohide);
end
else
DEFAULT_CHAT_FRAME:AddMessage("Confab_Toggle(arg) returned invalid arg.");
end
end
local variablesLoaded = false;
function Confab_OnEvent(event)
if (event == "VARIABLES_LOADED") then
Confab_RegisterUltimateUI();
variablesLoaded = true;
if (not PlayerName) then
local playerName = UnitName("player");
if (playerName ~= UKNOWNBEING and playerName ~= UNKNOWNOBJECT) then
PlayerName = playerName .. ":"..GetCVar("realmName");
Confab_Init();
end
else
Confab_Init();
end
if(myAddOnsFrame_Register) then
-- Register the addon in myAddOns
myAddOnsFrame_Register(ConfabDetails, ConfabHelp);
end
elseif (event == "UNIT_NAME_UPDATE" and arg1 == "player") then
local playerName = UnitName("player");
if (playerName ~= UKNOWNBEING and playerName ~= UNKNOWNOBJECT) then
if (PlayerName == nil) then
PlayerName = playerName .. ":"..GetCVar("realmName");
if (variablesLoaded) then
Confab_Init();
end
end
end
end
end
-- used for the autodock option.
function Confab_OnUpdate(elapsed)
if (InitDone) then
local chatFrame, chatTab;
for j=1, NUM_CHAT_WINDOWS do
chatFrame = getglobal("ChatFrame"..j);
chatTab = getglobal("ChatFrame"..j.."Tab");
local tabname = chatTab:GetText();
if (tabname ~= COMBAT_LOG and chatFrame:IsVisible() and MouseIsOver(chatFrame, 45, -10, -5, 5)) then
local name = chatFrame:GetName();
if (chatFrame.isDocked) then
if (SELECTED_DOCK_FRAME == chatFrame) then
if (chatFrame.editBox.dockedTo and chatFrame.editBox.dockedTo ~= name) then
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, ConfabUser[PlayerName].autohide, name);
Confab_SetChannelSticky(chatFrame.editBox);
end
return;
end
else
if (chatFrame.editBox.dockedTo and chatFrame.editBox.dockedTo ~= name) then
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, ConfabUser[PlayerName].autohide, name);
Confab_SetChannelSticky(chatFrame.editBox);
end
return;
end
end
end
end
end
function Confab_SetEditBox(editBox)
-- copy over some of the basic stuff from the old editbox to the new one.
editBox.chatType = ChatFrameEditBox.chatType;
editBox.channelTarget = ChatFrameEditBox.channelTarget;
editBox.stickyType = ChatFrameEditBox.stickyType;
editBox.lastTell = ChatFrameEditBox.lastTell;
editBox.tellTarget = ChatFrameEditBox.tellTarget;
if (ChatFrameEditBox.Org_IsVisible) then
ChatFrameEditBox.IsVisible = ChatFrameEditBox.Org_IsVisible;
ChatFrameEditBox.Org_IsVisible = nil;
end
if (ChatFrameEditBox.Org_Hide) then
ChatFrameEditBox.Hide = ChatFrameEditBox.Org_Hide;
ChatFrameEditBox.Org_Hide = nil;
end
-- re-assign the global variable to the new edit box.
ChatFrameEditBox = editBox;
-- Since I have to muck with these to make the default Blizzard code to correctly work
-- with autohide off, save the originals off and re-assign
ChatFrameEditBox.Org_IsVisible = ChatFrameEditBox.IsVisible;
ChatFrameEditBox.IsVisible = Confab_IsVisible;
ChatFrameEditBox.Org_Hide = ChatFrameEditBox.Hide;
ChatFrameEditBox.Hide = Confab_Hide;
local chatFrame = nil;
local chatFrameName = nil;
local chatTab = nil;
-- Iterate through each of the chatframes and assign the editbox to the new one.
for i=1, NUM_CHAT_WINDOWS do
chatFrameName = "ChatFrame"..i;
chatTab = getglobal(chatFrameName.."Tab");
chatFrame = getglobal(chatFrameName);
chatFrame.editBox = editBox;
-- Since we are iterating through the chatframes, initialize the filter menu to correctly
-- assign the Raid and Officer filters (since I have to save that info myself).
if (ConfabUser[PlayerName][chatFrameName]) then
if (ConfabUser[PlayerName][chatFrameName]["RAID"]) then
ChatFrame_AddMessageGroup(chatFrame, "RAID");
end
if (ConfabUser[PlayerName][chatFrameName]["OFFICER"]) then
ChatFrame_AddMessageGroup(chatFrame, "OFFICER");
end
end
-- Again, since we are iterating through the chatframes, set the chatframe sticky based on the chat tab text.
Confab_SetChatFrameSticky(chatFrame, chatTab:GetText());
end
-- Save which editbox we are using
ConfabUser.editbox = editBox:GetName();
end
local Org_ChatEdit_OnSpacePressed = ChatEdit_OnSpacePressed;
local Org_ChatEdit_OnEscapePressed = ChatEdit_OnEscapePressed;
local Org_ChatEdit_ParseText = ChatEdit_ParseText;
local Org_ChatFrame_OpenChat = ChatFrame_OpenChat;
local Org_ChatFrame_OnEvent = ChatFrame_OnEvent;
local Org_FCF_Close = FCF_Close;
local Org_FCFMessageTypeDropDown_OnClick = FCFMessageTypeDropDown_OnClick;
local Org_FCF_OpenNewWindow = FCF_OpenNewWindow;
local Org_FCF_SetWindowName = FCF_SetWindowName;
local Org_FCF_Tab_OnClick = FCF_Tab_OnClick;
local Org_FCF_UnDockFrame = FCF_UnDockFrame;
local Org_FCF_DockFrame = FCF_DockFrame;
local Org_FCF_OnUpdate = FCF_OnUpdate;
local Org_ChatLock_OpenChat = ChatLock_OpenChat;
-- Confab main init method.
function Confab_Init()
-- hide the main frame so events and updates are turned off
Confab:Hide();
-- don't need these anymore, so might as well unregister them
this:UnregisterEvent("VARIABLES_LOADED");
this:UnregisterEvent("UNIT_NAME_UPDATE");
if (Sea) then
Sea.util.hook("ChatEdit_OnSpacePressed", "Confab_ChatEdit_OnSpacePressed", "hide");
Sea.util.hook("ChatEdit_OnEscapePressed", "Confab_ChatEdit_OnEscapePressed", "replace");
Sea.util.hook("ChatEdit_ParseText", "Confab_ChatEdit_ParseText", "before");
Sea.util.hook("ChatFrame_OpenChat", "Confab_ChatFrame_OpenChat", "replace");
Sea.util.hook("ChatFrame_OnEvent", "Confab_ChatFrame_OnEvent", "after");
Sea.util.hook("FCF_Close", "Confab_FCF_Close", "before");
Sea.util.hook("FCFMessageTypeDropDown_OnClick", "Confab_FCFMessageTypeDropDown_OnClick", "before");
Sea.util.hook("FCF_OpenNewWindow", "Confab_FCF_OpenNewWindow", "after");
Sea.util.hook("FCF_SetWindowName", "Confab_FCF_SetWindowName", "after");
Sea.util.hook("FCF_Tab_OnClick", "Confab_FCF_Tab_OnClick", "replace"); -- Might have to change this to "hide"
Sea.util.hook("FCF_UnDockFrame", "Confab_FCF_UnDockFrame", "after");
Sea.util.hook("FCF_DockFrame", "Confab_FCF_DockFrame", "after");
Sea.util.hook("FCF_OnUpdate", "Confab_FCF_OnUpdate", "before");
else
-- Reset these as they might have changed since being loaded.
Org_ChatEdit_OnSpacePressed = ChatEdit_OnSpacePressed;
Org_ChatEdit_OnEscapePressed = ChatEdit_OnEscapePressed;
Org_ChatEdit_ParseText = ChatEdit_ParseText;
Org_ChatFrame_OpenChat = ChatFrame_OpenChat;
Org_ChatFrame_OnEvent = ChatFrame_OnEvent;
Org_FCF_Close = FCF_Close;
Org_FCFMessageTypeDropDown_OnClick = FCFMessageTypeDropDown_OnClick;
Org_FCF_OpenNewWindow = FCF_OpenNewWindow;
Org_FCF_SetWindowName = FCF_SetWindowName;
Org_FCF_Tab_OnClick = FCF_Tab_OnClick;
Org_FCF_UnDockFrame = FCF_UnDockFrame;
Org_FCF_DockFrame = FCF_DockFrame;
Org_FCF_OnUpdate = FCF_OnUpdate;
ChatEdit_OnSpacePressed = Confab_ChatEdit_OnSpacePressed;
ChatEdit_OnEscapePressed = Confab_ChatEdit_OnEscapePressed;
ChatEdit_ParseText = Confab_ChatEdit_ParseText;
ChatFrame_OpenChat = Confab_ChatFrame_OpenChat;
ChatFrame_OnEvent = Confab_ChatFrame_OnEvent;
FCF_Close = Confab_FCF_Close;
FCFMessageTypeDropDown_OnClick = Confab_FCFMessageTypeDropDown_OnClick;
FCF_OpenNewWindow = Confab_FCF_OpenNewWindow;
FCF_SetWindowName = Confab_FCF_SetWindowName;
FCF_Tab_OnClick = Confab_FCF_Tab_OnClick;
FCF_UnDockFrame = Confab_FCF_UnDockFrame;
FCF_DockFrame = Confab_FCF_DockFrame;
FCF_OnUpdate = Confab_FCF_OnUpdate;
end
-- ChatLock mod Fix: replace ChatLock_OpenChat from the Chatlock mod with a corrected version.
if (ChatLock_OpenChat and CHATLOCK_VERSION) then
local version = tonumber(CHATLOCK_VERSION);
if (version and version <= 2.1) then
ChatLock_OpenChat = Confab_ChatLock_OpenChatFix;
end
end
-- is this a new player, if it is create the entry and make some default assignments
if (not ConfabUser[PlayerName]) then
ConfabUser[PlayerName] = {};
end
if (not ConfabUser[PlayerName].currentstyle) then
ConfabUser[PlayerName].currentstyle = ConfabStyles[0];
end
if (ConfabUser[PlayerName].autohide == nil) then
ConfabUser[PlayerName].autohide = true;
end
-- set the default sticky and reset some of the depricated sicky values from prior versions
if (not ConfabUser[PlayerName].sticky or ConfabUser[PlayerName].sticky == "auto") then
ConfabUser[PlayerName].sticky = "default";
elseif (ConfabUser[PlayerName].sticky == "on") then
ConfabUser[PlayerName].sticky = "off";
elseif (ConfabUser[PlayerName].sticky == "confab") then
ChatTypeInfo["OFFICER"].sticky = 1;
ChatTypeInfo["CHANNEL"].sticky = 1;
end
-- set the Raid and Officer menu check boxs to be selected by default
if (not ConfabUser[PlayerName]["ChatFrame1"]) then
ConfabUser[PlayerName]["ChatFrame1"] = {};
ConfabUser[PlayerName]["ChatFrame1"]["RAID"] = 1;
ConfabUser[PlayerName]["ChatFrame1"]["OFFICER"] = 1;
end
if (not ConfabUser.editbox) then
ConfabUser.editbox = "ConfabEditBoxArrowsEnabled"
end
Confab_SetEditBox(getglobal(ConfabUser.editbox));
if (ConfabUser[PlayerName].alpha ~= nil) then
ConfabSetAlpha(ConfabUser[PlayerName].alpha);
end
if (ConfabUser[PlayerName].texture) then
ConfabSetTexture(ConfabUser[PlayerName].texture);
end
local relto = ConfabUser[PlayerName].relto;
local chatFrame = getglobal(relto);
local selDockFrame = SELECTED_DOCK_FRAME:GetName();
if (relto and chatFrame.isDocked and selDockFrame ~= relto) then
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, ConfabUser[PlayerName].autohide, selDockFrame);
else
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, ConfabUser[PlayerName].autohide);
end
Confab_SetChannelSticky(ChatFrameEditBox)
if (ConfabUser[PlayerName].autodock) then
Confab:Show();
end
if (SELECTED_DOCK_FRAME ~= ChatFrame1) then
FCF_SelectDockFrame(ChatFrame1);
ChatFrameEditBox.chatFrame = ChatFrame1;
end
InitDone = true;
end
--
-- code that determines whether you want to move or resize the editbox
-- If the cursor is in the left most region it resizes to the left
-- If the cursor is in the right most region it resizes to the right
-- Otherwise the cursor is somewhere in the middle, so do a move
--
function ConfabMoveOrResize()
if (MouseIsOver(ChatFrameEditBox)) then
local cx, cy = GetCursorPosition();
local scale = ChatFrameEditBox:GetScale();
local left = ChatFrameEditBox:GetLeft() * scale;
local right = ChatFrameEditBox:GetRight() * scale;
local phi = math.floor((right-left)/5);
if (cx < (left+phi) and ChatFrameEditBox:IsResizable()) then
ChatFrameEditBox:StartSizing("LEFT");
return;
end
if (cx > (right-phi) and ChatFrameEditBox:IsResizable()) then
ChatFrameEditBox:StartSizing("RIGHT");
return;
end
if (ChatFrameEditBox:IsMovable()) then
ChatFrameEditBox:StartMoving()
end
end
end
--
-- Save the current frame position so we can put it back there on relog
--
function ConfabSavePosition()
if (not ConfabUser[PlayerName].currentstyle.docked) then
ConfabUser[PlayerName].currentstyle.left = ChatFrameEditBox:GetLeft();
ConfabUser[PlayerName].currentstyle.top = ChatFrameEditBox:GetTop();
ConfabUser[PlayerName].currentstyle.width = ChatFrameEditBox:GetWidth();
end
end
--
-- function to handle the Confab slash commands
--
function ConfabSlashHandler(orgMsg)
msg = string.lower(orgMsg);
if (msg == "style1") then
Confab_SetStyle(ConfabStyles[0], ConfabUser[PlayerName].autohide);
elseif (msg == "style2") then
Confab_SetStyle(ConfabStyles[1], ConfabUser[PlayerName].autohide);
elseif (msg == "style3") then
Confab_SetStyle(ConfabStyles[2], ConfabUser[PlayerName].autohide);
elseif (msg == "style4") then
Confab_SetStyle(ConfabStyles[3], ConfabUser[PlayerName].autohide);
elseif (string.find(msg, "^(texture)")) then
local _, _, _, _, value = string.find(orgMsg, "^(%a+)(%s+)([^%s]+)");
if (not value) then
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_TEXTURE_SETTO..ConfabUser[PlayerName].texture);
else
ConfabSetTexture(value);
end
elseif (string.find(msg, "^(alpha)")) then
local _, _, _, value = string.find(msg, "alpha(%s+)([^%s]+)");
local num = tonumber(value);
if (num ~= nil) then
ConfabSetAlpha(num);
else
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_ALPHA_SETTO..ChatFrameEditBox:GetAlpha());
end
elseif (string.find(msg, "^(autohide)")) then
local _, _, _, flag = string.find(msg, "autohide(%s+)([^%s]+)");
if (flag == nil) then
if (ConfabUser[PlayerName].autohide) then
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_AUTOHIDE_ON);
else
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_AUTOHIDE_OFF);
end
elseif (flag == "on") then
ConfabUser[PlayerName].autohide = true;
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, true);
elseif (flag == "off") then
ConfabUser[PlayerName].autohide = false;
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, false);
end
elseif (msg == "undock") then
if (ConfabUser[PlayerName].currentstyle.docked) then
if (ConfabUser[PlayerName].autodock) then
ConfabUser[PlayerName].autodock = false;
Confab:Hide();
end
Confab_SetStyle(ConfabStyles["undock"], ConfabUser[PlayerName].autohide);
end
elseif (string.find(msg, "^(autodock)")) then
local _, _, _, flag = string.find(msg, "autodock(%s+)([^%s]+)");
if (flag == nil) then
if (Confab:IsVisible()) then
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_AUTODOCK_ON);
else
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_AUTODOCK_OFF);
end
elseif (flag == "on") then
if (ConfabUser[PlayerName].currentstyle.docked) then
Confab:Show();
elseif (not ConfabUser[PlayerName].autodock) then
ConfabUser[PlayerName].relto = nil
Confab_SetStyle(ConfabStyles[ConfabUser[PlayerName].oldstyle], ConfabUser[PlayerName].autohide);
Confab:Show();
end
ConfabUser[PlayerName].autodock = true;
elseif (flag == "off") then
ConfabUser[PlayerName].autodock = false;
Confab:Hide();
end
elseif (string.find(msg, "^(dock)")) then
local _, _, _, _, frame = string.find(orgMsg, "^(%a+)(%s+)([^%s]+)");
if (frame) then
Confab_SetStyle(ConfabStyles[1], ConfabUser[PlayerName].autohide, frame);
elseif ((not ConfabUser[PlayerName].currentstyle.docked)) then
Confab_SetStyle(ConfabStyles[ConfabUser[PlayerName].oldstyle], ConfabUser[PlayerName].autohide, SELECTED_DOCK_FRAME:GetName());
end
elseif (msg == "lock") then
if (not ConfabUser[PlayerName].currentstyle.locked) then
ConfabUser[PlayerName].currentstyle.locked = true;
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, ConfabUser[PlayerName].autohide);
end
elseif (msg == "unlock") then
if (ConfabUser[PlayerName].currentstyle.locked) then
ConfabUser[PlayerName].currentstyle.locked = false;
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, ConfabUser[PlayerName].autohide);
end
elseif (msg == "enablearrowkeys") then
Confab_SetEditBox(ConfabEditBoxArrowsEnabled);
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, ConfabUser[PlayerName].autohide);
elseif (msg == "disablearrowkeys") then
Confab_SetEditBox(ConfabEditBoxArrowsDisabled);
Confab_SetStyle(ConfabUser[PlayerName].currentstyle, ConfabUser[PlayerName].autohide);
elseif (string.find(msg, "^(chatsticky)")) then
ChatTypeInfo["OFFICER"].sticky = 0;
ChatTypeInfo["CHANNEL"].sticky = 0;
local _, _, _, flag = string.find(msg, "chatsticky(%s+)([^%s]+)");
if (flag == nil) then
local tmp = string.gsub(ConfabUser[PlayerName].sticky, "%a+(%d%d?)", "%1");
if (tmp == ConfabUser[PlayerName].sticky) then
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_STICKY_CURRENTLY_SETTO.. ConfabUser[PlayerName].sticky.."'");
else
local channelNum, channelName = GetChannelName(tmp);
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_STICKY_CURRENTLY_SETTO.. channelName.."'");
end
elseif (flag == "off") then
ConfabUser[PlayerName].sticky = "off";
ChatFrameEditBox.stickyType = "SAY"; -- need to set the sticky to something other then what it was even though its not used
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_STICKY_SETTO.."off'");
elseif (flag == "default") then
ConfabUser[PlayerName].sticky = "default";
ChatFrameEditBox.stickyType = "SAY";
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_STICKY_SETTO.."default'");
elseif (flag == "guild" or flag == "officer" or flag == "party" or flag == "raid" or flag == "say") then
ConfabUser[PlayerName].sticky = string.upper(flag);
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_STICKY_SETTO.. flag.."'");
elseif (flag >= "0" and flag <= "9") then
local channelNum, channelName = GetChannelName(flag);
if ( channelNum > 0 ) then
ConfabUser[PlayerName].sticky = "CHANNEL"..flag;
ChatFrameEditBox.stickyType = "SAY";
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_STICKY_SETTO.. channelName.."'");
end
elseif (flag == "confab") then
ChatTypeInfo["OFFICER"].sticky = 1;
ChatTypeInfo["CHANNEL"].sticky = 1;
ConfabUser[PlayerName].sticky = "confab";
ChatFrameEditBox.stickyType = "SAY";
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_STICKY_SETTO.."confab'");
end
else
Confab_Help();
end
end
--
-- Confab help
--
function Confab_Help()
DEFAULT_CHAT_FRAME:AddMessage(string.format(CONFAB_USAGE, "/confab"));
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_HELP1);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff style1|cff00ff00|||cffffffffstyle2|cff00ff00|||cffffffffstyle3|cff00ff00|||cffffffffstyle4 |cff00ff00"..CONFAB_HELP2);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff autohide on|cff00ff00|||cffffffffoff |cff00ff00"..CONFAB_HELP6);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff undock |r|cff00ff00"..CONFAB_HELP7);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff dock |cff00ff00[|cffffffffframe|cff00ff00] |cff00ff00"..CONFAB_HELP8);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff autodock on|cff00ff00|||cffffffffoff |cff00ff00"..CONFAB_HELP5);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff lock |cff00ff00"..CONFAB_HELP9);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff unlock |cff00ff00"..CONFAB_HELP10);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff chatsticky off|cff00ff00|||cffffffffdefault|cff00ff00|||cffffffffparty|cff00ff00|||cffffffffguild|cff00ff00|||cffffffffraid|cff00ff00|||cffffffffofficer|cff00ff00|||cffffffffsay|cff00ff00|||cffffffff1-10 |cff00ff00"..CONFAB_HELP11);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff enableArrowKeys |cff00ff00"..CONFAB_HELP12);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff disableArrowKeys |cff00ff00"..CONFAB_HELP13);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff texture |cff00ff00"..CONFAB_HELP21);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff alpha |cff00ff00"..CONFAB_HELP22);
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_HELP14);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff /tt |cff00ff00"..CONFAB_HELP15);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff /targettell |cff00ff00"..CONFAB_HELP16);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff /telltarget |cff00ff00"..CONFAB_HELP20);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff /rt, /retell |cff00ff00"..CONFAB_HELP17);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff /targetsave, /tsave |cff00ff00"..CONFAB_HELP18);
DEFAULT_CHAT_FRAME:AddMessage("|cffffffff /targetrestore, /trestore |cff00ff00"..CONFAB_HELP19);
end
--
-- Set style
--
function Confab_SetStyle(style, autohide, newrelto)
if (newrelto) then
ConfabUser[PlayerName].relto = newrelto;
end
if (style) then
ChatFrameEditBox:ClearAllPoints();
if (style.docked) then
style.locked = true; -- Docked is always locked, so override the style
local points = style.dockpoints;
local cnt = 0;
local point = {};
if (points) then
point = points[cnt];
end
while (point) do
local basepoint = point.point;
if (basepoint == nil) then basepoint = "CENTER"; end;
local relto = point.relto;
if (relto == nil) then relto = "UIParent"; end;
local relpoint = point.relpoint;
if (relpoint == nil) then relpoint = "CENTER"; end;
local xoff = point.xoff;
local yoff = point.yoff;
if (xoff == nil) then xoff = 0; end;
if (yoff == nil) then yoff = 0; end;
if (ConfabUser[PlayerName].relto) then
local s, m = pcall(ChatFrameEditBox.SetPoint,ChatFrameEditBox, basepoint, ConfabUser[PlayerName].relto, relpoint, xoff, yoff);
if (not s) then -- If we had an error (like invalid framename) then use the template frame name.
ConfabUser[PlayerName].relto = nil;
DEFAULT_CHAT_FRAME:AddMessage(m);
ChatFrameEditBox:SetPoint(basepoint, relto, relpoint, xoff, yoff);
else
relto = ConfabUser[PlayerName].relto;
end
else
ChatFrameEditBox:SetPoint(basepoint, relto, relpoint, xoff, yoff);
end
ChatFrameEditBox.dockedTo = relto;
ChatFrameEditBox.chatFrame = getglobal(relto);
cnt = cnt + 1;
point = points[cnt]
end
else
ChatFrameEditBox.chatFrame = SELECTED_DOCK_FRAME;
ChatFrameEditBox.dockedTo = nil;
if (style.left and style.top) then
ChatFrameEditBox:SetPoint("TOPLEFT","UIParent","BOTTOMLEFT", style.left, style.top);
else
ChatFrameEditBox:SetPoint("CENTER", "UIParent", "CENTER", 0, 0); -- default undocked placement
end
if (style.width) then
ChatFrameEditBox:SetWidth(style.width);
else
ChatFrameEditBox:SetWidth(400); -- default width
end
end
if (style.info == nil) then style.info = CONFAB_STYLE_UNKNOWN; end;
style.text = style.info;
if (autohide == nil) then autohide = true; end;
if (style.autohide ~= nil) then autohide = style.autohide; end;
ConfabUser[PlayerName].autohide = autohide;
if (not autohide and not ShowFlag) then
ChatFrameEditBox:EnableKeyboard(false);
ChatFrameEditBox:Show();
Confab_ClearHeader(ChatFrameEditBox);
style.text = style.text .. CONFAB_STYLE_NOAUTOHIDE;
end
if (style.locked) then
ChatFrameEditBox:SetMovable(false);
ChatFrameEditBox:SetResizable(false);
style.text = style.text .. CONFAB_STYLE_LOCKED;
else
ChatFrameEditBox:SetMovable(true);
ChatFrameEditBox:SetResizable(true);
style.text = style.text .. CONFAB_STYLE_UNLOCKED
end
if (ConfabUser[PlayerName].currentstyle.style ~= nil) then
ConfabUser[PlayerName].oldstyle = ConfabUser[PlayerName].currentstyle.style; -- remember previous style so we use it when we redock
end
ConfabUser[PlayerName].currentstyle = style;
end
end
--
-- Set editbox artwork alpha (0 is transparent, 1 is full opaque)
--
function ConfabSetAlpha(alpha)
if (alpha < 0 or alpha > 1) then
return;
end
getglobal(ConfabUser.editbox.."Left"):SetAlpha(alpha);
getglobal(ConfabUser.editbox.."Middle"):SetAlpha(alpha);
getglobal(ConfabUser.editbox.."Right"):SetAlpha(alpha);
ConfabUser[PlayerName].alpha = alpha;
end
--
-- Set editbox artwork texture
--
function ConfabSetTexture(tname)
if (tname == nil) then
return;
end
local path = nil;
if (string.find(tname, "\\")) then
path = tname;
else
path = "Interface\\AddOns\\Confab\\Textures\\"..tname;
end
-- clear the current textures so we can reload an existing texture
getglobal(ConfabUser.editbox.."Left"):SetTexture("");
getglobal(ConfabUser.editbox.."Middle"):SetTexture("");
getglobal(ConfabUser.editbox.."Right"):SetTexture("");
-- load the new artwork texture
getglobal(ConfabUser.editbox.."Left"):SetTexture(path);
getglobal(ConfabUser.editbox.."Middle"):SetTexture(path);
getglobal(ConfabUser.editbox.."Right"):SetTexture(path);
-- save the pathname to the artwork
ConfabUser[PlayerName].texture = tname;
end
--
-- Set the frame sticky based on the name
-- name can be in the players locale or english
--
function Confab_SetChatFrameSticky(chatframe, name)
if (chatframe ~= ChatFrame1) then
chatframe.sticky = nil;
local tmp = strupper(name);
if (tmp == strupper(CHAT_MSG_GUILD) or tmp == "GUILD") then
chatframe.sticky = "GUILD";
elseif (tmp == strupper(CHAT_MSG_PARTY) or tmp == "PARTY") then
chatframe.sticky = "PARTY";
elseif (tmp == strupper(CHAT_MSG_RAID) or tmp == "RAID") then
chatframe.sticky = "RAID";
elseif (tmp == strupper(CHAT_MSG_OFFICER) or tmp == "OFFICER") then
chatframe.sticky = "OFFICER";
else
local tell = gsub(CHAT_WHISPER_SEND, "%%s", ""); -- get rid of the %s
tell = gsub(tell, "%s", ""); -- get rid of all the whitespace
tell = gsub(tell, "(%a+):", "%1"); -- match the text that is left minus the :
if (string.find(tmp, strupper(tell)) or string.find(tmp, "^(TELL)")) then
chatframe.sticky = "WHISPER";
end
end
end
end
function Confab_SetChannelSticky(editBox)
if (editBox.chatFrame) then
local chatFrameSticky = editBox.chatFrame.sticky;
if (chatFrameSticky) then
if (chatFrameSticky ~= editBox.chatType) then
local tmp = editBox.chatType;
editBox.chatType = chatFrameSticky;
if (chatFrameSticky == "WHISPER") then
local lastTell = ChatEdit_GetLastTellTarget(editBox);
if (strlen(lastTell) > 0) then
editBox.tellTarget = lastTell;
elseif (not editBox.tellTarget) then
editBox.chatType = tmp;
end
end
if (ShowFlag) then
ChatEdit_UpdateHeader(editBox);
end
end
elseif (PlayerName and (ConfabUser[PlayerName].sticky == "default" or ConfabUser[PlayerName].sticky == "confab")) then
if (editBox.chatFrame.oldChatType) then
editBox.chatType = editBox.chatFrame.oldChatType;
else
editBox.chatType = editBox.stickyType;
end
if (ShowFlag) then
ChatEdit_UpdateHeader(editBox);
end
elseif (PlayerName and ConfabUser[PlayerName].sticky ~= "off") then
local tmp = string.gsub(ConfabUser[PlayerName].sticky, "%a+(%d%d?)", "%1");
if (tmp == ConfabUser[PlayerName].sticky) then
editBox.chatType = ConfabUser[PlayerName].sticky;
else
editBox.channelTarget = tonumber(tmp);
editBox.chatType = "CHANNEL"
end
if (ShowFlag) then
ChatEdit_UpdateHeader(editBox);
end
end
end
end
local prevTarget = nil;
local isPlayer = nil;
local isFriend = nil;
function Confab_SaveTarget()
if (UnitExists("target")) then
prevTarget = UnitName("target");
isPlayer = UnitIsPlayer("target");
isFriend = UnitIsFriend("player", "target");
else
prevTarget = nil;
isPlayer = nil;
isFriend = nil;
end
end
function Confab_LoadTarget()
if (SpellIsTargeting()) then
SpellStopTargeting()
end;
if (prevTarget == nil) then
ClearTarget();
elseif (isPlayer or (not isPlayer and isFriend)) then
TargetByName(prevTarget)
if (UnitName("target") ~= prevTarget) then
ClearTarget();
end
else
TargetLastEnemy()
end
end
function Confab_GetFriendlyTarget()
local target = UnitName("target");
if (target) then
if (UnitIsFriend("player", "target") and UnitIsPlayer("target") and UnitExists("target")) then
return target;
end
end
return nil;
end
-- The SlashCmdList half of /tt function and for /targettell key bind
function Confab_TT(msg)
if (msg ~= nil and strlen(msg) > 0) then
local target = Confab_GetFriendlyTarget();
if (target) then
SendChatMessage(msg, "WHISPER", GetLanguageByIndex(0), target);
end
return;
end
local lastname = ChatEdit_GetLastTellTarget(DEFAULT_CHAT_FRAME.editBox);
if (strlen(lastname) > 0) then
Confab_SaveTarget();
TargetByName(lastname);
if (UnitName("target") ~= lastname) then
Confab_LoadTarget();
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_UNABLE_TO_TARGET..lastname);
end
end
end
-- Function for /telltarget key bind
function Confab_TellTarget(target)
if (not target) then
target = Confab_GetFriendlyTarget();
end
if (target) then
ChatFrameEditBox.tellTarget = target;
ChatFrameEditBox.chatType = "WHISPER";
ChatEdit_UpdateHeader(ChatFrameEditBox);
ChatFrame_OpenChat("");
end
end
-- Function for /tt key bind
function Confab_TTKeyBind()
local target = Confab_GetFriendlyTarget();
if (target) then
Confab_TellTarget(target);
else
Confab_TT()
end
end
-- Function for /rt key bind
function Confab_ReTell()
if (LastSentTellTarget) then
ChatFrameEditBox.tellTarget = LastSentTellTarget;
ChatFrameEditBox.chatType = "WHISPER";
ChatEdit_UpdateHeader(ChatFrameEditBox);
ChatFrame_OpenChat("");
end
end
function Confab_OnShow()
if (ShowFlag) then
-- This is needed because of the way Blizzard checks for whether your in a party or not in ChatEdit_OnShow actually doesn't work.
if (this.chatType == "PARTY" and (GetNumPartyMembers() == 0)) then
this.chatType = "SAY";
end
ChatEdit_OnShow();
end
end
function Confab_ClearHeader(editBox)
local header = getglobal(editBox:GetName().."Header");
if (header) then
header:SetText("");
editBox:SetTextInsets(-3000, 0, 0, 0); -- since I can't (or don't know how to) disable the cursor, I'll just move it off the scrren
end
end
------------------------------------------------------------------------------------------------------------
-- start of the function hook methods
------------------------------------------------------------------------------------------------------------
function Confab_IsVisible(obj)
return ShowFlag;
end
function Confab_Hide(obj)
if (ConfabUser[PlayerName].autohide) then
obj:Org_Hide();
else
obj:ClearFocus()
Confab_ClearHeader(obj);
obj:EnableKeyboard(false);
end
end
-- Function from the Chatlock mod, this is a corrected version of it.
function Confab_ChatLock_OpenChatFix()
ChatFrame_OpenChat();
Org_ChatLock_OpenChat();
end
-- This makes editing most command history lines possible otherwise ChatEdit_ParseText eats the text.
local SpacePressedFlag = false;
Confab_ChatEdit_OnSpacePressed = function()
local text = ChatFrameEditBox:GetText();
local spccnt = 0;
for w in string.gfind(text, "%s+") do
spccnt = spccnt + 1;
if (spccnt > 2) then return false; end;
end
SpacePressedFlag = true;
if (not Sea) then
Org_ChatEdit_OnSpacePressed()
else
return true;
end
end
Confab_ChatEdit_OnEscapePressed = function(editBox)
if (editBox.chatFrame and not editBox.chatFrame.sticky) then
if (ConfabUser[PlayerName].sticky == "default" or ConfabUser[PlayerName].sticky == "confab") then
editBox.chatType = editBox.stickyType;
elseif (ConfabUser[PlayerName].sticky == "off") then
editBox.stickyType = "SAY";
else
Confab_SetChannelSticky(editBox)
editBox.stickyType = "SAY";
end
else
Confab_SetChannelSticky(editBox);
editBox.stickyType = "SAY";
end
if (not Sea) then
local chatType = editBox.chatType;
Org_ChatEdit_OnEscapePressed(editBox)
editBox.chatType = chatType;
else
editBox:SetText("");
editBox:Hide();
end
ShowFlag = false;
end
Confab_ChatEdit_ParseText = function(editBox, send)
local text = editBox:GetText();
if (strlen(text) > 0 and strsub(text, 1, 1) ~= "/") then
if (send == 1 and editBox.chatType == "WHISPER") then
LastSentTellTarget = editBox.tellTarget;
end
end
if (strlen(text) > 0 and send == 0 and SpacePressedFlag) then
SpacePressedFlag = false;
local command = strupper(gsub(text, "/([^%s]+)(.*)", "/%1", 1));
if (command == strupper(SLASH_TT) or command == strupper(SLASH_TELLTARGET)) then
local target = Confab_GetFriendlyTarget();
if (target) then
editBox.tellTarget = target;
editBox.chatType = "WHISPER";
editBox:SetText("");
ChatEdit_UpdateHeader(editBox);
end
elseif (command == strupper(SLASH_RT) or command == strupper(SLASH_RETELL)) then
if (LastSentTellTarget) then
editBox.tellTarget = LastSentTellTarget;
editBox.chatType = "WHISPER";
editBox:SetText("");
ChatEdit_UpdateHeader(editBox);
end
end
end
if (not Sea) then
Org_ChatEdit_ParseText(editBox, send);
end
end
Confab_ChatFrame_OpenChat = function(text, chatFrame)
if ( not chatFrame ) then
chatFrame = DEFAULT_CHAT_FRAME;
end
if (chatFrame.editBox.chatType == "CHANNEL") then
local channelNum, channelName = GetChannelName(chatFrame.editBox.channelTarget);
if (channelNum <= 0) then
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_STICKY_CHAN_INVALID1);
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_STICKY_CHAN_INVALID2);
chatFrame.editBox.chatType = "SAY"
local tmp = string.gsub(ConfabUser[PlayerName].sticky, "%a+(%d%d?)", "%1");
if (tmp >= "0" and tmp <= "9") then
DEFAULT_CHAT_FRAME:AddMessage(CONFAB_STICKY_CHAN_INVALID3);
ConfabUser[PlayerName].sticky = "default";
end
end
end
ShowFlag = true;
chatFrame.editBox:EnableKeyboard(true);
chatFrame.editBox:SetFocus();
if (not Sea) then
local type = chatFrame.editBox.chatType;
local sticky = chatFrame.editBox.stickyType;
chatFrame.editBox.stickyType = "SAY";
Org_ChatFrame_OpenChat(text, chatFrame);
chatFrame.editBox.stickyType = sticky;
chatFrame.editBox.chatType = type;
else
chatFrame.editBox.setText = 1;
chatFrame.editBox.text = text;
end
if (not ConfabUser[PlayerName].autohide) then
local tmp = this;
this = chatFrame.editBox;
Confab_OnShow();
this = tmp;
else
chatFrame.editBox:Show();
end
if ((chatFrame.editBox.stickyType == "PARTY") and (GetNumPartyMembers() == 0) ) then
if (chatFrame.editBox.chatType ~= "WHISPER") then -- Fix for the reply bug after leaving a party when using the default chat sticky setting
chatFrame.editBox.chatType = "SAY";
ChatEdit_UpdateHeader(chatFrame.editBox);
end
elseif ((chatFrame.editBox.stickyType == "RAID") and (GetNumRaidMembers() == 0) ) then
if (chatFrame.editBox.chatType ~= "WHISPER") then -- Fix for the reply bug after leaving a party when using the default chat sticky setting
chatFrame.editBox.chatType = "SAY";
ChatEdit_UpdateHeader(chatFrame.editBox);
end
end
end
-- makes sure the GM help ticket editbox gets focus
local OrgHelpFrameOpenTicketShow = HelpFrameOpenTicket.Show;
HelpFrameOpenTicket.Show = function(obj)
OrgHelpFrameOpenTicketShow(obj);
HelpFrameOpenTicketText:SetFocus();
end;
Confab_ChatFrame_OnEvent = function(event)
if (not Sea) then
Org_ChatFrame_OnEvent(event);
end
if ((event == "CHAT_MSG_PARTY" or event == "CHAT_MSG_GUILD" or
event == "CHAT_MSG_OFFICER" or event == "CHAT_MSG_RAID") and this ~= ChatFrame1) then
FCF_FlashTab();
end
end
Confab_FCF_Close = function(frame)
if ( not frame ) then
frame = FCF_GetCurrentChatFrame();
end
-- Check to see if we are closing the window the edit box is docked to.
if (frame.editBox.dockedTo == frame:GetName()) then
ConfabUser[PlayerName].relto = nil;
Confab_SetStyle(ConfabStyles[ConfabUser[PlayerName].oldstyle], ConfabUser[PlayerName].autohide);
elseif (frame.editBox.chatFrame == frame) then
frame.editBox.chatFrame = ChatFrame1;
Confab_SetChannelSticky(ChatFrameEditBox);
end
if (not Sea) then
Org_FCF_Close(frame);
end
end
Confab_FCFMessageTypeDropDown_OnClick = function()
-- For some reason the game refuses to save these in chat-cache.txt so I have to save them myself.
if (this.value == "RAID" or this.value == "OFFICER") then
local checked = UIDropDownMenuButton_GetChecked();
local chatFrameName = FCF_GetCurrentChatFrame():GetName();
if (not ConfabUser[PlayerName][chatFrameName]) then
ConfabUser[PlayerName][chatFrameName] = {};
end
if (checked) then
ConfabUser[PlayerName][chatFrameName][this.value] = nil;
else
ConfabUser[PlayerName][chatFrameName][this.value] = 1;
end
end
if (not Sea) then
Org_FCFMessageTypeDropDown_OnClick();
end
end
Confab_FCF_OpenNewWindow = function(name)
if (not Sea) then
Org_FCF_OpenNewWindow(name);
end
local chatFrame;
local chatTab;
local frameName;
for i=1, NUM_CHAT_WINDOWS do
chatFrame = getglobal("ChatFrame"..i);
chatTab = getglobal("ChatFrame"..i.."Tab");
frameName = chatFrame:GetName();
if (chatTab:GetText() == name) then
ChatFrame_AddMessageGroup(chatFrame, "OFFICER");
ChatFrame_AddMessageGroup(chatFrame, "RAID");
if (not ConfabUser[PlayerName][frameName]) then
ConfabUser[PlayerName][frameName] = {};
end
ConfabUser[PlayerName][frameName]["RAID"] = 1;
ConfabUser[PlayerName][frameName]["OFFICER"] = 1;
return;
end
end
end
Confab_FCF_SetWindowName = function(frame, name, doNotSave)
if (not Sea) then
Org_FCF_SetWindowName(frame, name, doNotSave);
end
Confab_SetChatFrameSticky(frame, name);
Confab_SetChannelSticky(ChatFrameEditBox);
end
local prevChatFrameTab = nil;
Confab_FCF_Tab_OnClick = function(button)
if (button == "RightButton" and FCF_Get_ChatLocked()) then
return;
end
--if (not Sea) then
Org_FCF_Tab_OnClick(button);
--end
if (prevChatFrameTab) then
prevChatFrameTab:EnableMouse(true);
prevChatFrameTab = nil;
end
local chatFrame = getglobal("ChatFrame"..this:GetID());
local buttonState = this:GetButtonState();
if ((buttonState == "NORMAL" and chatFrame.isDocked) or
(buttonState == "PUSHED" and FCF_Get_ChatLocked() and chatFrame.isDocked)) then
if (not ChatFrameEditBox.chatFrame.sticky) then
ChatFrameEditBox.chatFrame.oldChatType = ChatFrameEditBox.chatType;
end
ChatFrameEditBox.chatFrame = chatFrame;
Confab_SetChannelSticky(ChatFrameEditBox);
end
if (FCF_Get_ChatLocked()) then
prevChatFrameTab = this;
this:EnableMouse(false);
end
end
Confab_FCF_UnDockFrame = function(frame)
if (not Sea) then
Org_FCF_UnDockFrame(frame);
end
if (ChatFrameEditBox.dockedTo ~= frame:GetName()) then
ChatFrameEditBox.chatFrame = SELECTED_DOCK_FRAME;
Confab_SetChannelSticky(ChatFrameEditBox);
end
end
Confab_FCF_DockFrame = function(frame, index)
if (not Sea) then
Org_FCF_DockFrame(frame, index);
end
ChatFrameEditBox.chatFrame = SELECTED_DOCK_FRAME;
Confab_SetChannelSticky(ChatFrameEditBox);
end
Confab_FCF_OnUpdate = function(elapsed)
if (prevChatFrameTab and not FCF_Get_ChatLocked()) then
prevChatFrameTab:EnableMouse(true);
prevChatFrameTab = nil;
end
if (not Sea) then
Org_FCF_OnUpdate(elapsed);
end
end
Generated by GNU Enscript 1.6.5.90.