Files
coa-elvui/ElvUI/Modules/ActionBars/MicroBar.lua
T
Andrew 5433613833 Modules/ActionBars: Default micro bar enabled, put fully in top left. (#24)
People have trouble opening tickets if this is disabled by default.
2023-01-07 03:52:40 -07:00

194 lines
5.7 KiB
Lua

local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local AB = E:GetModule("ActionBars")
--Lua functions
local _G = _G
--WoW API / Variables
local CreateFrame = CreateFrame
local InCombatLockdown = InCombatLockdown
local RegisterStateDriver = RegisterStateDriver
local MICRO_BUTTONS = {
"CharacterMicroButton",
"SpellbookMicroButton",
"TalentMicroButton",
"AchievementMicroButton",
"QuestLogMicroButton",
"SocialsMicroButton",
"PVPMicroButton",
"LFDMicroButton",
"MainMenuMicroButton",
"HelpMicroButton"
}
local function onEnter(button)
if AB.db.microbar.mouseover then
E:UIFrameFadeIn(ElvUI_MicroBar, 0.2, ElvUI_MicroBar:GetAlpha(), AB.db.microbar.alpha)
end
if button and button ~= ElvUI_MicroBar and button.backdrop then
button.backdrop:SetBackdropBorderColor(unpack(E.media.rgbvaluecolor))
end
end
local function onLeave(button)
if AB.db.microbar.mouseover then
E:UIFrameFadeOut(ElvUI_MicroBar, 0.2, ElvUI_MicroBar:GetAlpha(), 0)
end
if button and button ~= ElvUI_MicroBar and button.backdrop then
button.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
end
end
function AB:HandleMicroButton(button)
local pushed = button:GetPushedTexture()
local normal = button:GetNormalTexture()
local disabled = button:GetDisabledTexture()
local f = CreateFrame("Frame", nil, button)
f:SetFrameLevel(button:GetFrameLevel() - 1)
f:SetTemplate("Default", true)
f:SetOutside(button)
button.backdrop = f
button:SetParent(ElvUI_MicroBar)
button:GetHighlightTexture():Kill()
button:HookScript("OnEnter", onEnter)
button:HookScript("OnLeave", onLeave)
button:SetHitRectInsets(0, 0, 0, 0)
button:Show()
pushed:SetTexCoord(0.17, 0.87, 0.5, 0.908)
pushed:SetInside(f)
normal:SetTexCoord(0.17, 0.87, 0.5, 0.908)
normal:SetInside(f)
if disabled then
disabled:SetTexCoord(0.17, 0.87, 0.5, 0.908)
disabled:SetInside(f)
end
end
function AB:UpdateMicroButtonsParent()
if CharacterMicroButton:GetParent() == ElvUI_MicroBar then return end
for i = 1, #MICRO_BUTTONS do
_G[MICRO_BUTTONS[i]]:SetParent(ElvUI_MicroBar)
end
AB:UpdateMicroPositionDimensions()
end
function AB:UpdateMicroBarVisibility()
if InCombatLockdown() then
AB.NeedsUpdateMicroBarVisibility = true
self:RegisterEvent("PLAYER_REGEN_ENABLED")
return
end
local visibility = self.db.microbar.visibility
if visibility and string.match(visibility, "[\n\r]") then
visibility = string.gsub(visibility, "[\n\r]", "")
end
RegisterStateDriver(ElvUI_MicroBar.visibility, "visibility", (self.db.microbar.enabled and visibility) or "hide")
end
function AB:UpdateMicroPositionDimensions()
if not ElvUI_MicroBar then return end
local numRows = 1
local prevButton = ElvUI_MicroBar
local offset = E:Scale(E.PixelMode and 1 or 3)
local spacing = E:Scale(offset + self.db.microbar.buttonSpacing)
for i = 1, #MICRO_BUTTONS do
local button = _G[MICRO_BUTTONS[i]]
local lastColumnButton = i - self.db.microbar.buttonsPerRow
lastColumnButton = _G[MICRO_BUTTONS[lastColumnButton]]
button:Size(self.db.microbar.buttonSize, self.db.microbar.buttonSize * 1.4)
button:ClearAllPoints()
if prevButton == ElvUI_MicroBar then
button:Point("TOPLEFT", prevButton, "TOPLEFT", offset, -offset)
elseif (i - 1) % self.db.microbar.buttonsPerRow == 0 then
button:Point("TOP", lastColumnButton, "BOTTOM", 0, -spacing)
numRows = numRows + 1
else
button:Point("LEFT", prevButton, "RIGHT", spacing, 0)
end
prevButton = button
end
if AB.db.microbar.mouseover and not ElvUI_MicroBar:IsMouseOver() then
ElvUI_MicroBar:SetAlpha(0)
else
ElvUI_MicroBar:SetAlpha(self.db.microbar.alpha)
end
AB.MicroWidth = (((CharacterMicroButton:GetWidth() + spacing) * self.db.microbar.buttonsPerRow) - spacing) + (offset * 2)
AB.MicroHeight = (((CharacterMicroButton:GetHeight() + spacing) * numRows) - spacing) + (offset * 2)
ElvUI_MicroBar:Size(AB.MicroWidth, AB.MicroHeight)
if ElvUI_MicroBar.mover then
if self.db.microbar.enabled then
E:EnableMover(ElvUI_MicroBar.mover:GetName())
else
E:DisableMover(ElvUI_MicroBar.mover:GetName())
end
end
self:UpdateMicroBarVisibility()
end
function AB:UpdateMicroButtons()
-- PvP Micro Button
PVPMicroButtonTexture:Point("TOPLEFT", PVPMicroButton, "TOPLEFT")
PVPMicroButtonTexture:Point("BOTTOMRIGHT", PVPMicroButton, "BOTTOMRIGHT")
PVPMicroButtonTexture:SetTexture("Interface\\AddOns\\ElvUI\\media\\textures\\PVP-Icons")
if E.mylevel < PVPMicroButton.minLevel then
PVPMicroButtonTexture:SetDesaturated(true)
else
PVPMicroButtonTexture:SetDesaturated(false)
end
self:UpdateMicroPositionDimensions()
end
function AB:SetupMicroBar()
local microBar = CreateFrame("Frame", "ElvUI_MicroBar", E.UIParent)
microBar:Point("TOPLEFT", E.UIParent, "TOPLEFT", 4, -4)
microBar:SetFrameStrata("LOW")
microBar:EnableMouse(true)
microBar:SetScript("OnEnter", onEnter)
microBar:SetScript("OnLeave", onLeave)
microBar.visibility = CreateFrame("Frame", nil, E.UIParent, "SecureHandlerStateTemplate")
microBar.visibility:SetScript("OnShow", function() microBar:Show() end)
microBar.visibility:SetScript("OnHide", function() microBar:Hide() end)
for i = 1, #MICRO_BUTTONS do
self:HandleMicroButton(_G[MICRO_BUTTONS[i]])
end
MicroButtonPortrait:SetInside(CharacterMicroButton.backdrop)
if E.myfaction == "Alliance" then
PVPMicroButtonTexture:SetTexCoord(0.545, 0.935, 0.070, 0.940)
else
PVPMicroButtonTexture:SetTexCoord(0.100, 0.475, 0.070, 0.940)
end
self:SecureHook("VehicleMenuBar_MoveMicroButtons", "UpdateMicroButtonsParent")
self:SecureHook("UpdateMicroButtons")
self:UpdateMicroPositionDimensions()
MainMenuBarPerformanceBar:Kill()
E:CreateMover(microBar, "MicrobarMover", L["Micro Bar"], nil, nil, nil, "ALL,ACTIONBARS", nil, "actionbar,microbar")
end