--Ion Menu Bar, a World of Warcraft® user interface addon.
--Copyright© 2006-2012 Connor H. Chenoweth, aka Maul - All rights reserved.
local ION, GDB, CDB, PEW = Ion
ION.MENUIndex = {}
local MENUIndex = ION.MENUIndex
local menubarsGDB, menubarsCDB, menubtnsGDB, menubtnsCDB
local ANCHOR = setmetatable({}, { __index = CreateFrame("Frame") })
local STORAGE = CreateFrame("Frame", nil, UIParent)
local L = LibStub("AceLocale-3.0"):GetLocale("Ion")
IonMenuGDB = {
menubars = {},
menubtns = {},
scriptProfile = false,
firstRun = true,
}
IonMenuCDB = {
menubars = {},
menubtns = {},
}
local gDef = {
snapTo = false,
snapToFrame = false,
snapToPoint = false,
point = "BOTTOMRIGHT",
x = -154.5,
y = 33,
}
local menuElements = {}
local addonData, sortData = {}, {}
local sort = table.sort
local format = string.format
local GetAddOnInfo = _G.GetAddOnInfo
local GetAddOnMemoryUsage = _G.GetAddOnMemoryUsage
local GetAddOnCPUUsage = _G.GetAddOnCPUUsage
local GetScriptCPUUsage = _G.GetScriptCPUUsage
local UpdateAddOnMemoryUsage = _G.UpdateAddOnMemoryUsage
local UpdateAddOnCPUUsage = _G.UpdateAddOnCPUUsage
local GetParentKeys = ION.GetParentKeys
local defGDB, defCDB = CopyTable(IonMenuGDB), CopyTable(IonMenuCDB)
local configData = {
stored = false,
}
local function updateTabard(button)
local emblem = select(10, GetGuildLogoInfo())
if (emblem) then
if (not button.tabard:IsShown()) then
button:SetNormalTexture("Interface\\Buttons\\UI-MicroButtonCharacter-Up")
button:SetPushedTexture("Interface\\Buttons\\UI-MicroButtonCharacter-Down")
button.tabard:Show()
end
SetSmallGuildTabardTextures("player", button.tabard.emblem, button.tabard.background)
else
if (button.tabard:IsShown()) then
button:SetNormalTexture("Interface\\Buttons\\UI-MicroButton-Socials-Up")
button:SetPushedTexture("Interface\\Buttons\\UI-MicroButton-Socials-Down")
button:SetDisabledTexture("Interface\\Buttons\\UI-MicroButton-Socials-Disabled")
button.tabard:Hide()
end
end
end
local function updateMicroButtons()
local playerLevel = UnitLevel("player")
if (IonCharacterButton and CharacterFrame:IsShown()) then
IonCharacterButton:SetButtonState("PUSHED", 1)
ION.CharacterButton_SetPushed(IonCharacterButton)
elseif (IonCharacterButton) then
IonCharacterButton:SetButtonState("NORMAL")
ION.CharacterButton_SetNormal(IonCharacterButton)
end
if (IonSpellbookButton and SpellBookFrame:IsShown()) then
IonSpellbookButton:SetButtonState("PUSHED", 1)
elseif (IonSpellbookButton) then
IonSpellbookButton:SetButtonState("NORMAL")
end
if (IonTalentButton and PlayerTalentFrame and PlayerTalentFrame:IsShown()) then
IonTalentButton:SetButtonState("PUSHED", 1)
elseif (IonTalentButton) then
if (playerLevel < SHOW_TALENT_LEVEL) then
IonTalentButton:GetNormalTexture():SetDesaturated(1)
IonTalentButton:GetNormalTexture():SetVertexColor(0.5,0.5,0.5)
IonTalentButton:GetPushedTexture():SetDesaturated(1)
IonTalentButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButton-Talents-Up")
IonTalentButton:SetHighlightTexture("")
IonTalentButton.disabledTooltip = format(FEATURE_BECOMES_AVAILABLE_AT_LEVEL, SHOW_TALENT_LEVEL)
else
IonTalentButton:GetNormalTexture():SetDesaturated(nil)
IonTalentButton:GetNormalTexture():SetVertexColor(1,1,1)
IonTalentButton:GetPushedTexture():SetDesaturated(nil)
IonTalentButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButton-Talents-Down")
IonTalentButton:SetHighlightTexture("Interface\\Buttons\\UI-MicroButton-Hilight")
IonTalentButton:SetButtonState("NORMAL")
IonTalentButton.disabledTooltip = nil
end
end
if (IonQuestLogButton and QuestLogFrame:IsShown()) then
IonQuestLogButton:SetButtonState("PUSHED", 1)
elseif (IonQuestLogButton) then
IonQuestLogButton:SetButtonState("NORMAL")
end
if (IonLatencyButton and (GameMenuFrame:IsShown() or InterfaceOptionsFrame:IsShown() or (KeyBindingFrame and KeyBindingFrame:IsShown()) or (MacroFrame and MacroFrame:IsShown()))) then
IonLatencyButton:SetButtonState("PUSHED", 1)
ION.LatencyButton_SetPushed(IonLatencyButton)
elseif (IonLatencyButton) then
IonLatencyButton:SetButtonState("NORMAL")
ION.LatencyButton_SetNormal(IonLatencyButton)
end
if (IonPVPButton and (PVPUIFrame and PVPUIFrame:IsShown())) then
IonPVPButton:SetButtonState("PUSHED", 1)
ION.PVPButton_SetPushed(IonPVPButton)
elseif (IonPVPButton) then
if (playerLevel < SHOW_PVP_LEVEL) then
IonPVPButton:GetNormalTexture():SetDesaturated(1)
IonPVPButton:GetNormalTexture():SetVertexColor(0.5,0.5,0.5)
IonPVPButton:GetPushedTexture():SetDesaturated(1)
IonPVPButton.faction:SetDesaturated(1)
IonPVPButton.faction:SetVertexColor(0.5,0.5,0.5)
IonPVPButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButtonCharacter-Up")
IonPVPButton:SetHighlightTexture("")
IonPVPButton.disabledTooltip = format(FEATURE_BECOMES_AVAILABLE_AT_LEVEL, SHOW_PVP_LEVEL)
else
IonPVPButton:GetNormalTexture():SetDesaturated(nil)
IonPVPButton:GetNormalTexture():SetVertexColor(1,1,1)
IonPVPButton:GetPushedTexture():SetDesaturated(nil)
IonPVPButton.faction:SetDesaturated(nil)
IonPVPButton.faction:SetVertexColor(1,1,1)
IonPVPButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButtonCharacter-Down")
IonPVPButton:SetHighlightTexture("Interface\\Buttons\\UI-MicroButton-Hilight")
IonPVPButton:SetButtonState("NORMAL")
IonPVPButton.disabledTooltip = nil
ION.PVPButton_SetNormal(IonPVPButton)
end
end
if (IonGuildButton and ((GuildFrame and GuildFrame:IsShown()) or (LookingForGuildFrame and LookingForGuildFrame:IsShown()))) then
IonGuildButton:SetButtonState("PUSHED", 1)
IonGuildButton.tabard:SetPoint("TOPLEFT", -1, -1)
IonGuildButton.tabard:SetAlpha(0.5)
elseif (IonGuildButton) then
IonGuildButton:GetNormalTexture():SetDesaturated(nil)
IonGuildButton:GetNormalTexture():SetVertexColor(1,1,1)
IonGuildButton:GetPushedTexture():SetDesaturated(nil)
IonGuildButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButton-Socials-Down")
IonGuildButton:SetHighlightTexture("Interface\\Buttons\\UI-MicroButton-Hilight")
IonGuildButton:SetButtonState("NORMAL")
IonGuildButton.tabard:SetPoint("TOPLEFT", 0, 0)
IonGuildButton.tabard:SetAlpha(1.0)
IonGuildButton.disabledTooltip = nil
if (IsInGuild()) then
updateTabard(IonGuildButton)
end
end
if (IonLFDButton and PVEFrame and PVEFrame:IsShown()) then
IonLFDButton:SetButtonState("PUSHED", 1)
elseif (IonLFDButton) then
if (playerLevel < SHOW_LFD_LEVEL) then
IonLFDButton:GetNormalTexture():SetDesaturated(1)
IonLFDButton:GetNormalTexture():SetVertexColor(0.5,0.5,0.5)
IonLFDButton:GetPushedTexture():SetDesaturated(1)
IonLFDButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButton-LFG-Up")
IonLFDButton:SetHighlightTexture("")
IonLFDButton.disabledTooltip = format(FEATURE_BECOMES_AVAILABLE_AT_LEVEL, SHOW_LFD_LEVEL)
else
IonLFDButton:GetNormalTexture():SetDesaturated(nil)
IonLFDButton:GetNormalTexture():SetVertexColor(1,1,1)
IonLFDButton:GetPushedTexture():SetDesaturated(nil)
IonLFDButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButton-LFG-Down")
IonLFDButton:SetHighlightTexture("Interface\\Buttons\\UI-MicroButton-Hilight")
IonLFDButton:SetButtonState("NORMAL")
IonLFDButton.disabledTooltip = nil
end
end
if (IonCompanionButton and PetJournalParent and PetJournalParent:IsShown()) then
IonCompanionButton:SetButtonState("PUSHED", 1)
elseif (IonCompanionButton) then
IonCompanionButton:GetNormalTexture():SetDesaturated(nil)
IonCompanionButton:GetNormalTexture():SetVertexColor(1,1,1)
IonCompanionButton:GetPushedTexture():SetDesaturated(nil)
IonCompanionButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButton-Mounts-Down")
IonCompanionButton:SetHighlightTexture("Interface\\Buttons\\UI-MicroButton-Hilight")
IonCompanionButton:SetButtonState("NORMAL")
IonCompanionButton.disabledTooltip = nil
end
if (IonEJButton and EncounterJournal and EncounterJournal:IsShown()) then
IonEJButton:SetButtonState("PUSHED", 1)
elseif (IonEJButton) then
IonEJButton:GetNormalTexture():SetDesaturated(nil)
IonEJButton:GetNormalTexture():SetVertexColor(1,1,1)
IonEJButton:GetPushedTexture():SetDesaturated(nil)
IonEJButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButton-EJ-Down")
IonEJButton:SetHighlightTexture("Interface\\Buttons\\UI-MicroButton-Hilight")
IonEJButton:SetButtonState("NORMAL")
IonEJButton.disabledTooltip = nil
end
if (IonHelpButton and HelpFrame:IsShown()) then
IonHelpButton:SetButtonState("PUSHED", 1)
elseif (IonHelpButton) then
IonHelpButton:SetButtonState("NORMAL")
end
if (IonAchievementButton and AchievementFrame and AchievementFrame:IsShown()) then
IonAchievementButton:SetButtonState("PUSHED", 1)
elseif (IonAchievementButton) then
if ((HasCompletedAnyAchievement() or IsInGuild()) and CanShowAchievementUI()) then
IonAchievementButton:GetNormalTexture():SetDesaturated(nil)
IonAchievementButton:GetNormalTexture():SetVertexColor(1,1,1)
IonAchievementButton:GetPushedTexture():SetDesaturated(nil)
IonAchievementButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButton-Achievement-Down")
IonAchievementButton:SetHighlightTexture("Interface\\Buttons\\UI-MicroButton-Hilight")
IonAchievementButton:SetButtonState("NORMAL")
IonAchievementButton.disabledTooltip = nil
else
IonAchievementButton:GetNormalTexture():SetDesaturated(1)
IonAchievementButton:GetNormalTexture():SetVertexColor(0.5,0.5,0.5)
IonAchievementButton:GetPushedTexture():SetDesaturated(1)
IonAchievementButton:SetPushedTexture("Interface\\Buttons\\UI-MicroButton-Achievement-Up")
IonAchievementButton:SetHighlightTexture("")
IonAchievementButton.disabledTooltip = "Feature becomes available after you earn your first achievement"
end
end
end
function ION.CharacterButton_OnLoad(self)
self.portrait = _G[self:GetName().."Portrait"]
SetPortraitTexture(self.portrait, "player")
self:SetNormalTexture("Interface\\Buttons\\UI-MicroButtonCharacter-Up")
self:SetPushedTexture("Interface\\Buttons\\UI-MicroButtonCharacter-Down")
self:SetHighlightTexture("Interface\\Buttons\\UI-MicroButton-Hilight")
self:RegisterEvent("UNIT_PORTRAIT_UPDATE")
self:RegisterEvent("UPDATE_BINDINGS")
self.tooltipText = MicroButtonTooltipText(CHARACTER_BUTTON, "TOGGLECHARACTER0")
self.newbieText = NEWBIE_TOOLTIP_CHARACTER
menuElements[#menuElements+1] = self
end
function ION.CharacterButton_OnMouseDown(self)
if (self.down) then
self.down = nil
ToggleCharacter("PaperDollFrame")
return
end
ION.CharacterButton_SetPushed(self)
self.down = 1
end
function ION.CharacterButton_OnMouseUp(self)
if (self.down) then
self.down = nil
if (self:IsMouseOver()) then
ToggleCharacter("PaperDollFrame")
else
updateMicroButtons()
end
return
end
if (self:GetButtonState() == "NORMAL") then
ION.CharacterButton_SetPushed(self)
self.down = 1
else
ION.CharacterButton_SetNormal(self)
self.down = 1
end
end
function ION.CharacterButton_OnEvent(self, event, ...)
if (event == "UNIT_PORTRAIT_UPDATE") then
if (... == "player") then
SetPortraitTexture(self.portrait, ...)
end
elseif (event == "UPDATE_BINDINGS") then
self.tooltipText = MicroButtonTooltipText(CHARACTER_BUTTON, "TOGGLECHARACTER0")
end
end
function ION.CharacterButton_SetPushed(self)
self.portrait:SetTexCoord(0.2666, 0.8666, 0, 0.8333)
self.portrait:SetAlpha(0.5)
end
function ION.CharacterButton_SetNormal(self)
self.portrait:SetTexCoord(0.2, 0.8, 0.0666, 0.9)
self.portrait:SetAlpha(1.0)
end
function ION.SpellbookButton_OnLoad(self)
self:SetAttribute("type", "macro")
self:SetAttribute("*macrotext*", "/click SpellbookMicroButton")
self:RegisterEvent("UPDATE_BINDINGS")
LoadMicroButtonTextures(self, "Spellbook")
menuElements[#menuElements+1] = self
end
function ION.SpellbookButton_OnClick(self)
if (not InCombatLockdown()) then
ToggleSpellBook(BOOKTYPE_SPELL)
end
end
function ION.SpellbookButton_OnEnter(self)
self.tooltipText = MicroButtonTooltipText(SPELLBOOK_ABILITIES_BUTTON, "TOGGLESPELLBOOK")
GameTooltip_AddNewbieTip(self, self.tooltipText, 1.0, 1.0, 1.0, NEWBIE_TOOLTIP_SPELLBOOK)
end
function ION.SpellbookButton_OnEvent(self, event, ...)
self.tooltipText = MicroButtonTooltipText(SPELLBOOK_ABILITIES_BUTTON, "TOGGLESPELLBOOK")
end
function ION.TalentButton_OnLoad(self)
LoadMicroButtonTextures(self, "Talents")
self:SetAttribute("type", "macro")
self:SetAttribute("*macrotext*", "/click TalentMicroButton")
self.tooltipText = MicroButtonTooltipText(TALENTS_BUTTON, "TOGGLETALENTS")
self.newbieText = NEWBIE_TOOLTIP_TALENTS
self:RegisterEvent("PLAYER_LEVEL_UP")
self:RegisterEvent("UPDATE_BINDINGS")
self:RegisterEvent("UNIT_LEVEL")
self:RegisterEvent("PLAYER_ENTERING_WORLD")
self:HookScript("OnEnter", function(self) if (self.disabledTooltip) then GameTooltip:AddLine(self.disabledTooltip, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, true) GameTooltip:Show() end end)
menuElements[#menuElements+1] = self
end
function ION.TalentButton_OnEvent(self, event, ...)
if (event == "PLAYER_LEVEL_UP") then
UpdateMicroButtons()
if (not CharacterFrame:IsShown()) then
SetButtonPulse(self, 60, 1)
end
elseif (event == "UNIT_LEVEL" or event == "PLAYER_ENTERING_WORLD") then
UpdateMicroButtons()
elseif (event == "UPDATE_BINDINGS") then
self.tooltipText = MicroButtonTooltipText(TALENTS_BUTTON, "TOGGLETALENTS")
end
end
function ION.AchievementButton_OnLoad(self)
LoadMicroButtonTextures(self, "Achievement")
self:RegisterEvent("PLAYER_ENTERING_WORLD")
self:RegisterEvent("UPDATE_BINDINGS")
menuElements[#menuElements+1] = self
end
function ION.AchievementButton_OnEvent(self, event, ...)
if (event == "PLAYER_ENTERING_WORLD") then
AchievementMicroButton_OnEvent(self, event, ...)
elseif (event == "UPDATE_BINDINGS") then
self.tooltipText = MicroButtonTooltipText(TALENTS_BUTTON, "TOGGLETALENTS")
end
end
function ION.AchievementButton_OnClick(self)
ToggleAchievementFrame()
end
function ION.AchievementButton_OnEnter(self)
self.tooltipText = MicroButtonTooltipText(ACHIEVEMENT_BUTTON, "TOGGLEACHIEVEMENT")
GameTooltip_AddNewbieTip(self, self.tooltipText, 1.0, 1.0, 1.0, NEWBIE_TOOLTIP_ACHIEVEMENT)
if (self.disabledTooltip) then
GameTooltip:AddLine("\n"..self.disabledTooltip, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, true)
end
GameTooltip:Show()
end
function ION.QuestLogButton_OnLoad(self)
LoadMicroButtonTextures(self, "Quest")
self.tooltipText = MicroButtonTooltipText(QUESTLOG_BUTTON, "TOGGLEQUESTLOG")
self.newbieText = NEWBIE_TOOLTIP_QUESTLOG
menuElements[#menuElements+1] = self
end
function ION.QuestLogButton_OnEvent(self, event, ...)
self.tooltipText = MicroButtonTooltipText(QUESTLOG_BUTTON, "TOGGLEQUESTLOG")
end
function ION.QuestLogButton_OnClick(self)
ToggleFrame(QuestLogFrame)
end
-- IonGuildButton.tabard:SetPoint("TOPLEFT", -1, -1) IonGuildButton.tabard:SetAlpha(0.5)
function ION.GuildButton_OnLoad(self)
self:SetAttribute("type", "macro")
self:SetAttribute("*macrotext*", "/click GuildMicroButton")
self:SetScript("OnMouseDown", function(self) self.tabard:SetPoint("TOPLEFT", -1, -1) self.tabard:SetAlpha(0.5) end)
self:RegisterEvent("UPDATE_BINDINGS")
self:RegisterEvent("PLAYER_GUILD_UPDATE")
LoadMicroButtonTextures(self, "Socials")
self.tooltipText = MicroButtonTooltipText(GUILD, "TOGGLEGUILDTAB")
self.newbieText = NEWBIE_TOOLTIP_GUILDTAB
self:HookScript("OnEnter", function(self) if (self.disabledTooltip) then GameTooltip:AddLine(self.disabledTooltip, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, true) GameTooltip:Show() end end)
updateTabard(self)
menuElements[#menuElements+1] = self
end
function ION.GuildButton_OnEvent(self, event, ...)
if (event == "UPDATE_BINDINGS") then
self.tooltipText = MicroButtonTooltipText(GUILD, "TOGGLEGUILDTAB")
elseif (event == "PLAYER_GUILD_UPDATE") then
UpdateMicroButtons()
end
end
function ION.PVPButton_OnLoad(self)
self:RegisterEvent("UPDATE_BINDINGS")
self:SetNormalTexture("Interface\\Buttons\\UI-MicroButtonCharacter-Up")
self:SetPushedTexture("Interface\\Buttons\\UI-MicroButtonCharacter-Down")
self:SetHighlightTexture("Interface\\Buttons\\UI-MicroButton-Hilight")
self.faction = _G[self:GetName().."Faction"]
local factionGroup = UnitFactionGroup("player")
if (factionGroup) then
self.factionGroup = factionGroup
self.faction:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..self.factionGroup)
end
self.tooltipText = MicroButtonTooltipText(PLAYER_V_PLAYER, "TOGGLECHARACTER4")
self.newbieText = NEWBIE_TOOLTIP_PVP
self:HookScript("OnEnter", function(self) if (self.disabledTooltip) then GameTooltip:AddLine(self.disabledTooltip, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, true) GameTooltip:Show() end end)
menuElements[#menuElements+1] = self
end
function ION.PVPButton_OnEvent(self, event, ...)
self.tooltipText = MicroButtonTooltipText(PLAYER_V_PLAYER, "TOGGLECHARACTER4")
self.newbieText = NEWBIE_TOOLTIP_PVP
end
function ION.PVPButton_OnMouseDown(self)
if (self.disabledTooltip) then
self.faction:SetVertexColor(1,1,1)
return
end
if (self.down) then
self.down = nil
if (PVPUIFrame) then
ToggleFrame(PVPUIFrame)
else
LoadAddOn("Blizzard_PVPUI")
ToggleFrame(PVPUIFrame)
end
return
end
ION.PVPButton_SetPushed(self)
self.down = 1
end
function ION.PVPButton_OnMouseUp(self)
if (self.disabledTooltip) then
self.faction:SetVertexColor(0.5,0.5,0.5)
return
end
if (self.down) then
self.down = nil
if self:IsMouseOver() then
if (PVPUIFrame) then
ToggleFrame(PVPUIFrame)
else
LoadAddOn("Blizzard_PVPUI")
ToggleFrame(PVPUIFrame)
end
else
updateMicroButtons()
end
return
end
if (self:GetButtonState() == "NORMAL") then
ION.PVPButton_SetPushed(self)
else
ION.PVPButton_SetNormal(self)
end
self.down = 1
end
function ION.PVPButton_SetPushed(self)
self.faction:SetPoint("TOP", self, "TOP", 5, -31)
self.faction:SetAlpha(0.5)
end
function ION.PVPButton_SetNormal(self)
self.faction:SetPoint("TOP", self, "TOP", 6, -30)
self.faction:SetAlpha(1.0)
end
function ION.LFDButton_OnLoad(self)
self:RegisterEvent("UPDATE_BINDINGS")
self.tooltipText = MicroButtonTooltipText(DUNGEONS_BUTTON, "TOGGLELFGPARENT")
self.newbieText = NEWBIE_TOOLTIP_LFGPARENT
LoadMicroButtonTextures(self, "LFG")
self:HookScript("OnEnter", function(self) if (self.disabledTooltip) then GameTooltip:AddLine(self.disabledTooltip, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, true) GameTooltip:Show() end end)
menuElements[#menuElements+1] = self
end
function ION.LFDButton_OnEvent(self, event, ...)
self.tooltipText = MicroButtonTooltipText(DUNGEONS_BUTTON, "TOGGLELFGPARENT")
self.newbieText = NEWBIE_TOOLTIP_LFGPARENT
end
function ION.LFDButton_OnClick(self)
if (self.disabledTooltip) then
return
end
if (ToggleLFDParentFrame) then
ToggleLFDParentFrame()
elseif (ToggleLFDParentFrame) then
ToggleLFDParentFrame()
end
end
function ION.CompanionButton_OnLoad(self)
self:RegisterEvent("UPDATE_BINDINGS")
self.tooltipText = MicroButtonTooltipText(MOUNTS_AND_PETS, "TOGGLEMOUNTJOURNAL")
self.newbieText = NEWBIE_TOOLTIP_MOUNTS_AND_PETS
LoadMicroButtonTextures(self, "Mounts")
self:HookScript("OnEnter", function(self) if (self.disabledTooltip) then GameTooltip:AddLine(self.disabledTooltip, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, true) GameTooltip:Show() end end)
menuElements[#menuElements+1] = self
end
function ION.CompanionButton_OnEvent(self, event, ...)
self.tooltipText = MicroButtonTooltipText(MOUNTS_AND_PETS, "TOGGLEMOUNTJOURNAL")
self.newbieText = NEWBIE_TOOLTIP_MOUNTS_AND_PETS
end
function ION.CompanionButton_OnClick(self)
TogglePetJournal()
end
function ION.EJButton_OnLoad(self)
self:RegisterEvent("UPDATE_BINDINGS")
self.tooltipText = MicroButtonTooltipText(ENCOUNTER_JOURNAL, "TOGGLEENCOUNTERJOURNAL")
self.newbieText = NEWBIE_TOOLTIP_ENCOUNTER_JOURNAL
LoadMicroButtonTextures(self, "EJ")
self:HookScript("OnEnter", function(self) if (self.disabledTooltip) then GameTooltip:AddLine(self.disabledTooltip, RED_FONT_COLOR.r, RED_FONT_COLOR.g, RED_FONT_COLOR.b, true) GameTooltip:Show() end end)
menuElements[#menuElements+1] = self
end
function ION.EJButton_OnEvent(self, event, ...)
self.tooltipText = MicroButtonTooltipText(ENCOUNTER_JOURNAL, "TOGGLEENCOUNTERJOURNAL")
self.newbieText = NEWBIE_TOOLTIP_ENCOUNTER_JOURNAL
end
function ION.EJButton_OnClick(self)
if (self.disabledTooltip) then
return
end
if (not EncounterJournal) then
EncounterJournal_LoadUI()
end
if (EncounterJournal) then
ToggleFrame(EncounterJournal)
end
end
function ION.HelpButton_OnLoad(self)
LoadMicroButtonTextures(self, "Help")
self.tooltipText = HELP_BUTTON
self.newbieText = NEWBIE_TOOLTIP_HELP
menuElements[#menuElements+1] = self
end
function ION.HelpButton_OnClick(self)
ToggleHelpFrame()
end
function ION.LatencyButton_OnLoad(self)
self.hover = nil
self.elapsed = 0
self.overlay = _G[self:GetName().."Overlay"]
self.overlay:SetWidth(self:GetWidth()+1)
self.overlay:SetHeight(self:GetHeight())
self.tooltipText = MicroButtonTooltipText(MAINMENU_BUTTON, "TOGGLEGAMEMENU")
self.newbieText = NEWBIE_TOOLTIP_MAINMENU
self:RegisterForClicks("LeftButtonDown", "RightButtonDown", "LeftButtonUp", "RightButtonUp")
self:RegisterEvent("ADDON_LOADED")
self:RegisterEvent("UPDATE_BINDINGS")
menuElements[#menuElements+1] = self
end
function ION.LatencyButton_OnEvent(self, event, ...)
if (event == "ADDON_LOADED" and ...=="Ion-MenuBar") then
self.lastStart = 0
if (GDB) then
self.enabled = GDB.scriptProfile
end
GameMenuFrame:HookScript("OnShow", ION.LatencyButton_SetPushed)
GameMenuFrame:HookScript("OnHide", ION.LatencyButton_SetNormal)
end
self.tooltipText = MicroButtonTooltipText(MAINMENU_BUTTON, "TOGGLEGAMEMENU")
end
function ION.LatencyButton_OnClick(self, button, down)
if (button == "RightButton") then
if (IsShiftKeyDown()) then
if (GDB.scriptProfile) then
SetCVar("scriptProfile", "0")
GDB.scriptProfile = false
else
SetCVar("scriptProfile", "1")
GDB.scriptProfile = true
end
ReloadUI()
end
if (not down) then
if (self.alt_tooltip) then
self.alt_tooltip = false
else
self.alt_tooltip = true
end
ION.LatencyButton_SetNormal()
else
ION.LatencyButton_SetPushed()
end
ION.LatencyButton_OnEnter(self)
elseif (IsShiftKeyDown()) then
ReloadUI()
else
if (self.down) then
self.down = nil;
if (not GameMenuFrame:IsShown()) then
CloseMenus()
CloseAllWindows()
PlaySound("igMainMenuOpen")
ShowUIPanel(GameMenuFrame)
else
PlaySound("igMainMenuQuit")
HideUIPanel(GameMenuFrame)
ION.LatencyButton_SetNormal()
end
if (InterfaceOptionsFrame:IsShown()) then
InterfaceOptionsFrameCancel:Click()
end
return;
end
if (self:GetButtonState() == "NORMAL") then
ION.LatencyButton_SetPushed()
self.down = 1;
else
self.down = 1;
end
end
end
function ION.LatencyButton_OnUpdate(self, elapsed)
self.elapsed = self.elapsed + elapsed
if (self.elapsed > 2.5) then
local r, g, rgbValue
local bandwidthIn, bandwidthOut, latency = GetNetStats()
if (latency <= 1000) then
rgbValue = math.floor((latency/1000)*100)
else
rgbValue = 100
end
if (rgbValue < 50) then
r=rgbValue/50; g=1-(rgbValue/100)
else
r=1; g=abs((rgbValue/100)-1)
end
self.overlay:SetVertexColor(r, g, 0)
if (self.hover) then
ION.LatencyButton_OnEnter(self)
end
if (self.enabled) then
UpdateAddOnCPUUsage()
UpdateAddOnMemoryUsage()
self.lastUsage = self.currUsage or 0
self.currUsage = GetScriptCPUUsage()
self.usage = self.currUsage - self.lastUsage
end
self.elapsed = 0
end
end
function ION.LatencyButton_OnEnter(self)
self.hover = 1
if (self.alt_tooltip and not IonMenuBarTooltip.wasShown) then
ION.LatencyButton_AltOnEnter(self)
IonMenuBarTooltip:AddLine("\nLatency Button by LedMirage of MirageUI")
GameTooltip:Hide()
IonMenuBarTooltip:Show()
elseif (self:IsMouseOver()) then
MainMenuBarPerformanceBarFrame_OnEnter(self)
local objects = ION:GetParentKeys(GameTooltip)
local foundion, text
for k,v in pairs(objects) do
if (_G[v]:IsObjectType("FontString")) then
text = _G[v]:GetText()
if (text) then
foundion = text:match("%s+Ion$")
end
end
end
if (not foundion) then
for i=1, GetNumAddOns() do
if (select(1,GetAddOnInfo(i)) == "Ion") then
local mem = GetAddOnMemoryUsage(i)
if (mem > 1000) then
mem = mem / 1000
end
GameTooltip:AddLine(format(ADDON_MEM_MB_ABBR, mem, select(1,GetAddOnInfo(i))), 1.0, 1.0, 1.0)
end
end
end
GameTooltip:AddLine("\nLatency Button by LedMirage of MirageUI")
IonMenuBarTooltip:Hide()
GameTooltip:Show()
end
end
function ION.LatencyButton_AltOnEnter(self)
if (not IonMenuBarTooltip:IsVisible()) then
IonMenuBarTooltip:SetOwner(UIParent, "ANCHOR_PRESERVE")
end
if (self.enabled) then
IonMenuBarTooltip:SetText("Script Profiling is |cff00ff00Enabled|r", 1, 1, 1)
IonMenuBarTooltip:AddLine("(Shift-RightClick to Disable)", NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1)
IonMenuBarTooltip:AddLine("\n|cfff00000Warning:|r Script Profiling Affects Game Performance\n", 1, 1, 1, 1)
for i=1, GetNumAddOns() do
local name,_,_,enabled = GetAddOnInfo(i)
if (not addonData[i]) then
addonData[i] = { name = name, enabled = enabled }
end
local addon = addonData[i]
addon.currMem = GetAddOnMemoryUsage(i)
if (not addon.maxMem or addon.maxMem < addon.currMem) then
addon.maxMem = addon.currMem
end
local currCPU = GetAddOnCPUUsage(i)
if (addon.lastUsage) then
addon.currCPU = (currCPU - addon.lastUsage)/2.5
if (not addon.maxCPU or addon.maxCPU < addon.currCPU) then
addon.maxCPU = addon.currCPU
end
else
addon.currCPU = currCPU
end
if (self.usage > 0) then
addon.percentCPU = addon.currCPU/self.usage * 100
else
addon.percentCPU = 0
end
addon.lastUsage = currCPU
if (self.lastStart > 0) then
addon.avgCPU = currCPU / self.lastStart
end
end
if (self.usage) then
IonMenuBarTooltip:AddLine("|cffffffff("..format("%.2f",(self.usage) / 2.5).."ms)|r Total Script CPU Time\n", NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1)
end
wipe(sortData)
for i,v in ipairs(addonData) do
if (addonData[i].enabled) then
local addLine = ""
if (addonData[i].currCPU and addonData[i].currCPU > 0) then
addLine = addLine..format("%.2f", addonData[i].currCPU).."ms/"..format("%.1f", addonData[i].percentCPU).."%)|r "
local num = tonumber(addLine:match("^%d+"))
if (num and num < 10) then
addLine = "0"..addLine
end
if (addonData[i].name) then
addLine = "|cffffffff("..addLine..addonData[i].name.." "
end
tinsert(sortData, addLine)
end
end
end
sort(sortData, function(a,b) return a>b end)
for i,v in ipairs(sortData) do
IonMenuBarTooltip:AddLine(v, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1)
end
else
IonMenuBarTooltip:SetText("Script Profiling is |cfff00000Disabled|r", 1, 1, 1)
IonMenuBarTooltip:AddLine("(Shift-RightClick to Enable)", NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1)
IonMenuBarTooltip:AddLine("\n|cfff00000Warning:|r Script Profiling Affects Game Performance\n", 1, 1, 1, 1)
end
end
function ION.LatencyButton_OnLeave(self)
if (GameTooltip:IsVisible()) then
self.hover = nil
GameTooltip:Hide()
end
end
function ION.LatencyButton_SetPushed()
IonLatencyButtonOverlay:SetPoint("CENTER", IonLatencyButton, "CENTER", -1, -2)
end
function ION.LatencyButton_SetNormal()
IonLatencyButtonOverlay:SetPoint("CENTER", IonLatencyButton, "CENTER", 0, -0.5)
end
function ANCHOR:SetData(bar)
if (bar) then
self.bar = bar
self:SetFrameStrata(bar.gdata.objectStrata)
self:SetScale(bar.gdata.scale)
end
self:SetFrameLevel(4)
end
function ANCHOR:SaveData()
-- empty
end
function ANCHOR:LoadData(spec, state)
local id = self.id
self.GDB = menubtnsGDB
self.CDB = menubtnsCDB
if (self.GDB and self.CDB) then
if (not self.GDB[id]) then
self.GDB[id] = {}
end
if (not self.GDB[id].config) then
self.GDB[id].config = CopyTable(configData)
end
if (not self.CDB[id]) then
self.CDB[id] = {}
end
if (not self.CDB[id].data) then
self.CDB[id].data = {}
end
self.config = self.GDB [id].config
self.data = self.CDB[id].data
end
end
function ANCHOR:SetGrid(show, hide)
--empty
end
function ANCHOR:SetAux()
-- empty
end
function ANCHOR:LoadAux()
-- empty
end
function ANCHOR:SetDefaults()
-- empty
end
function ANCHOR:GetDefaults()
--empty
end
function ANCHOR:SetType(save)
if (menuElements[self.id]) then
self:SetWidth(menuElements[self.id]:GetWidth()*0.90)
self:SetHeight(menuElements[self.id]:GetHeight()/1.60)
self:SetHitRectInsets(self:GetWidth()/2, self:GetWidth()/2, self:GetHeight()/2, self:GetHeight()/2)
self.element = menuElements[self.id]
local objects = ION:GetParentKeys(self.element)
for k,v in pairs(objects) do
local name = v:gsub(self.element:GetName(), "")
self[name:lower()] = _G[v]
end
self.element.normaltexture = self.element:CreateTexture("$parentNormalTexture", "OVERLAY", "IonCheckButtonTextureTemplate")
self.element.normaltexture:ClearAllPoints()
self.element.normaltexture:SetPoint("CENTER", 0, 0)
self.element.icontexture = self.element:GetNormalTexture()
self.element:ClearAllPoints()
self.element:SetParent(self)
self.element:Show()
self.element:SetPoint("BOTTOM", self, "BOTTOM", 0, -1)
self.element:SetHitRectInsets(3, 3, 23, 3)
end
end
local function controlOnEvent(self, event, ...)
if (event == "ADDON_LOADED" and ... == "Ion-MenuBar") then
hooksecurefunc("UpdateMicroButtons", updateMicroButtons)
GDB = IonMenuGDB; CDB = IonMenuCDB
for k,v in pairs(defGDB) do
if (GDB[k] == nil) then
GDB[k] = v
end
end
for k,v in pairs(defCDB) do
if (CDB[k] == nil) then
CDB[k] = v
end
end
menubarsGDB = GDB.menubars
menubarsCDB = CDB.menubars
menubtnsGDB = GDB.menubtns
menubtnsCDB = CDB.menubtns
ION:RegisterBarClass("menu", "Menu Bar", "Menu Button", menubarsGDB, menubarsCDB, MENUIndex, menubtnsGDB, "CheckButton", "IonAnchorButtonTemplate", { __index = ANCHOR }, #menuElements, false, STORAGE, gDef, nil, true)
ION:RegisterGUIOptions("menu", { AUTOHIDE = true, SHOWGRID = false, SPELLGLOW = false, SNAPTO = true, DUALSPEC = false, HIDDEN = true, LOCKBAR = false, TOOLTIPS = true }, false, false)
if (GDB.firstRun) then
local bar, object = ION:CreateNewBar("menu", 1, true)
for i=1,#menuElements do
object = ION:CreateNewObject("menu", i)
bar:AddObjectToList(object)
end
GDB.firstRun = false
else
for id,data in pairs(menubarsGDB) do
if (data ~= nil) then
ION:CreateNewBar("menu", id)
end
end
for id,data in pairs(menubtnsGDB) do
if (data ~= nil) then
ION:CreateNewObject("menu", id)
end
end
end
STORAGE:Hide()
elseif (event == "PLAYER_LOGIN") then
elseif (event == "PLAYER_ENTERING_WORLD" and not PEW) then
PEW = true
end
end
local frame = CreateFrame("Frame", nil, UIParent)
frame:SetScript("OnEvent", controlOnEvent)
frame:RegisterEvent("ADDON_LOADED")
frame:RegisterEvent("PLAYER_LOGIN")
frame:RegisterEvent("PLAYER_ENTERING_WORLD")