8ad40722a0
Update nameplate coloring. Fix world map blips
426 lines
11 KiB
Lua
426 lines
11 KiB
Lua
local E, L, V, P, G = unpack(ElvUI)
|
|
local mod = E:GetModule("Enhanced_Blizzard")
|
|
|
|
local _G = _G
|
|
local select = select
|
|
local floor = math.floor
|
|
local tconcat = table.concat
|
|
|
|
local CreateFrame = CreateFrame
|
|
local DisableAddOn = DisableAddOn
|
|
local EnableAddOn = EnableAddOn
|
|
local GetAddOnDependencies = GetAddOnDependencies
|
|
local GetAddOnInfo = GetAddOnInfo
|
|
local GetNumAddOns = GetNumAddOns
|
|
local IsAddOnLoadOnDemand = IsAddOnLoadOnDemand
|
|
local IsAddOnLoaded = IsAddOnLoaded
|
|
local IsShiftKeyDown = IsShiftKeyDown
|
|
local LoadAddOn = LoadAddOn
|
|
local PlaySound = PlaySound
|
|
|
|
local function AddonList_HasAnyChanged()
|
|
local status = ElvUI_AddonList.startStatus
|
|
|
|
for i = 1, GetNumAddOns() do
|
|
local _, _, _, enabled, _, reason = GetAddOnInfo(i)
|
|
|
|
if not ((enabled == status[i].enabled and not status[i].lod)
|
|
or reason == "DEP_DISABLED"
|
|
or status[i].reason == "DEP_DISABLED"
|
|
or (enabled and status[i].lod and not IsAddOnLoaded(i))
|
|
or (not enabled and status[i].lod and not IsAddOnLoaded(i)))
|
|
then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
local function AddonList_IsAddOnLoadOnDemand(index)
|
|
if IsAddOnLoadOnDemand(index) and not IsAddOnLoaded(index) then
|
|
return true
|
|
end
|
|
end
|
|
|
|
local function AddonList_IsDepsLoaded(...)
|
|
local depsCount = select("#", ...)
|
|
if depsCount == 0 then return end
|
|
|
|
for i = 1, depsCount do
|
|
if not IsAddOnLoaded(select(i, ...)) then
|
|
return
|
|
end
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
local function AddonList_SetStatus(entry, load, status, reload)
|
|
if load then
|
|
entry.LoadButton:Show()
|
|
else
|
|
entry.LoadButton:Hide()
|
|
end
|
|
|
|
if status then
|
|
entry.Status:Show()
|
|
else
|
|
entry.Status:Hide()
|
|
end
|
|
|
|
if reload then
|
|
entry.Reload:Show()
|
|
else
|
|
entry.Reload:Hide()
|
|
end
|
|
end
|
|
|
|
local function AddonList_Update()
|
|
local numEntries = GetNumAddOns()
|
|
local addonIndex, entry, checkbox, status
|
|
|
|
for i = 1, 20 do
|
|
addonIndex = ElvUI_AddonList.offset + i
|
|
entry = _G["ElvUI_AddonListEntry"..i]
|
|
|
|
if addonIndex > numEntries then
|
|
entry:Hide()
|
|
else
|
|
local name, title, _, enabled, loadable, reason = GetAddOnInfo(addonIndex)
|
|
|
|
checkbox = _G["ElvUI_AddonListEntry"..i.."Enabled"]
|
|
checkbox:SetChecked(enabled)
|
|
|
|
status = _G["ElvUI_AddonListEntry"..i.."Title"]
|
|
|
|
if loadable or (enabled and (reason == "DEP_DEMAND_LOADED" or reason == "DEMAND_LOADED")) then
|
|
status:SetTextColor(1.0, 0.78, 0.0)
|
|
elseif enabled and reason ~= "DEP_DISABLED" then
|
|
status:SetTextColor(1.0, 0.1, 0.1)
|
|
else
|
|
status:SetTextColor(0.5, 0.5, 0.5)
|
|
end
|
|
|
|
if title then
|
|
status:SetText(title)
|
|
else
|
|
status:SetText(name)
|
|
end
|
|
|
|
status = _G["ElvUI_AddonListEntry"..i.."Status"]
|
|
if not loadable and reason then
|
|
status:SetText(_G["ADDON_"..reason])
|
|
else
|
|
status:SetText("")
|
|
end
|
|
|
|
if enabled ~= ElvUI_AddonList.startStatus[addonIndex].enabled and reason ~= "DEP_DISABLED" and ElvUI_AddonList.startStatus[addonIndex].reason ~= "DEP_DISABLED" then
|
|
if enabled then
|
|
if AddonList_IsAddOnLoadOnDemand(addonIndex) then
|
|
if AddonList_IsDepsLoaded(GetAddOnDependencies(addonIndex)) then
|
|
AddonList_SetStatus(entry, true)
|
|
else
|
|
AddonList_SetStatus(entry)
|
|
end
|
|
else
|
|
AddonList_SetStatus(entry, nil, nil, true)
|
|
end
|
|
elseif AddonList_IsAddOnLoadOnDemand(addonIndex) then
|
|
AddonList_SetStatus(entry, nil, true)
|
|
else
|
|
AddonList_SetStatus(entry, nil, nil, true)
|
|
end
|
|
else
|
|
AddonList_SetStatus(entry, nil, true)
|
|
end
|
|
|
|
entry.id = addonIndex
|
|
entry:Show()
|
|
end
|
|
end
|
|
|
|
FauxScrollFrame_Update(ElvUI_AddonListScrollFrame, numEntries, 20, 16, nil, nil, nil, nil, nil, nil, true)
|
|
|
|
if AddonList_HasAnyChanged() then
|
|
ElvUI_AddonListOkayButton:SetText(L["Reload UI"])
|
|
ElvUI_AddonList.shouldReload = true
|
|
else
|
|
ElvUI_AddonListOkayButton:SetText(OKAY)
|
|
ElvUI_AddonList.shouldReload = false
|
|
end
|
|
end
|
|
|
|
local function AddonList_Enable(index, enabled)
|
|
if enabled then
|
|
EnableAddOn(index)
|
|
else
|
|
DisableAddOn(index)
|
|
end
|
|
|
|
AddonList_Update()
|
|
end
|
|
|
|
local function AddonList_LoadAddOn(index)
|
|
if not AddonList_IsAddOnLoadOnDemand(index) then return end
|
|
|
|
LoadAddOn(index)
|
|
|
|
if IsAddOnLoaded(index) then
|
|
ElvUI_AddonList.startStatus[index].enabled = 1
|
|
ElvUI_AddonList.startStatus[index].lod = nil
|
|
end
|
|
|
|
AddonList_Update()
|
|
end
|
|
|
|
local function AddonTooltip_BuildDeps(...)
|
|
local depsCount = select("#", ...)
|
|
if depsCount == 0 then return end
|
|
|
|
local deps
|
|
|
|
if depsCount == 1 then
|
|
deps = ...
|
|
elseif depsCount > 1 then
|
|
deps = tconcat({...}, ", ")
|
|
end
|
|
|
|
return L["Dependencies: "] .. deps
|
|
end
|
|
|
|
local function AddonTooltip_Update(self)
|
|
local name, title, notes, _, _, security = GetAddOnInfo(self.id)
|
|
if not name then return end
|
|
|
|
GameTooltip:SetOwner(self)
|
|
|
|
if security == "BANNED" then
|
|
GameTooltip:SetText(L["This addon has been disabled. You should install an updated version."])
|
|
else
|
|
if title then
|
|
GameTooltip:AddLine(title)
|
|
else
|
|
GameTooltip:AddLine(name)
|
|
end
|
|
|
|
GameTooltip:AddLine(notes, 1.0, 1.0, 1.0)
|
|
|
|
local dependsStr = AddonTooltip_BuildDeps(GetAddOnDependencies(self.id))
|
|
if dependsStr then
|
|
GameTooltip:AddLine(AddonTooltip_BuildDeps(GetAddOnDependencies(self.id)))
|
|
end
|
|
end
|
|
|
|
GameTooltip:Show()
|
|
end
|
|
|
|
function mod:AddonList()
|
|
if IsAddOnLoaded("ACP") then return end
|
|
|
|
local S = E:GetModule("Skins")
|
|
|
|
local addonList = CreateFrame("Frame", "ElvUI_AddonList", UIParent)
|
|
addonList:SetFrameStrata("HIGH")
|
|
addonList:Size(520, 466)
|
|
addonList:Point("CENTER", 0, 0)
|
|
addonList:SetTemplate("Transparent")
|
|
addonList:SetClampedToScreen(true)
|
|
addonList:SetMovable(true)
|
|
addonList:EnableMouse(true)
|
|
addonList:RegisterForDrag("LeftButton")
|
|
addonList:Hide()
|
|
tinsert(UISpecialFrames, addonList:GetName())
|
|
|
|
addonList.offset = 0
|
|
addonList.startStatus = {}
|
|
|
|
for i = 1, GetNumAddOns() do
|
|
local _, _, _, enabled, _, reason = GetAddOnInfo(i)
|
|
addonList.startStatus[i] = {
|
|
enabled = enabled,
|
|
reason = reason,
|
|
lod = IsAddOnLoadOnDemand(i)
|
|
}
|
|
end
|
|
|
|
addonList:SetScript("OnDragStart", function(self)
|
|
if IsShiftKeyDown() then
|
|
self:StartMoving()
|
|
end
|
|
end)
|
|
addonList:SetScript("OnDragStop", function(self)
|
|
self:StopMovingOrSizing()
|
|
end)
|
|
|
|
local addonTitle = addonList:CreateFontString("$parentTitle", "BACKGROUND", "GameFontNormal")
|
|
addonTitle:Point("TOP", 0, -7)
|
|
addonTitle:SetText(ADDONS)
|
|
|
|
local cancelButton = CreateFrame("Button", "$parentCancelButton", addonList, "UIPanelButtonTemplate")
|
|
cancelButton:Size(80, 22)
|
|
cancelButton:Point("BOTTOMRIGHT", -8, 8)
|
|
cancelButton:SetText(CANCEL)
|
|
S:HandleButton(cancelButton)
|
|
cancelButton:SetScript("OnClick", function()
|
|
ElvUI_AddonList:Hide()
|
|
end)
|
|
|
|
local okayButton = CreateFrame("Button", "$parentOkayButton", addonList, "UIPanelButtonTemplate")
|
|
okayButton:Size(80, 22)
|
|
okayButton:Point("RIGHT", cancelButton, "LEFT", -7, 0)
|
|
okayButton:SetText(OKAY)
|
|
S:HandleButton(okayButton)
|
|
okayButton:SetScript("OnClick", function()
|
|
if ElvUI_AddonList.shouldReload then
|
|
ReloadUI()
|
|
else
|
|
ElvUI_AddonList:Hide()
|
|
end
|
|
end)
|
|
|
|
local enableAllButton = CreateFrame("Button", "$parentEnableAllButton", addonList, "UIPanelButtonTemplate")
|
|
enableAllButton:Size(120, 22)
|
|
enableAllButton:Point("BOTTOMLEFT", 8, 8)
|
|
enableAllButton:SetText(L["Enable All"])
|
|
S:HandleButton(enableAllButton)
|
|
enableAllButton:SetScript("OnClick", function()
|
|
EnableAllAddOns()
|
|
AddonList_Update()
|
|
end)
|
|
|
|
local disableAllButton = CreateFrame("Button", "$parentDisableAllButton", addonList, "UIPanelButtonTemplate")
|
|
disableAllButton:Size(120, 22)
|
|
disableAllButton:Point("LEFT", enableAllButton, "RIGHT", 7, 0)
|
|
disableAllButton:SetText(L["Disable All"])
|
|
S:HandleButton(disableAllButton)
|
|
disableAllButton:SetScript("OnClick", function()
|
|
DisableAllAddOns()
|
|
AddonList_Update()
|
|
end)
|
|
|
|
addonList:SetScript("OnShow", function()
|
|
AddonList_Update()
|
|
PlaySound("igMainMenuOption")
|
|
end)
|
|
addonList:SetScript("OnHide", function()
|
|
PlaySound("igMainMenuOptionCheckBoxOn")
|
|
end)
|
|
|
|
local scrollFrame = CreateFrame("ScrollFrame", "$parentScrollFrame", addonList, "FauxScrollFrameTemplate")
|
|
scrollFrame:SetTemplate("Transparent")
|
|
scrollFrame:Point("TOPLEFT", 8, -25)
|
|
scrollFrame:Point("BOTTOMRIGHT", -29, 37)
|
|
scrollFrame.scrollBar = _G[scrollFrame:GetName().."ScrollBar"]
|
|
S:HandleScrollBar(scrollFrame.scrollBar, 5)
|
|
|
|
scrollFrame.scrollBar:Point("TOPLEFT", scrollFrame, "TOPRIGHT", 4, -18)
|
|
scrollFrame.scrollBar:Point("BOTTOMLEFT", scrollFrame, "BOTTOMRIGHT", 4, 18)
|
|
|
|
scrollFrame:SetScript("OnVerticalScroll", function(self, offset)
|
|
self.scrollBar:SetValue(offset)
|
|
addonList.offset = floor((offset / 16) + 0.5)
|
|
AddonList_Update()
|
|
|
|
if GameTooltip:IsShown() then
|
|
AddonTooltip_Update(GameTooltip:GetOwner())
|
|
end
|
|
end)
|
|
|
|
local function Enable_OnClick(self)
|
|
AddonList_Enable(self:GetParent().id, self:GetChecked())
|
|
PlaySound("igMainMenuOptionCheckBoxOn")
|
|
end
|
|
|
|
local function Load_OnClick(self)
|
|
AddonList_LoadAddOn(self:GetParent().id)
|
|
end
|
|
|
|
local addonListEntry = {}
|
|
for i = 1, 20 do
|
|
addonListEntry[i] = CreateFrame("Button", "ElvUI_AddonListEntry"..i, scrollFrame)
|
|
addonListEntry[i]:Size(scrollFrame:GetWidth() - 8, 16)
|
|
addonListEntry[i].id = i
|
|
|
|
if i == 1 then
|
|
addonListEntry[i]:Point("TOPLEFT", 4, -4)
|
|
else
|
|
addonListEntry[i]:Point("TOP", addonListEntry[i - 1], "BOTTOM", 0, -4)
|
|
end
|
|
|
|
local enabled = CreateFrame("CheckButton", "$parentEnabled", addonListEntry[i])
|
|
enabled:Size(24, 24)
|
|
enabled:Point("LEFT", -4, 0)
|
|
S:HandleCheckBox(enabled)
|
|
|
|
local title = addonListEntry[i]:CreateFontString("$parentTitle", "BACKGROUND", "GameFontNormal")
|
|
title:Size(220, 12)
|
|
title:Point("LEFT", 22, 0)
|
|
title:SetJustifyH("LEFT")
|
|
|
|
local status = addonListEntry[i]:CreateFontString("$parentStatus", "BACKGROUND", "GameFontNormalSmall")
|
|
status:Size(220, 12)
|
|
status:Point("RIGHT", -22, 0)
|
|
status:SetJustifyH("RIGHT")
|
|
addonListEntry[i].Status = status
|
|
|
|
local reload = addonListEntry[i]:CreateFontString("$parentReload", "BACKGROUND", "GameFontRed")
|
|
reload:Size(220, 12)
|
|
reload:Point("RIGHT", -22, 0)
|
|
reload:SetJustifyH("RIGHT")
|
|
reload:SetText(L["Requires Reload"])
|
|
addonListEntry[i].Reload = reload
|
|
|
|
local load = CreateFrame("Button", "$parentLoad", addonListEntry[i], "UIPanelButtonTemplate")
|
|
load:Size(100, 22)
|
|
load:Point("RIGHT", -21, 0)
|
|
load:SetText(L["Load AddOn"])
|
|
S:HandleButton(load)
|
|
addonListEntry[i].LoadButton = load
|
|
|
|
addonListEntry[i]:SetScript("OnEnter", AddonTooltip_Update)
|
|
addonListEntry[i]:SetScript("OnLeave", GameTooltip_Hide)
|
|
|
|
enabled:SetScript("OnClick", Enable_OnClick)
|
|
load:SetScript("OnClick", Load_OnClick)
|
|
end
|
|
|
|
local buttonAddons = CreateFrame("Button", "ElvUI_AddonListButton", GameMenuFrame, "GameMenuButtonTemplate")
|
|
buttonAddons:Point("TOP", GameMenuButtonMacros, "BOTTOM", 0, -1)
|
|
buttonAddons:SetText(ADDONS)
|
|
S:HandleButton(buttonAddons)
|
|
buttonAddons:SetScript("OnClick", function()
|
|
HideUIPanel(GameMenuFrame)
|
|
ElvUI_AddonList:Show()
|
|
end)
|
|
|
|
self:HookScript(GameMenuButtonRatings, "OnShow", function(self)
|
|
buttonAddons:Point("TOP", self, "BOTTOM", 0, -1)
|
|
end)
|
|
|
|
self:HookScript(GameMenuButtonRatings, "OnHide", function(self)
|
|
buttonAddons:Point("TOP", GameMenuButtonMacros, "BOTTOM", 0, -1)
|
|
end)
|
|
|
|
GameMenuButtonLogout:SetScript("OnShow", function(self)
|
|
self:Point("TOP", buttonAddons, "BOTTOM", 0, -16)
|
|
|
|
if not StaticPopup_Visible("CAMP") and not StaticPopup_Visible("QUIT") then
|
|
self:Enable()
|
|
else
|
|
self:Disable()
|
|
end
|
|
end)
|
|
|
|
if GetLocale() == "koKR" then
|
|
if IsMacClient() then
|
|
GameMenuFrame:Height(308)
|
|
else
|
|
GameMenuFrame:Height(282)
|
|
end
|
|
else
|
|
if IsMacClient() then
|
|
GameMenuFrame:Height(292)
|
|
else
|
|
GameMenuFrame:Height(266)
|
|
end
|
|
end
|
|
end |