-- globals |
Glamour_NAME = "Glamour"; |
Glamour_VERSION = GetAddOnMetadata("Glamour", "Version") or "UnKnown"; |
print(Glamour_NAME.." "..Glamour_VERSION.." Loaded!"); |
GlamourLastFrame = nil; |
realm = GetRealmName("player"); |
player = GetUnitName("player"); |
|
-- |
-- GUI Functions |
-- |
|
-- This function is run on pressing the Ok or Close Buttons. |
-- Sets the Status of the Saved Variables to the new settings |
-- |
function GlamourPanel_Close() |
GlamourConfig[realm.."-"..player].CHECK0 = GlamourGUIFrame_CHECK0:GetChecked(); |
GlamourConfig[realm.."-"..player].CHECK1 = GlamourGUIFrame_CHECK1:GetChecked(); |
--ReloadUI(); |
end |
|
|
-- This function is run on pressing the Cancel Button or from the VARIABLES LOADED event function. |
-- Sets the status of the Check Boxes to the Values of the Saved Variables. |
-- |
function GlamourPanel_CancelOrLoad() |
GlamourGUIFrame_CHECK0:SetChecked(GlamourConfig[realm.."-"..player].CHECK0); |
GlamourGUIFrame_CHECK1:SetChecked(GlamourConfig[realm.."-"..player].CHECK1); |
end |
|
|
-- The GUI OnLoad function. |
-- |
function GlamourPanel_OnLoad(panel) |
-- Set the Text for the Check boxes. |
-- |
GlamourGUIFrame_CHECK0Text:SetText("Capture Blizzard Alerts. (Requires ReloadUI)"); |
GlamourGUIFrame_CHECK1Text:SetText("Reverse Alert Direction. (Requires ReloadUI)"); |
|
-- Set the name for the Category for the Panel |
-- |
panel.name = Glamour_NAME.." v"..Glamour_VERSION; |
|
-- When the player clicks okay, set the Saved Variables to the current Check Box setting |
-- |
panel.okay = function (self) GlamourPanel_Close(); end; |
|
-- When the player clicks cancel, set the Check Box status to the Saved Variables. |
panel.cancel = function (self) GlamourPanel_CancelOrLoad(); end; |
|
-- Add the panel to the Interface Options |
-- |
InterfaceOptions_AddCategory(panel); |
end |
|
function Glamour_OnLoad(self) |
self:RegisterEvent("VARIABLES_LOADED"); |
end |
|
function Glamour_OnEvent(frame, event, arg1, ...) |
if (not GlamourConfig) then |
GlamourConfig = {}; |
end |
|
if (not GlamourConfig[realm.."-"..player]) then |
GlamourConfig[realm.."-"..player] = {} ; |
GlamourConfig[realm.."-"..player].CHECK0 = 1; |
GlamourConfig[realm.."-"..player].CHECK1 = 0; |
GlamourAnchor:Show(); |
end |
GlamourPanel_CancelOrLoad(); |
end |
|
function GlamourAlertSample(FrameStyle) |
|
local MyData = {}; |
MyData.Text = "General Text"; |
MyData.Title = "Title"; |
MyData.bTitle = "bTitle"; |
MyData.Icon = "Interface\\Icons\\INV_Misc_QuestionMark"; |
MyData.tText = "tText"; |
MyData.bText = "bText"; |
MyData.FrameStyle = FrameStyle; |
MyData.ShieldHide = false; |
MyData.ShieldIcon = false; |
MyData.ShieldText = "shieldText"; |
MyData.HideGlow = false; |
MyData.HideShine = false; |
MyData.ShowBanner = true; |
MyData.BannerColor = {r=.2,g=.2,b=.8}; |
local green = {r=0,g=1,b=0}; |
local red = {r=1,g=0,b=0 }; |
|
GlamourShowAlert(1, MyData, nil, nil); |
GlamourShowAlert(1, MyData, red, green); |
-- |
GlamourShowAlert(0, MyData, nil, nil); |
GlamourShowAlert(0, MyData, red, green); |
-- |
GlamourShowAlert(400, MyData, green, red); |
GlamourShowAlert(200, MyData, red, green); |
-- |
GlamourShowAlert(1, MyData, nil, nil); |
GlamourShowAlert(1, MyData, red, green); |
-- |
end |
|
function GlamourResetAlertFrame() |
|
local MyData = {}; |
MyData.Text = ""; |
MyData.Title = ""; |
MyData.bTitle = ""; |
MyData.Icon = ""; |
MyData.tText = ""; |
MyData.bText = ""; |
MyData.FrameStyle = nil; |
MyData.ShieldHide = false; |
MyData.ShieldIcon = false; |
MyData.ShieldText = ""; |
MyData.HideGlow = false; |
MyData.HideShine = false; |
MyData.ShowBanner = true; |
MyData.BannerColor = {r=.8,g=.8,b=.8}; |
MyData.Reset = 1; |
|
GlamourShowAlert(1, MyData, nil, nil); |
end |
|
function GlamourShowAlert(size, data, glow, shine) |
-- size: numeric |
-- width of the alert frame with the following predefinded values |
-- 0 : Shows just the Icon and IconFrame along with ttext and bttext from the data fields. This mode also hides the shine effect. |
-- 1 : Default size (width 300); |
-- * : any other number will be used as a specific size to resize the width too. 300 is the default size, use this as a starting point. |
-- data: keytable: |
-- Text = Text to display |
-- Title = Title to display |
-- bTitle = text to display on the border of the guild alert frame. |
-- Icon = icon path to display |
-- tText = text to display at the top of the icon |
-- bText = text to display at the bottom of the icon |
-- Points = numeric value to display ontop of the shield icon (0 for nothing) |
-- ShieldHide = Boolean (true or false ) hides the shield icon on the right of the frame. (This does not Hide shieldPoints). |
-- ShieldIcon = String containing the path to a custom Icon/Texture to use in place of the regular shield. |
-- FrameStyle = String to identify the type of frame to use for your alert. |
-- nil: Use the default Blizzard Achievement style. |
-- GuildAchievement: Use the Blizzard Guild Achievement style. |
-- Notice: A small alert that handles a single line/short sentence of text. |
-- HideBanner = Boolean (true or false ) hides the banner and banner border textures when useGuildAch is active |
-- BannerColor = keytable: {r,g,b} or nil for default - the rgb values to use for the banner color when useGuildAch is active. |
-- HideGlow = Boolean (true or false) hides the glow effect on the alert window. |
-- HideShine = Boolean (true or false) hides the shine effect on the alert window. |
-- glow: keytable: {r,g,b} or nil for default - the rgb values to use for the glow animation |
-- shine: keytable: {r,g,b} or nil for default - the rgb values to use for the shine animation |
|
local frame = GlamourAlertFrame_GetAlertFrame(); |
|
if ( not frame ) then |
-- We ran out of frames! Bail! |
print("bailed!"); |
return; |
end |
|
local frameName = frame:GetName(); |
local displayName = _G[frameName.."Name"]; |
local displayNameTop = _G[frameName.."IconNameTop"]; |
local displayNameBottom = _G[frameName.."IconNameBottom"]; |
local shieldPoints = _G[frameName.."ShieldPoints"]; |
local shieldIcon = _G[frameName.."ShieldIcon"]; |
local BackGround = _G[frameName.."Background"]; |
local Unlocked = _G[frameName.."Unlocked"]; |
local guildName = _G[frameName.."GuildName"]; |
local guildBorder = _G[frameName.."GuildBorder"]; |
local guildBanner = _G[frameName.."GuildBanner"]; |
local frameIcon = _G[frameName.."IconTexture"]; |
|
displayName:SetText(data.Text); |
displayNameTop:SetText(data.tText); |
displayNameBottom:SetText(data.bText); |
guildName:SetText(data.bTitle); |
|
BackGround:Show(); |
Unlocked:Show(); |
displayName:Show(); |
shieldPoints:Show(); |
shieldIcon:Show(); |
guildName:Show(); |
guildBorder:Show(); |
guildBanner:Show(); |
|
if(data.Points) then |
data.ShieldText = data.Points; |
elseif(not data.ShieldText) then |
data.ShieldText = ""; |
end |
|
if(data.ShieldIcon) then |
shieldIcon:SetTexture(data.ShieldIcon); |
shieldIcon:SetTexCoord(0,1,0,1); |
else |
if ( data.points == 0 ) then |
shieldIcon:SetTexture([[Interface\AchievementFrame\UI-Achievement-Shields-NoPoints]]); |
else |
shieldIcon:SetTexture([[Interface\AchievementFrame\UI-Achievement-Shields]]); |
end |
if (data.FrameStyle == "GuildAchievement") then |
shieldIcon:SetTexCoord(0, 0.5, 0.5, 1); |
else |
shieldIcon:SetTexCoord(0, 0.5, 0, 0.45); |
end |
end |
|
if ( data.func ) then |
frame.func = data.fun; |
else |
frame.func = nil; |
end |
|
if ( data.FrameStyle ) then |
if ( data.FrameStyle == "GuildAchievement" ) then |
frame:SetHeight(104); |
local background = _G[frameName.."Background"]; |
background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Guild"); |
background:SetTexCoord(0.00195313, 0.62890625, 0.00195313, 0.19140625); |
background:SetPoint("TOPLEFT", -2, 2); |
background:SetPoint("BOTTOMRIGHT", 8, 8); |
_G[frameName.."IconOverlay"]:Show(); |
local iconBorder = _G[frameName.."IconOverlay"]; |
iconBorder:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Guild"); |
iconBorder:SetTexCoord(0.25976563,0.40820313,0.50000000,0.64453125); |
iconBorder:SetPoint("CENTER", 0, 1); |
_G[frameName.."Icon"]:SetPoint("TOPLEFT", -26, 2); |
displayName:SetPoint("BOTTOMLEFT", 79, 37); |
displayName:SetPoint("BOTTOMRIGHT", -79, 37); |
displayNameTop:Show(); |
displayNameBottom:Show(); |
_G[frameName.."Shield"]:SetPoint("TOPRIGHT", -15, -28); |
frameIcon:Show(); |
_G[frameName.."IconTextureBG"]:Show(); |
_G[frameName.."IconOverlay"]:Show(); |
shieldPoints:SetPoint("CENTER", 7, 5); |
shieldPoints:SetVertexColor(0, 1, 0); |
shieldPoints:Show(); |
shieldIcon:Show(); |
local unlocked = _G[frameName.."Unlocked"]; |
unlocked:SetPoint("TOP", -1, -36); |
unlocked:Show(); |
guildName:Show(); |
guildBanner:Show(); |
guildBorder:Show(); |
frame.glow:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Guild"); |
frame.glow:SetTexCoord(0.00195313, 0.74804688, 0.19531250, 0.49609375); |
frame.shine:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Guild"); |
frame.shine:SetTexCoord(0.75195313, 0.91601563, 0.19531250, 0.35937500); |
frame.shine:SetPoint("BOTTOMLEFT", 0, 16); |
frame.shine:Show(); |
if(data.HideBanner) then |
guildBanner:Show(); |
guildBorder:Show(); |
elseif(data.BannerColor) then |
local BannerColor = data.BannerColor; |
guildBanner:SetVertexColor(BannerColor.r,BannerColor.g,BannerColor.b); |
end |
elseif ( data.FrameStyle == "Notice" ) then |
frame:SetHeight(20); |
local background = _G[frameName.."Background"]; |
background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment-Horizontal-Desaturated"); |
background:SetTexCoord(0, 1, 0, 1); |
background:SetPoint("TOPLEFT", 0, 0); |
background:SetPoint("BOTTOMRIGHT", 0, 0); |
_G[frameName.."IconOverlay"]:Hide(); |
displayName:SetPoint("BOTTOMLEFT", 0, 3); |
displayName:SetPoint("BOTTOMRIGHT", 0, 3); |
displayNameTop:Hide(); |
displayNameBottom:Hide(); |
shieldPoints:Hide(); |
shieldIcon:Hide(); |
frameIcon:Hide(); |
_G[frameName.."Unlocked"]:Hide(); |
_G[frameName.."GuildName"]:Hide(); |
_G[frameName.."GuildBorder"]:Hide(); |
_G[frameName.."GuildBanner"]:Hide(); |
_G[frameName.."IconTexture"]:Hide(); |
_G[frameName.."IconTextureBG"]:Hide(); |
_G[frameName.."IconOverlay"]:Hide(); |
frame.glow:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Alert-Glow"); |
frame.glow:SetTexCoord(0, 0.78125, 0, 0.66796875); |
else |
print(_G["RED_FONT_COLOR_CODE"],"[ERROR] Glamour Alert called with invalid FrameStyle: ", data.FrameStyle, _G["FONT_COLOR_CODE_CLOSE"]); |
data.FrameStyle = nil; |
end |
end |
|
if (not data.FrameStyle ) then |
frame:SetHeight(88); |
local background = _G[frameName.."Background"]; |
background:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Alert-Background"); |
background:SetTexCoord(0, 0.605, 0, 0.703); |
background:SetPoint("TOPLEFT", 0, 0); |
background:SetPoint("BOTTOMRIGHT", 0, 0); |
local iconBorder = _G[frameName.."IconOverlay"]; |
iconBorder:SetTexture("Interface\\AchievementFrame\\UI-Achievement-IconFrame"); |
iconBorder:SetTexCoord(0, 0.5625, 0, 0.5625); |
iconBorder:SetPoint("CENTER", -1, 2); |
_G[frameName.."Icon"]:SetPoint("TOPLEFT", -26, 16); |
displayName:SetPoint("BOTTOMLEFT", 72, 36); |
displayName:SetPoint("BOTTOMRIGHT", -60, 36); |
displayNameTop:Show(); |
displayNameBottom:Show(); |
_G[frameName.."Shield"]:SetPoint("TOPRIGHT", -10, -13); |
shieldPoints:SetPoint("CENTER", 7, 2); |
shieldPoints:SetVertexColor(1, 1, 1); |
shieldPoints:Show(); |
shieldIcon:Show(); |
local unlocked = _G[frameName.."Unlocked"]; |
unlocked:SetPoint("TOP", 7, -23); |
unlocked:Show(); |
_G[frameName.."GuildName"]:Hide(); |
_G[frameName.."GuildBorder"]:Hide(); |
_G[frameName.."GuildBanner"]:Hide(); |
frameIcon:Show(); |
_G[frameName.."IconTextureBG"]:Hide(); |
_G[frameName.."IconOverlay"]:Show(); |
frame.glow:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Alert-Glow"); |
frame.glow:SetTexCoord(0, 0.78125, 0, 0.66796875); |
frame.shine:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Alert-Glow"); |
frame.shine:SetTexCoord(0.78125, 0.912109375, 0, 0.28125); |
frame.shine:SetPoint("BOTTOMLEFT", 0, 8); |
frame.shine:Show(); |
end |
|
if (size == 0) then |
frame:SetWidth(44); |
BackGround:Hide(); |
Unlocked:Hide(); |
displayName:Hide(); |
shieldPoints:Hide(); |
shieldIcon:Hide(); |
guildName:Hide(); |
guildBorder:Hide(); |
guildBanner:Hide(); |
frame.glow:SetPoint("TOPLEFT", frameIcon,"TOPLEFT", -25, 75) |
frame.glow:SetPoint("BOTTOMRIGHT", frameIcon ,"BOTTOMRIGHT", 25, -75) |
frame.shine:Hide(); |
elseif (size == 1) then |
frame:SetWidth(300); |
frame.glow:SetPoint("TOPLEFT", frame ,"TOPLEFT", -50, 0) |
frame.glow:SetPoint("BOTTOMRIGHT", frame ,"BOTTOMRIGHT", 50, 0) |
frame.shine:SetPoint("TOPLEFT", frame ,"TOPLEFT", -50, 0) |
--frame.shine:SetPoint("BOTTOMRIGHT", frame ,"BOTTOMRIGHT", 50, 0) |
|
else |
frame:SetWidth(size); |
frame.glow:SetPoint("TOPLEFT", frame ,"TOPLEFT", -50, 0) |
frame.glow:SetPoint("BOTTOMRIGHT", frame ,"BOTTOMRIGHT", 50, 0) |
frame.shine:SetPoint("TOPLEFT", frame ,"TOPLEFT", -50, 0) |
--frame.shine:SetPoint("BOTTOMRIGHT", frame ,"BOTTOMRIGHT", 50, 0) |
end |
|
if(data.ShieldHide) then |
shieldIcon:Hide(); |
end |
|
GlamourAchievementShield_SetPoints(data.ShieldText, shieldPoints, GameFontNormal, GameFontNormalSmall); |
frame.unlocked:SetText(data.Title); |
frameIcon:SetTexture(data.Icon); |
|
if(data.HideGlow) then |
frame.glow:Hide(); |
end |
if(data.HideShine) then |
frame.shine:Hide(); |
end |
|
if (glow) then |
frame.glow:SetVertexColor(glow.r,glow.g,glow.b); |
else |
frame.glow:SetVertexColor(1,1,1); |
end |
|
if (shine) then |
frame.shine:SetVertexColor(shine.r,shine.g,shine.b); |
else |
frame.shine:SetVertexColor(1,1,1); |
end |
|
if(not data.Reset) then |
GlamourAlertFrame_AnimateIn(frame); |
end |
return frameName; |
end |
|
|
function GlamourAlertFrame_GetAlertFrame() |
local name, frame, previousFrame; |
for i=1, 24 do |
name = "GlamourAlertFrame"..i; |
frame = _G[name]; |
if ( frame ) then |
if ( not frame:IsShown() ) then |
GlamourLastFrame = frame; |
return frame; |
end |
else |
frame = CreateFrame("Button", name, UIParent, "GlamourAlertFrameTemplate"); |
if ( not previousFrame or i == 13 ) then |
frame:SetPoint("CENTER", GlamourAnchor, "BOTTOM", 0, 0); |
else |
if (GlamourConfig[realm.."-"..player].CHECK1) then |
frame:SetPoint("BOTTOM", previousFrame, "TOP", 0, 0); |
else |
frame:SetPoint("TOP", previousFrame, "BOTTOM", 0, 0); |
end |
end |
GlamourLastFrame = frame; |
return frame; |
end |
previousFrame = frame; |
end |
return nil; |
end |
|
Blizzard_AchievementAlertFrame_GetAlertFrame = AchievementAlertFrame_GetAlertFrame; |
Blizzard_AchievementAlertFrame_ShowAlert = AchievementAlertFrame_ShowAlert; |
|
function AchievementAlertFrame_GetAlertFrame() |
if (GlamourConfig[realm.."-"..player].CHECK0) then |
return GlamourAlertFrame_GetAlertFrame(); |
else |
return Blizzard_AchievementAlertFrame_GetAlertFrame(); |
end |
end |
|
function AchievementAlertFrame_ShowAlert(achievementID) |
if (GlamourConfig[realm.."-"..player].CHECK0) then |
GlamourResetAlertFrame(GlamourAlertFrame_GetAlertFrame()); |
end |
Blizzard_AchievementAlertFrame_ShowAlert(achievementID); |
end |
|
function GlamourAlertFrame_OnClick (self, button) |
if ( button == "RightButton" ) then |
self:Hide(); |
return; |
end |
|
local id = self.id; |
if ( not id ) then |
self:Hide(); |
return; |
end |
|
ShowUIPanel(AchievementFrame); |
|
local _, _, _, achCompleted = GetAchievementInfo(id); |
if ( achCompleted and (ACHIEVEMENTUI_SELECTEDFILTER == AchievementFrameFilters[ACHIEVEMENT_FILTER_INCOMPLETE].func) ) then |
AchievementFrame_SetFilter(ACHIEVEMENT_FILTER_ALL); |
elseif ( (not achCompleted) and (ACHIEVEMENTUI_SELECTEDFILTER == AchievementFrameFilters[ACHIEVEMENT_FILTER_COMPLETE].func) ) then |
AchievementFrame_SetFilter(ACHIEVEMENT_FILTER_ALL); |
end |
|
AchievementFrame_SelectAchievement(id) |
end |
|
function GlamourAchievementShield_OnLoad (self) |
self.Desaturate = AchievementShield_Desaturate; |
self.Saturate = AchievementShield_Saturate; |
end |
|
function GlamourAchievementShield_SetPoints(points, pointString, normalFont, smallFont) |
if ( strlen(points) > 3) then |
pointString:SetFontObject(normalFont); |
else |
pointString:SetFontObject(smallFont); |
end |
pointString:SetText(points); |
end |
|
function GlamourAlertFrame_AnimateIn(frame) |
frame:Show(); |
frame.animIn:Play(); |
frame.glow.animIn:Play(); |
frame.shine.animIn:Play(); |
frame.waitAndAnimOut:Stop(); --Just in case it's already animating out, but we want to reinstate it. |
if ( frame:IsMouseOver() ) then |
frame.waitAndAnimOut.animOut:SetStartDelay(1); |
else |
frame.waitAndAnimOut.animOut:SetStartDelay(4.05); |
frame.waitAndAnimOut:Play(); |
end |
end |
|