local addonName, addon = ... local display = LibStub("EasyDisplay-1.0") local L = LibStub("AceLocale-3.0"):GetLocale(addonName) local function addons() local n = 1 local count = 0 local max = 40 local addons = GetNumAddOns() return function () for i = n, addons do local name, _, _, enabled = GetAddOnInfo(i) if count <= max and enabled then n = i + 1 count = count + 1 return name, GetAddOnMemoryUsage(i) end end end end local function getTotalMemUsage() UpdateAddOnMemoryUsage() local long, short local totalMem = 0 for _, mem in addons() do totalMem = totalMem + mem end if totalMem > 0 then if totalMem > 1000 then totalMem = totalMem / 1000 short = format("%.2f MB", totalMem) long = format(TOTAL_MEM_MB_ABBR, totalMem) else short = format("%.0f KB", totalMem) long = format(TOTAL_MEM_KB_ABBR, totalMem) end end return totalMem, long, short end local topAddOns = { } local numAddOns = 0 local tooltip = GameTooltip function addon:UpdateTooltip() local db = self.db.profile if db.hideTooltip then return end if numAddOns ~= db.numAddOns then for i=1, db.numAddOns do topAddOns[i] = { value = 0, name = "" } end numAddOns = db.numAddOns end local text = "" local i, j, k = 0, 0, 0 tooltip:ClearLines() tooltip:AddLine(self.name, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1) -- latency local _, _, latencyHome, latencyWorld = GetNetStats() text = format(MAINMENUBAR_LATENCY_LABEL, latencyHome, latencyWorld) tooltip:AddLine(" ") tooltip:AddLine(text, 1.0, 1.0, 1.0) if SHOW_NEWBIE_TIPS == "1" then tooltip:AddLine(NEWBIE_TOOLTIP_LATENCY, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1) end tooltip:AddLine(" ") -- framerate text = format(MAINMENUBAR_FPS_LABEL, GetFramerate()) tooltip:AddLine(text, 1.0, 1.0, 1.0) if SHOW_NEWBIE_TIPS == "1" then tooltip:AddLine(NEWBIE_TOOLTIP_FRAMERATE, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1) end local bandwidth = GetAvailableBandwidth() if not bandwidth == 0 then tooltip:AddLine(" ") text = format(MAINMENUBAR_BANDWIDTH_LABEL, GetAvailableBandwidth()) tooltip:AddLine(text, 1.0, 1.0, 1.0) if SHOW_NEWBIE_TIPS == "1" then tooltip:AddLine(NEWBIE_TOOLTIP_BANDWIDTH, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1) end end local percent = floor(GetDownloadedPercentage() * 100 + 0.5) if not percent == 0 then tooltip:AddLine(" ") text = format(MAINMENUBAR_DOWNLOAD_PERCENT_LABEL, percent) tooltip:AddLine(text, 1.0, 1.0, 1.0) if ( SHOW_NEWBIE_TIPS == "1" ) then tooltip:AddLine(NEWBIE_TOOLTIP_DOWNLOAD_PERCENT, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1) end end -- memory local totalMem, totalText = getTotalMemUsage() if totalMem > 0 then local mem for i = 1, db.numAddOns, 1 do topAddOns[i].value = 0 end for name, mem in addons() do for j = 1, db.numAddOns, 1 do if mem > topAddOns[j].value then for k = db.numAddOns, 1, -1 do if k == j then topAddOns[k].value = mem topAddOns[k].name = name break elseif k ~= 1 then topAddOns[k].value = topAddOns[k-1].value topAddOns[k].name = topAddOns[k-1].name end end break end end end tooltip:AddLine(" ") tooltip:AddLine(totalText, 1.0, 1.0, 1.0) if SHOW_NEWBIE_TIPS == "1" then tooltip:AddLine(NEWBIE_TOOLTIP_MEMORY, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1) end for i = 1, db.numAddOns, 1 do if topAddOns[i].value == 0 then break end local size = topAddOns[i].value if size > 1000 then size = size / 1000 text = format(ADDON_MEM_MB_ABBR, size, topAddOns[i].name) else text = format(ADDON_MEM_KB_ABBR, size, topAddOns[i].name) end tooltip:AddLine(text, 1.0, 1.0, 1.0) end end -- accessibility if not db.hideTooltipAccessibilityBindings then tooltip:AddLine(" ") local text = "" for i, v in ipairs(db.accessibility) do local mouseButton = addon.buttons[db.mouseButton] if v.modifier == 1 then text = ": |cffffffff" .. mouseButton .. "|r" else text = ": |cffffffff" .. mouseButton .. " + " .. addon.modifiers[v.modifier] .. "|r" end text = display:GetInterface(v.name).title .. text tooltip:AddLine(text, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b) end end tooltip:Show() end