You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

847 lines
28 KiB

WindowSoupBowl.available = WindowSoupBowl.available + 1;
WindowSoupBowl.used = WindowSoupBowl.used - 1;
local WIM = WIM;
local DDM = LibStub:GetLibrary("LibDropDownMenu");
-- load message window related default settings.
WIM.db_defaults.displayColors = {
wispIn = {
r=0.5607843137254902,
g=0.03137254901960784,
b=0.7607843137254902
},
wispOut = {
r=1,
g=0.07843137254901961,
b=0.9882352941176471
},
sysMsg = {
r=1,
g=0.6627450980392157,
b=0
},
errorMsg = {
r=1,
g=0,
b=0
},
webAddress = {
r=0,
g=0,
b=1
},
};
WIM.db_defaults.fontSize = 12;
WIM.db_defaults.windowSize = 1;
WIM.db_defaults.windowAlpha = .8;
WIM.db_defaults.windowOnTop = true;
WIM.db_defaults.windowFade = false;
WIM.db_defaults.keepFocus = true;
WIM.db_defaults.keepFocusRested = true;
WIM.db_defaults.autoFocus = false;
WIM.db_defaults.winSize = {
width = 384,
height = 256
};
WIM.db_defaults.winLoc = {
left =242 ,
top =775
};
WIM.db_defaults.winCascade = {
enabled = true,
direction = "downright"
};
local ShortcutCount = 5;
local ofs = 0.000723339 * (GetScreenHeight()/GetScreenWidth() + 1/3) * 70.4;
local radius = ofs / 1.166666666666667;
local SML = LibStub:GetLibrary("LibSharedMedia-3.0"); -- used for font sharing
-- Window Soup Bowl Table: Used to keep track and recycle old windows.
local WindowSoupBowl = {
windowToken = 0,
available = 0,
used = 0,
windows = {
}
}
-- climb up inherritance tree and find parent window recursively.
local function getParentMessageWindow(obj)
if(obj.isParent) then
return obj;
elseif(obj:GetName() == "UIParent") then
return nil;
else
return getParentMessageWindow(obj:GetParent())
end
end
--------------------------------------
-- Widget Script Handlers --
--------------------------------------
local function MessageWindow_MovementControler_OnDragStart()
local window = getParentMessageWindow(this);
if(window) then
window:StartMoving();
window.isMoving = true;
end
end
local function MessageWindow_MovementControler_OnDragStop()
local window = getParentMessageWindow(this);
if(window) then
window:StopMovingOrSizing();
window.isMoving = false;
end
end
local function MessageWindow_FadeControler_OnEnter()
local window = getParentMessageWindow(this);
if(window) then
if(WIM.db.windowFade) then
-- WIM_FadeIn(window.theUser);
end
window.isMouseOver = true;
window.QueuedToHide = false;
end
end
local function MessageWindow_FadeControler_OnLeave()
local window = getParentMessageWindow(this);
if(window) then
if(WIM.db.windowFade) then
if(getglobal(window:GetName().."MsgBox") ~= WIM_EditBoxInFocus) then
-- WIM_FadeOut(window.theUser);
else
window.QueuedToHide = true;
end
end
window.isMouseOver = false;
end
end
local function MessageWindow_Frame_OnShow()
local user = this.theUser;
if(user ~= nil and WIM.windows[user]) then
WIM.windows[user].newMSG = false;
WIM.windows[user].is_visible = true;
if(WIM.db.autoFocus == true) then
getglobal(this:GetName().."MsgBox"):SetFocus();
end
--WIM_WindowOnShow(this);
this.QueuedToHide = false;
--WIM_UpdateScrollBars(getglobal(this:GetName().."ScrollingMessageFrame"));
end
end
local function MessageWindow_Frame_OnHide()
local user = this.theUser;
if(user ~= nil and WIM.windows[user]) then
--WIM_Tabs.lastParent = nil;
--WIM_TabStrip:Hide();
this.isMouseOver = false;
if(WIM.windows[user]) then
WIM.windows[user].is_visible = false;
end
if ( this.isMoving ) then
this:StopMovingOrSizing();
this.isMoving = false;
end
end
end
local function MessageWindow_Frame_OnUpdate()
--if(WIM_Tabs.enabled == true) then
-- WIM_Tabs.x = this:GetLeft();
-- WIM_Tabs.y = this:GetTop();
--end
end
local function MessageWindow_ExitButton_OnEnter()
if(WIM.db.showToolTips == true) then
GameTooltip:SetOwner(this, "ANCHOR_TOPRIGHT");
GameTooltip:SetText(WIM_LOCALIZED_TOOLTIP_SHIFT_CLICK_TO_CLOSE);
end
MessageWindow_FadeControler_OnEnter();
end
local function MessageWindow_ExitButton_OnLeave()
GameTooltip:Hide();
MessageWindow_FadeControler_OnLeave();
end
local function MessageWindow_ExitButton_OnClick()
if(IsShiftKeyDown()) then
--WIM_CloseConvo(this:GetParent().theUser);
-- do some check if tabs are loaded and show next available.
else
this:GetParent():Hide();
end
end
local function MessageWindow_HistoryButton_OnEnter()
if(WIM.db.showToolTips == true) then
GameTooltip:SetOwner(this, "ANCHOR_TOPRIGHT");
GameTooltip:SetText(WIM_LOCALIZED_TOOLTIP_VIEW_HISTORY);
end
MessageWindow_FadeControler_OnEnter();
end
local function MessageWindow_HistoryButton_OnLeave()
GameTooltip:Hide();
MessageWindow_FadeControler_OnLeave();
end
local function MessageWindow_HistoryButton_OnClick()
WIM_HistoryView_Name_Selected = this:GetParent().theUser;
WIM_HistoryView_Filter_Selected = "";
if(WIM_HistoryFrame:IsVisible()) then
WIM_HistoryViewNameScrollBar_Update();
WIM_HistoryViewFiltersScrollBar_Update();
else
WIM_HistoryFrame:Show();
end
end
local function MessageWindow_W2WButton_OnEnter()
local user = this:GetParent().theUser;
local theTip = "WIM Version: |cffffffff"..WIM_W2W[user].version.."|r";
theTip = theTip.."\n"..WIM_W2W_CAPABILITIES..": |cffffffffCoordinates|r";
if(WIM_W2W[user].spec) then theTip = theTip..",\n|cffffffffTalent Spec|r"; end
GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
GameTooltip:SetText(theTip);
MessageWindow_FadeControler_OnEnter();
end
local function MessageWindow_W2WButton_OnLeave()
GameTooltip:Hide();
MessageWindow_FadeControler_OnLeave();
end
local function MessageWindow_W2WButton_Initialize()
local info = {};
info = { };
info.text = "W2W - WIM To WIM";
info.isTitle = true;
DDM.UIDropDownMenu_AddButton(info, DDM.UIDROPDOWNMENU_MENU_LEVEL);
info = { };
info.text = WIM_W2W_TRACKMINIMAP;
info.func = MessageWindow_W2WButtomMenu_OnClick;
info.value = this:GetParent().theUser;
info.checked = this:GetParent().icon.track;
info.tooltipTitle = WIM_W2W_TRACKMINIMAP;
info.tooltipText = WIM_W2W_TRACKMINIMAP_INFO;
DDM.UIDropDownMenu_AddButton(info, DDM.UIDROPDOWNMENU_MENU_LEVEL);
end
local function MessageWindow_W2WButtomMenu_OnClick()
local icon = getglobal(WIM.windows[this.value].frame).icon;
icon.track = not icon.track;
if(icon.track) then
icon:Show();
else
icon:Hide();
end
end
local function MessageWindow_W2WButton_OnClick()
DDM.UIDropDownMenu_Initialize(this:GetParent().w2w_menu, MessageWindow_W2WButton_Initialize);
DDM.ToggleDropDownMenu(1, nil, this:GetParent().w2w_menu, this, -130, -1);
end
local function MessageWindow_IsChattingButton_OnEnter()
if(WIM.db.showToolTips == true) then
local user = this:GetParent().theUser;
local theTip = user.." "..WIM_W2W_IS_TYPING;
GameTooltip:SetOwner(this, "ANCHOR_TOPLEFT");
GameTooltip:SetText(theTip);
end
MessageWindow_FadeControler_OnEnter();
end
local function MessageWindow_IsChattingButton_OnLeave()
GameTooltip:Hide();
MessageWindow_FadeControler_OnLeave();
end
local function MessageWindow_IsChattingButton_OnUpdate()
this.time_elapsed = this.time_elapsed + arg1;
while(this.time_elapsed > 2) do
if((time() - this.typing_stamp) > 5) then
this:Hide();
end
this.time_elapsed = 0;
end
end
local function MessageWindow_ScrollUp_OnClick()
if( IsControlKeyDown() ) then
getglobal(this:GetParent():GetName().."ScrollingMessageFrame"):ScrollToTop();
else
if( IsShiftKeyDown() ) then
getglobal(this:GetParent():GetName().."ScrollingMessageFrame"):PageUp();
else
getglobal(this:GetParent():GetName().."ScrollingMessageFrame"):ScrollUp();
end
end
updateScrollBars(getglobal(this:GetParent():GetName().."ScrollingMessageFrame"));
end
local function MessageWindow_ScrollDown_OnClick()
if( IsControlKeyDown() ) then
getglobal(this:GetParent():GetName().."ScrollingMessageFrame"):ScrollToBottom();
else
if( IsShiftKeyDown() ) then
getglobal(this:GetParent():GetName().."ScrollingMessageFrame"):PageDown();
else
getglobal(this:GetParent():GetName().."ScrollingMessageFrame"):ScrollDown();
end
end
updateScrollBars(getglobal(this:GetParent():GetName().."ScrollingMessageFrame"));
end
local function MessageWindow_ScrollingMessageFrame_OnMouseWheel()
if(arg1 > 0) then
if( IsControlKeyDown() ) then
this:ScrollToTop();
else
if( IsShiftKeyDown() ) then
this:PageUp();
else
this:ScrollUp();
end
end
else
if( IsControlKeyDown() ) then
this:ScrollToBottom();
else
if( IsShiftKeyDown() ) then
this:PageDown();
else
this:ScrollDown();
end
end
end
end
local function MessageWindow_ScrollingMessageFrame_OnMouseDown()
this:GetParent().prevLeft = this:GetParent():GetLeft();
this:GetParent().prevTop = this:GetParent():GetTop();
end
local function MessageWindow_ScrollingMessageFrame_OnMouseUp()
if(this:GetParent().prevLeft == this:GetParent():GetLeft() and this:GetParent().prevTop == this:GetParent():GetTop()) then
--[ Frame was clicked not dragged
if(WIM_EditBoxInFocus == nil) then
getglobal(this:GetParent():GetName().."MsgBox"):SetFocus();
else
if(WIM_EditBoxInFocus:GetName() == this:GetParent():GetName().."MsgBox") then
getglobal(this:GetParent():GetName().."MsgBox"):Hide();
getglobal(this:GetParent():GetName().."MsgBox"):Show();
else
getglobal(this:GetParent():GetName().."MsgBox"):SetFocus();
end
end
end
end
local function MessageWindow_MsgBox_OnMouseUp()
WIM.libs.DropDownMenu.CloseDropDownMenus();
if(arg1 == "RightButton") then
WIM_MSGBOX_MENU_CUR_USER = this:GetParent().theUser;
DDM.UIDropDownMenu_Initialize(WIM_MsgBoxMenu, WIM_MsgBoxMenu_Initialize);
DDM.ToggleDropDownMenu(1, nil, WIM_MsgBoxMenu, this, 0, 0);
end
end
local function MessageWindow_MsgBox_OnEnterPressed()
local _, tParent = this:GetParent();
if(this:GetText() == "") then
if(WIM.db.windowFade and this:GetParent().QueuedToHide) then
--WIM_FadeOut(this:GetParent().theUser);
end
this:Hide();
this:Show();
return;
else
if(WIM.db.windowFade) then
--WIM_FadeOutDelayed(this:GetParent().theUser);
end
end
if(strsub(this:GetText(), 1, 1) == "/") then
WIM_EditBoxInFocus = nil;
ChatFrameEditBox:SetText(this:GetText());
ChatEdit_SendText(ChatFrameEditBox, 1);
WIM_EditBoxInFocus = this;
else
SendChatMessage(this:GetText(), "WHISPER", nil, WIM_ParseNameTag(this:GetParent().theUser));
this:AddHistoryLine(this:GetText());
end
this:SetText("");
if(not WIM.db.keepFocus) then
this:Hide();
this:Show();
elseif(not IsResting() and WIM.db.keepFocusRested) then
this:Hide();
this:Show();
end
end
local function MessageWindow_MsgBox_OnEscapePressed()
this:SetText("");
this:Hide();
this:Show();
if(WIM.db.windowFade) then
--WIM_FadeOut(this:GetParent().theUser);
end
end
local function MessageWindow_MsgBox_OnTabPressed()
--cycle through windows
if(WIM_Tabs.enabled == true) then
if(IsShiftKeyDown()) then
WIM_TabStep(-1);
else
WIM_TabStep(1);
end
else
WIM_ToggleWindow_Toggle();
end
end
local function MessageWindow_MsgBox_OnTextChanged()
if(WIM_W2W[this:GetParent().theUser]) then
if(not this.w2w_typing) then
this.w2w_typing = 0;
end
if(this:GetText() ~= "") then
if(time() - this.w2w_typing > 2) then
this.w2w_typing = time();
if(WIM.db.w2w.typing) then
--WIM_W2W_SendAddonMessage(this:GetParent().theUser , "IS_TYPING#TRUE");
end
end
else
this.w2w_typing = 0;
if(WIM.db.w2w.typing) then
--WIM_W2W_SendAddonMessage(this:GetParent().theUser , "IS_TYPING#FALSE");
end
end
end
--WIM_EditBox_OnChanged();
end
local function MessageWindow_MsgBox_OnUpdate()
if(this.setText == 1) then
this.setText = 0;
this:SetText("");
end
end
--Returns object, SoupBowl_windows_index or nil if window can not be found.
local function getMessageWindow(userName)
if(type(userName) ~= "string") then
return nil;
end
for i=1,table.getn(WindowSoupBowl.windows) do
if(WindowSoupBowl.windows[i].user == userName) then
return WindowSoupBowl.windows[i].obj, i;
end
end
end
-- create all of MessageWindow's object children
local function instantiateMessageWindowObj(obj)
local fName = obj:GetName();
-- set frame's initial properties
obj:SetClampedToScreen(true);
obj:SetFrameStrata("DIALOG");
obj:SetMovable(true);
obj:SetToplevel(true);
obj:SetWidth(384);
obj:SetHeight(256);
obj:EnableMouse(true);
obj:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 25, -125);
obj:RegisterForDrag("LeftButton");
obj:SetScript("OnDragStart", function() MessageWindow_MovementControler_OnDragStart(); end);
obj:SetScript("OnDragStop", function() MessageWindow_MovementControler_OnDragStop(); end);
obj:SetScript("OnEnter", MessageWindow_FadeControler_OnEnter);
obj:SetScript("OnLeave", MessageWindow_FadeControler_OnLeave);
obj:SetScript("OnShow", MessageWindow_Frame_OnShow);
obj:SetScript("OnHide", MessageWindow_Frame_OnHide);
obj:SetScript("OnUpdate", MessageWindow_Frame_OnUpdate);
obj.w2w_menu = DDM.Create_DropDownMenu(fName.."W2WMenu", obj);
obj.w2w_menu:SetParent(obj);
obj.w2w_menu:SetClampedToScreen(true);
-- add window backdrop frame
local Backdrop = CreateFrame("Frame", fName.."Backdrop", obj);
Backdrop:SetToplevel(false);
Backdrop:SetAllPoints(obj);
local class_icon = Backdrop:CreateTexture(fName.."BackdropClassIcon", "BACKGROUND");
local tl = Backdrop:CreateTexture(fName.."Backdrop_TL", "BORDER");
local tr = Backdrop:CreateTexture(fName.."Backdrop_TR", "BORDER");
local bl = Backdrop:CreateTexture(fName.."Backdrop_BL", "BORDER");
local br = Backdrop:CreateTexture(fName.."Backdrop_BR", "BORDER");
local t = Backdrop:CreateTexture(fName.."Backdrop_T" , "BORDER");
local b = Backdrop:CreateTexture(fName.."Backdrop_B" , "BORDER");
local l = Backdrop:CreateTexture(fName.."Backdrop_L" , "BORDER");
local r = Backdrop:CreateTexture(fName.."Backdrop_R" , "BORDER");
local bg = Backdrop:CreateTexture(fName.."Backdrop_BG", "BORDER");
local from = Backdrop:CreateFontString(fName.."BackdropFrom", "OVERLAY", "GameFontNormalLarge");
local char_info = Backdrop:CreateFontString(fName.."BackdropCharacterDetails", "OVERLAY", "GameFontNormal");
-- create window objects
local close = CreateFrame("Button", fName.."ExitButton", obj);
close:RegisterForClicks("LeftButtonUp", "RightButtonUp");
close:SetScript("OnEnter", MessageWindow_ExitButton_OnEnter);
close:SetScript("OnLeave", MessageWindow_ExitButton_OnLeave);
close:SetScript("OnClick", MessageWindow_ExitButton_OnClick);
local history = CreateFrame("Button", fName.."HistoryButton", obj);
history:RegisterForClicks("LeftButtonUp", "RightButtonUp");
history:SetScript("OnEnter", MessageWindow_HistoryButton_OnEnter);
history:SetScript("OnLeave", MessageWindow_HistoryButton_OnLeave);
history:SetScript("OnClick", MessageWindow_HistoryButton_OnClick);
local w2w = CreateFrame("Button", fName.."W2WButton", obj);
w2w:RegisterForClicks("LeftButtonUp", "RightButtonUp");
w2w:SetScript("OnEnter", MessageWindow_W2WButton_OnEnter);
w2w:SetScript("OnLeave", MessageWindow_W2WButton_OnLeave);
w2w:SetScript("OnClick", MessageWindow_W2WButton_OnClick);
local chatting = CreateFrame("Button", fName.."IsChattingButton", obj);
chatting:RegisterForClicks("LeftButtonUp", "RightButtonUp");
chatting:SetScript("OnEnter", MessageWindow_IsChattingButton_OnEnter);
chatting:SetScript("OnLeave", MessageWindow_IsChattingButton_OnLeave);
chatting:SetScript("OnUpdate", MessageWindow_IsChattingButton_OnUpdate);
chatting.time_elapsed = 0;
chatting.typing_stamp = 0;
local scroll_up = CreateFrame("Button", fName.."ScrollUp", obj);
scroll_up:RegisterForClicks("LeftButtonUp", "RightButtonUp");
scroll_up:SetScript("OnEnter", MessageWindow_FadeControler_OnEnter);
scroll_up:SetScript("OnLeave", MessageWindow_FadeControler_OnLeave);
scroll_up:SetScript("OnClick", MessageWindow_ScrollUp_OnClick);
local scroll_down = CreateFrame("Button", fName.."ScrollDown", obj);
scroll_down:RegisterForClicks("LeftButtonUp", "RightButtonUp");
scroll_down:SetScript("OnEnter", MessageWindow_FadeControler_OnEnter);
scroll_down:SetScript("OnLeave", MessageWindow_FadeControler_OnLeave);
scroll_down:SetScript("OnClick", MessageWindow_ScrollDown_OnClick);
local chat_display = CreateFrame("ScrollingMessageFrame", fName.."ScrollingMessageFrame", obj);
chat_display:RegisterForDrag("LeftButton");
chat_display:SetFading(false);
chat_display:SetMaxLines(128);
chat_display:SetMovable(true);
chat_display:SetScript("OnDragStart", function() MessageWindow_MovementControler_OnDragStart(); end);
chat_display:SetScript("OnDragStop", function() MessageWindow_MovementControler_OnDragStop(); end);
chat_display:SetScript("OnMouseWheel", MessageWindow_ScrollingMessageFrame_OnMouseWheel);
chat_display:SetScript("OnHyperlinkClick", function(...) ChatFrame_OnHyperlinkShow(...); end);
chat_display:SetScript("OnMessageScrollChanged", function() WIM_UpdateScrollBars(this); end);
chat_display:SetScript("OnMouseDown", MessageWindow_ScrollingMessageFrame_OnMouseDown);
chat_display:SetScript("OnMouseUp", MessageWindow_ScrollingMessageFrame_OnMouseUp);
chat_display:SetScript("OnEnter", MessageWindow_FadeControler_OnEnter);
chat_display:SetScript("OnLeave", MessageWindow_FadeControler_OnLeave);
chat_display:SetScript("OnHyperlinkEnter", MessageWindow_Hyperlink_OnEnter);
chat_display:SetScript("OnHyperlinkLeave", MessageWindow_Hyperlink_OnLeave);
chat_display:SetJustifyH("LEFT");
chat_display:EnableMouse(true);
chat_display:EnableMouseWheel(1);
local msg_box = CreateFrame("EditBox", fName.."MsgBox", obj);
msg_box:SetAutoFocus(false);
msg_box:SetHistoryLines(32);
msg_box:SetMaxLetters(255);
msg_box:SetAltArrowKeyMode(true);
msg_box:EnableMouse(true);
msg_box:SetScript("OnEnterPressed", MessageWindow_MsgBox_OnEnterPressed);
msg_box:SetScript("OnEscapePressed", MessageWindow_MsgBox_OnEscapePressed);
msg_box:SetScript("OnTabPressed", MessageWindow_MsgBox_OnTabPressed);
msg_box:SetScript("OnEditFocusGained", function() WIM_EditBoxInFocus = this; end);
msg_box:SetScript("OnEditFocusLost", function() WIM_EditBoxInFocus = nil; end);
msg_box:SetScript("OnEnter", MessageWindow_FadeControler_OnEnter);
msg_box:SetScript("OnLeave", MessageWindow_FadeControler_OnLeave);
msg_box:SetScript("OnTextChanged", MessageWindow_MsgBox_OnTextChanged);
msg_box:SetScript("OnUpdate", MessageWindow_MsgBox_OnUpdate);
msg_box:SetScript("OnMouseUp", MessageWindow_MsgBox_OnMouseUp);
local shortcuts = CreateFrame("Frame", fName.."ShortcutFrame", obj);
shortcuts:SetToplevel(true);
shortcuts:SetFrameStrata("DIALOG");
for i=1,ShortcutCount do
CreateFrame("Button", fName.."ShortcutFrameButton"..i, shortcuts, "WIM_ShortcutButtonTemplate");
end
end
local function updateMessageWindowClassIcon(obj)
local SelectedSkin = WIM:GetSelectedSkin();
local fName = obj:GetName();
local class_icon = getglobal(fName.."BackdropClassIcon");
local coord = SelectedSkin.message_window.class_icon[class_icon.class];
class_icon:SetTexCoord(coord[1], coord[2], coord[3], coord[4], coord[5], coord[6], coord[7], coord[8]);
end
local function setMessageWindowClass(obj, class)
local fName = obj:GetName();
local class_icon = getglobal(fName.."BackdropClassIcon");
local classes = {};
classes[WIM_LOCALIZED_DRUID] = "druid";
classes[WIM_LOCALIZED_HUNTER] = "hunter";
classes[WIM_LOCALIZED_MAGE] = "mage";
classes[WIM_LOCALIZED_PALADIN] = "paladin";
classes[WIM_LOCALIZED_PRIEST] = "priest";
classes[WIM_LOCALIZED_ROGUE] = "rogue";
classes[WIM_LOCALIZED_SHAMAN] = "shaman";
classes[WIM_LOCALIZED_WARLOCK] = "warlock";
classes[WIM_LOCALIZED_WARRIOR] = "warrior";
classes[WIM_LOCALIZED_DRUID_FEMALE] = classes[WIM_LOCALIZED_DRUID];
classes[WIM_LOCALIZED_HUNTER_FEMALE] = classes[WIM_LOCALIZED_HUNTER];
classes[WIM_LOCALIZED_MAGE_FEMALE] = classes[WIM_LOCALIZED_MAGE];
classes[WIM_LOCALIZED_PALADIN_FEMALE] = classes[WIM_LOCALIZED_PALADIN];
classes[WIM_LOCALIZED_PRIEST_FEMALE] = classes[WIM_LOCALIZED_PRIEST];
classes[WIM_LOCALIZED_ROGUE_FEMALE] = classes[WIM_LOCALIZED_ROGUE];
classes[WIM_LOCALIZED_SHAMAN_FEMALE] = classes[WIM_LOCALIZED_SHAMAN];
classes[WIM_LOCALIZED_WARLOCK_FEMALE] = classes[WIM_LOCALIZED_WARLOCK];
classes[WIM_LOCALIZED_WARRIOR_FEMALE] = classes[WIM_LOCALIZED_WARRIOR];
classes[WIM_LOCALIZED_GM] = "gm";
if(classes[class]) then
class_icon.class = classes[class];
else
class_icon.class = "blank";
end
updateMessageWindowClassIcon(obj);
end
local function setMessageWindowCharacterDetails(obj, guild, level, race, class)
obj.theGuild = guild;
obj.theLevel = level;
obj.theRace = race;
obj.theClass = class;
MessageWindow_RefreshCharacterDetails(obj);
end
local function MessageWindow_RefreshCharacterDetails(obj)
local SelectedSkin = WIM:GetSelectedSkin();
local fName = obj:GetName();
local char_info = getglobal(fName.."BackdropCharacterDetails");
local formatDetails = SelectedSkin.message_window.strings.char_info.format;
char_info:SetText(formatDetails(obj.theGuild, obj.theLevel, obj.theRace, obj.theClass));
end
local function setMessageWindow_SmartStyle(obj, name, guild, level, race, class)
local SelectedSkin = WIM:GetSelectedSkin();
local SelectedStyle = WIM:GetSelectedStype();
obj.theGuild = guild;
obj.theLevel = level;
obj.theRace = race;
obj.theClass = class;
if(type(SelectedSkin.smart_style) == "function" and SelectedStyle == "#SMART#") then
WIM:LoadMessageWindowSkin(obj);
end
end
-- load object into it's default state.
local function loadMessageWindowDefaults(obj)
obj:Hide();
obj.theGuild = "";
obj.theLevel = "";
obj.theRace = "";
obj.theClass = "";
obj.icon.track = false;
local fName = obj:GetName();
obj:SetScale(1);
obj:SetAlpha(1);
local backdrop = getglobal(fName.."Backdrop");
backdrop:SetAlpha(1);
local class_icon = getglobal(fName.."BackdropClassIcon");
class_icon.class = "blank";
local from = getglobal(fName.."BackdropFrom");
from:SetText(GetReadableName(obj.theUser));
local char_info = getglobal(fName.."BackdropCharacterDetails");
char_info:SetText("");
local history = getglobal(fName.."HistoryButton");
history:Hide();
local w2w = getglobal(fName.."W2WButton");
w2w:Hide();
local chatting = getglobal(fName.."IsChattingButton");
chatting:Hide();
local msg_box = getglobal(fName.."MsgBox");
msg_box.setText = 0;
msg_box:SetText("");
local scroll_up = CreateFrame("Button", fName.."ScrollUp", obj);
scroll_up:Disable();
local scroll_down = CreateFrame("Button", fName.."ScrollDown", obj);
scroll_down:Disable();
WIM:LoadMessageWindowSkin(obj);
end
----------------------------------------------------------
-- MessageWindow Controling Functions --
----------------------------------------------------------
local function getXYLimits()
local width, height;
width = SelectedSkin.message_window.rect.top_left.size.x + SelectedSkin.message_window.rect.bottom_right.size.x;
height = SelectedSkin.message_window.rect.top_left.size.y + SelectedSkin.message_window.rect.bottom_right.size.y;
return width, height;
end
----------------------------------------------------------
-- MessageWindow OnEvent Functions --
----------------------------------------------------------
-- Globals
function WIM:GetWindowSoupBowl()
return WindowSoupBowl;
end
--Create (recycle if available) message window. Returns object.
function WIM:CreateMessageWindow(userName)
if(type(userName) ~= "string") then
return;
end
if(type(WIM:GetSelectedSkin()) ~= "table") then
WIM:LoadSkin(WIM.db.skin.selected, WIM.db.skin.style);
end
local func = function ()
if(WindowSoupBowl.available > 0) then
for i=1,table.getn(WindowSoupBowl.windows) do
if(WindowSoupBowl.windows[i].inUse == false) then
return WindowSoupBowl.windows[i].obj, i;
end
end
else
return nil;
end
end
local obj, index = func();
if(obj) then
--object available...
WindowSoupBowl.available = WindowSoupBowl.available - 1;
WindowSoupBowl.used = WindowSoupBowl.used + 1;
WindowSoupBowl.windows[index].inUse = true;
WindowSoupBowl.windows[index].user = userName;
obj.theUser = userName;
obj.icon.theUser = userName;
loadMessageWindowDefaults(obj);
WIM:dPrint("Window recycled '"..obj:GetName().."'");
return obj;
else
-- must create new object
WindowSoupBowl.used = WindowSoupBowl.used + 1;
WindowSoupBowl.windowToken = WindowSoupBowl.windowToken + 1; --increment token for propper frame name creation.
local fName = "WIM3_msgFrame"..WindowSoupBowl.windowToken;
local f = CreateFrame("Frame",fName, UIParent);
local winTable = {
user = userName,
frameName = fName,
inUse = true,
obj = f
};
table.insert(WindowSoupBowl.windows, winTable);
f.theUser = userName;
f.isParent = true;
instantiateMessageWindowObj(f);
f.icon.theUser = userName;
loadMessageWindowDefaults(f);
WIM:dPrint("Window created '"..f:GetName().."'");
return f;
end
end
--Deletes message window and makes it available in the Soup Bowl.
function WIM:DestroyMessageWindow(userName)
local obj, index = getMessageWindow(userName);
if(obj) then
WindowSoupBowl.windows[index].inUse = false;
WindowSoupBowl.windows[index].user = "";
WindowSoupBowl.available = WindowSoupBowl.available + 1;
WindowSoupBowl.used = WindowSoupBowl.used - 1;
obj.icon:Hide();
obj.icon.track = false;
obj.theUser = nil;
obj:Show();
local chatBox = getglobal(obj:GetName().."ScrollingMessageFrame");
chatBox:Clear();
obj:Hide();
end
end
function WIM:GetShortcutCount()
return ShortcutCount;
end
-----------------------------------------------------
-- Register Default Fonts --
-----------------------------------------------------
-- register wow's 3 main font types.
WIM:RegisterFont("GameFontNormal", "(WoW) Game Font");
WIM:RegisterFont("ChatFontNormal", "(WoW) Chat Font");
WIM:RegisterFont("QuestTitleFont", "(WoW) Quest Font");
-- initial import from SharedMediaLib
--WIM_Skinner_Import_SharedMedia();