mirror of
https://github.com/Bluewhale1337/ElvUIModernized.git
synced 2026-07-27 16:34:45 +00:00
494 lines
14 KiB
Lua
494 lines
14 KiB
Lua
local E, L, V, P, G = unpack(ElvUI); -- Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
|
|
--Cache global variables
|
|
--Lua functions
|
|
local _G = _G
|
|
local type, ipairs, tonumber = type, ipairs, tonumber
|
|
local floor = math.floor
|
|
--WoW API / Variables
|
|
local CreateFrame = CreateFrame
|
|
local IsAddOnLoaded = IsAddOnLoaded
|
|
local GetScreenWidth = GetScreenWidth
|
|
local GetScreenHeight = GetScreenHeight
|
|
local RESET = RESET
|
|
|
|
local grid
|
|
local selectedValue = "ALL"
|
|
|
|
E.ConfigModeLayouts = {
|
|
"ALL",
|
|
"GENERAL",
|
|
"SOLO",
|
|
"PARTY",
|
|
"RAID",
|
|
"ACTIONBARS"
|
|
}
|
|
|
|
E.ConfigModeLocalizedStrings = {
|
|
ALL = ALL,
|
|
GENERAL = GENERAL,
|
|
SOLO = SOLO,
|
|
PARTY = PARTY,
|
|
RAID = RAID,
|
|
ACTIONBARS = ACTIONBAR_LABEL
|
|
}
|
|
|
|
function E:Grid_Show()
|
|
if not grid then
|
|
E:Grid_Create()
|
|
elseif grid.boxSize ~= E.db.gridSize then
|
|
grid:Hide()
|
|
E:Grid_Create()
|
|
else
|
|
grid:Show()
|
|
end
|
|
end
|
|
|
|
function E:Grid_Hide()
|
|
if grid then
|
|
grid:Hide()
|
|
end
|
|
end
|
|
|
|
function E:ToggleConfigMode(override, configType)
|
|
if override ~= nil and override ~= "" then E.ConfigurationMode = override end
|
|
|
|
if E.ConfigurationMode ~= true then
|
|
if not grid then
|
|
E:Grid_Create()
|
|
elseif grid.boxSize ~= E.db.gridSize then
|
|
grid:Hide()
|
|
E:Grid_Create()
|
|
else
|
|
grid:Show()
|
|
end
|
|
|
|
if not ElvUIMoverPopupWindow then
|
|
E:CreateMoverPopup()
|
|
end
|
|
|
|
ElvUIMoverPopupWindow:Show()
|
|
if IsAddOnLoaded("ElvUI_Config") then
|
|
LibStub("AceConfigDialog-3.0"):Close("ElvUI")
|
|
GameTooltip:Hide()
|
|
end
|
|
|
|
E.ConfigurationMode = true
|
|
else
|
|
if ElvUIMoverPopupWindow then
|
|
ElvUIMoverPopupWindow:Hide()
|
|
end
|
|
|
|
if grid then
|
|
grid:Hide()
|
|
end
|
|
|
|
E.ConfigurationMode = false
|
|
end
|
|
|
|
if type(configType) ~= "string" then
|
|
configType = nil
|
|
end
|
|
|
|
self:ToggleMovers(E.ConfigurationMode, configType or "ALL")
|
|
end
|
|
|
|
function E:Grid_Create()
|
|
grid = CreateFrame("Frame", "EGrid", UIParent)
|
|
grid.boxSize = E.db.gridSize
|
|
grid:SetAllPoints(E.UIParent)
|
|
grid:Show()
|
|
|
|
local size = 1
|
|
local width = E.eyefinity or GetScreenWidth()
|
|
local ratio = width / GetScreenHeight()
|
|
local height = GetScreenHeight() * ratio
|
|
|
|
local wStep = width / E.db.gridSize
|
|
local hStep = height / E.db.gridSize
|
|
|
|
for i = 0, E.db.gridSize do
|
|
local tx = grid:CreateTexture(nil, "BACKGROUND")
|
|
if i == E.db.gridSize / 2 then
|
|
tx:SetTexture(1, 0, 0)
|
|
else
|
|
tx:SetTexture(0, 0, 0)
|
|
end
|
|
E:Point(tx, "TOPLEFT", grid, "TOPLEFT", i*wStep - (size/2), 0)
|
|
E:Point(tx, "BOTTOMRIGHT", grid, "BOTTOMLEFT", i*wStep + (size/2), 0)
|
|
end
|
|
height = GetScreenHeight()
|
|
|
|
do
|
|
local tx = grid:CreateTexture(nil, "BACKGROUND")
|
|
tx:SetTexture(1, 0, 0)
|
|
E:Point(tx, "TOPLEFT", grid, "TOPLEFT", 0, -(height/2) + (size/2))
|
|
E:Point(tx, "BOTTOMRIGHT", grid, "TOPRIGHT", 0, -(height/2 + size/2))
|
|
end
|
|
|
|
for i = 1, floor((height/2)/hStep) do
|
|
local tx = grid:CreateTexture(nil, "BACKGROUND")
|
|
tx:SetTexture(0, 0, 0)
|
|
|
|
E:Point(tx, "TOPLEFT", grid, "TOPLEFT", 0, -(height/2+i*hStep) + (size/2))
|
|
E:Point(tx, "BOTTOMRIGHT", grid, "TOPRIGHT", 0, -(height/2+i*hStep + size/2))
|
|
|
|
tx = grid:CreateTexture(nil, "BACKGROUND")
|
|
tx:SetTexture(0, 0, 0)
|
|
|
|
E:Point(tx, "TOPLEFT", grid, "TOPLEFT", 0, -(height/2-i*hStep) + (size/2))
|
|
E:Point(tx, "BOTTOMRIGHT", grid, "TOPRIGHT", 0, -(height/2-i*hStep + size/2))
|
|
end
|
|
end
|
|
|
|
local function ConfigMode_OnClick()
|
|
selectedValue = this.value
|
|
E:ToggleConfigMode(false, this.value)
|
|
UIDropDownMenu_SetSelectedValue(ElvUIMoverPopupWindowDropDown, this.value)
|
|
end
|
|
|
|
local function ConfigMode_Initialize()
|
|
local info = {}
|
|
info.func = ConfigMode_OnClick
|
|
|
|
for _, configMode in ipairs(E.ConfigModeLayouts) do
|
|
info.text = E.ConfigModeLocalizedStrings[configMode]
|
|
info.value = configMode
|
|
UIDropDownMenu_AddButton(info)
|
|
end
|
|
|
|
UIDropDownMenu_SetSelectedValue(ElvUIMoverPopupWindowDropDown, selectedValue)
|
|
end
|
|
|
|
function E:NudgeMover(nudgeX, nudgeY)
|
|
local mover = ElvUIMoverNudgeWindow.child
|
|
local x, y, point = E:CalculateMoverPoints(mover, nudgeX, nudgeY)
|
|
|
|
mover:ClearAllPoints()
|
|
E:Point(mover, mover.positionOverride or point, E.UIParent, mover.positionOverride and "BOTTOMLEFT" or point, x, y)
|
|
E:SaveMoverPosition(mover.name)
|
|
|
|
--Update coordinates in Nudge Window
|
|
E:UpdateNudgeFrame(mover, x, y)
|
|
end
|
|
|
|
function E:UpdateNudgeFrame(mover, x, y)
|
|
if not (x and y) then
|
|
x, y = E:CalculateMoverPoints(mover)
|
|
end
|
|
|
|
x = E:Round(x, 0)
|
|
y = E:Round(y, 0)
|
|
|
|
ElvUIMoverNudgeWindow.xOffset:SetText(x)
|
|
ElvUIMoverNudgeWindow.yOffset:SetText(y)
|
|
ElvUIMoverNudgeWindow.xOffset.currentValue = x
|
|
ElvUIMoverNudgeWindow.yOffset.currentValue = y
|
|
ElvUIMoverNudgeWindowHeader.title:SetText(mover.textString)
|
|
end
|
|
|
|
function E:AssignFrameToNudge()
|
|
ElvUIMoverNudgeWindow.child = self
|
|
E:UpdateNudgeFrame(self)
|
|
end
|
|
|
|
function E:CreateMoverPopup()
|
|
local f = CreateFrame("Frame", "ElvUIMoverPopupWindow", UIParent)
|
|
f:SetFrameStrata("DIALOG")
|
|
f:SetToplevel(true)
|
|
f:EnableMouse(true)
|
|
f:SetMovable(true)
|
|
f:SetFrameLevel(99)
|
|
f:SetClampedToScreen(true)
|
|
E:Width(f, 360)
|
|
E:Height(f, 185)
|
|
E:SetTemplate(f, "Transparent")
|
|
E:Point(f, "BOTTOM", UIParent, "CENTER", 0, 100)
|
|
f:SetScript("OnHide", function()
|
|
if ElvUIMoverPopupWindowDropDown then
|
|
UIDropDownMenu_SetSelectedValue(ElvUIMoverPopupWindowDropDown, "ALL")
|
|
end
|
|
end)
|
|
f:Hide()
|
|
|
|
local S = E:GetModule("Skins")
|
|
|
|
local header = CreateFrame("Button", nil, f)
|
|
E:SetTemplate(header, "Default", true)
|
|
E:Width(header, 100)
|
|
E:Height(header, 25)
|
|
E:Point(header, "CENTER", f, "TOP")
|
|
header:SetFrameLevel(header:GetFrameLevel() + 2)
|
|
header:EnableMouse(true)
|
|
header:RegisterForClicks("AnyUp", "AnyDown")
|
|
header:SetScript("OnMouseDown", function() f:StartMoving() end)
|
|
header:SetScript("OnMouseUp", function() f:StopMovingOrSizing() end)
|
|
|
|
local title = header:CreateFontString("OVERLAY")
|
|
E:FontTemplate(title)
|
|
E:Point(title, "CENTER", header, "CENTER")
|
|
title:SetText("ElvUI")
|
|
|
|
local desc = f:CreateFontString("ARTWORK")
|
|
desc:SetFontObject("GameFontHighlight")
|
|
desc:SetJustifyV("TOP")
|
|
desc:SetJustifyH("LEFT")
|
|
E:Point(desc, "TOPLEFT", 18, -32)
|
|
E:Point(desc, "BOTTOMRIGHT", -18, 48)
|
|
desc:SetText(L["DESC_MOVERCONFIG"])
|
|
|
|
local snapping = CreateFrame("CheckButton", f:GetName().."CheckButton", f, "OptionsCheckButtonTemplate")
|
|
_G[snapping:GetName().."Text"]:SetText(L["Sticky Frames"])
|
|
|
|
snapping:SetScript("OnShow", function()
|
|
this:SetChecked(E.db.general.stickyFrames)
|
|
end)
|
|
|
|
snapping:SetScript("OnClick", function()
|
|
E.db.general.stickyFrames = this:GetChecked()
|
|
end)
|
|
|
|
local lock = CreateFrame("Button", f:GetName().."CloseButton", f, "OptionsButtonTemplate")
|
|
_G[lock:GetName().."Text"]:SetText(L["Lock"])
|
|
|
|
lock:SetScript("OnClick", function()
|
|
E:ToggleConfigMode(true)
|
|
|
|
if IsAddOnLoaded("ElvUI_Config") then
|
|
LibStub("AceConfigDialog-3.0"):Open("ElvUI")
|
|
end
|
|
|
|
selectedValue = "ALL"
|
|
UIDropDownMenu_SetSelectedValue(ElvUIMoverPopupWindowDropDown, selectedValue)
|
|
end)
|
|
|
|
local align = CreateFrame("EditBox", f:GetName().."EditBox", f, "InputBoxTemplate")
|
|
E:Width(align, 24)
|
|
E:Height(align, 17)
|
|
align:SetAutoFocus(false)
|
|
align:SetScript("OnEscapePressed", function()
|
|
this:SetText(E.db.gridSize)
|
|
this:ClearFocus()
|
|
end)
|
|
align:SetScript("OnEnterPressed", function()
|
|
local text = this:GetText()
|
|
if tonumber(text) then
|
|
if tonumber(text) <= 256 and tonumber(text) >= 4 then
|
|
E.db.gridSize = tonumber(text)
|
|
else
|
|
this:SetText(E.db.gridSize)
|
|
end
|
|
else
|
|
this:SetText(E.db.gridSize)
|
|
end
|
|
E:Grid_Show()
|
|
this:ClearFocus()
|
|
end)
|
|
align:SetScript("OnEditFocusLost", function()
|
|
this:SetText(E.db.gridSize)
|
|
end)
|
|
align:SetScript("OnEditFocusGained", align.HighlightText)
|
|
align:SetScript("OnShow", function()
|
|
this:ClearFocus()
|
|
this:SetText(E.db.gridSize)
|
|
end)
|
|
|
|
align.text = align:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
E:Point(align.text, "RIGHT", align, "LEFT", -4, 0)
|
|
align.text:SetText(L["Grid Size:"])
|
|
|
|
--position buttons
|
|
E:Point(snapping, "BOTTOMLEFT", 14, 10)
|
|
E:Point(lock, "BOTTOMRIGHT", -14, 14)
|
|
E:Point(align, "TOPRIGHT", lock, "TOPLEFT", -4, -2)
|
|
|
|
S:HandleCheckBox(snapping)
|
|
S:HandleButton(lock)
|
|
S:HandleEditBox(align)
|
|
|
|
f:RegisterEvent("PLAYER_REGEN_DISABLED")
|
|
f:SetScript("OnEvent", function()
|
|
if this:IsShown() then
|
|
this:Hide()
|
|
E:Grid_Hide()
|
|
E:ToggleConfigMode(true)
|
|
end
|
|
end)
|
|
|
|
local configMode = CreateFrame("Frame", f:GetName().."DropDown", f, "UIDropDownMenuTemplate")
|
|
E:Point(configMode, "BOTTOMRIGHT", lock, "TOPRIGHT", 8, -5)
|
|
S:HandleDropDownBox(configMode, 148)
|
|
configMode.text = configMode:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
E:Point(configMode.text, "RIGHT", configMode.backdrop, "LEFT", -2, 0)
|
|
configMode.text:SetText(L["Config Mode:"])
|
|
|
|
UIDropDownMenu_Initialize(configMode, ConfigMode_Initialize)
|
|
|
|
local nudgeFrame = CreateFrame("Frame", "ElvUIMoverNudgeWindow", E.UIParent)
|
|
nudgeFrame:SetFrameStrata("DIALOG")
|
|
E:Width(nudgeFrame, 200)
|
|
E:Height(nudgeFrame, 110)
|
|
E:SetTemplate(nudgeFrame, "Transparent")
|
|
E:Point(nudgeFrame, "TOP", ElvUIMoverPopupWindow, "BOTTOM", 0, -15)
|
|
nudgeFrame:SetFrameLevel(100)
|
|
nudgeFrame:Hide()
|
|
nudgeFrame:EnableMouse(true)
|
|
nudgeFrame:SetClampedToScreen(true)
|
|
HookScript(ElvUIMoverPopupWindow, "OnHide", function() ElvUIMoverNudgeWindow:Hide() end)
|
|
|
|
header = CreateFrame("Button", "ElvUIMoverNudgeWindowHeader", nudgeFrame)
|
|
E:SetTemplate(header, "Default", true)
|
|
E:Width(header, 100)
|
|
E:Height(header, 25)
|
|
E:Point(header, "CENTER", nudgeFrame, "TOP")
|
|
header:SetFrameLevel(header:GetFrameLevel() + 2)
|
|
|
|
title = header:CreateFontString("OVERLAY")
|
|
E:FontTemplate(title)
|
|
E:Point(title, "CENTER", header, "CENTER")
|
|
title:SetText(L["Nudge"])
|
|
header.title = title
|
|
|
|
local xOffset = CreateFrame("EditBox", nudgeFrame:GetName().."XEditBox", nudgeFrame, "InputBoxTemplate")
|
|
E:Width(xOffset, 50)
|
|
E:Height(xOffset, 17)
|
|
xOffset:SetAutoFocus(false)
|
|
xOffset.currentValue = 0
|
|
xOffset:SetScript("OnEscapePressed", function()
|
|
this:SetText(E:Round(xOffset.currentValue))
|
|
this:ClearFocus()
|
|
end)
|
|
xOffset:SetScript("OnEnterPressed", function()
|
|
local num = this:GetText()
|
|
if tonumber(num) then
|
|
local diff = num - xOffset.currentValue
|
|
xOffset.currentValue = num
|
|
E:NudgeMover(diff)
|
|
end
|
|
this:SetText(E:Round(xOffset.currentValue))
|
|
this:ClearFocus()
|
|
end)
|
|
xOffset:SetScript("OnEditFocusLost", function()
|
|
this:SetText(E:Round(xOffset.currentValue))
|
|
end)
|
|
xOffset:SetScript("OnEditFocusGained", xOffset.HighlightText)
|
|
xOffset:SetScript("OnShow", function()
|
|
this:ClearFocus()
|
|
this:SetText(E:Round(xOffset.currentValue))
|
|
end)
|
|
|
|
xOffset.text = xOffset:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
E:Point(xOffset.text, "RIGHT", xOffset, "LEFT", -4, 0)
|
|
xOffset.text:SetText("X:")
|
|
E:Point(xOffset, "BOTTOMRIGHT", nudgeFrame, "CENTER", -6, 8)
|
|
nudgeFrame.xOffset = xOffset
|
|
S:HandleEditBox(xOffset)
|
|
|
|
local yOffset = CreateFrame("EditBox", nudgeFrame:GetName().."YEditBox", nudgeFrame, "InputBoxTemplate")
|
|
E:Width(yOffset, 50)
|
|
E:Height(yOffset, 17)
|
|
yOffset:SetAutoFocus(false)
|
|
yOffset.currentValue = 0
|
|
yOffset:SetScript("OnEscapePressed", function()
|
|
this:SetText(E:Round(yOffset.currentValue))
|
|
this:ClearFocus()
|
|
end)
|
|
yOffset:SetScript("OnEnterPressed", function()
|
|
local num = this:GetText()
|
|
if tonumber(num) then
|
|
local diff = num - yOffset.currentValue
|
|
yOffset.currentValue = num
|
|
E:NudgeMover(nil, diff)
|
|
end
|
|
this:SetText(E:Round(yOffset.currentValue))
|
|
this:ClearFocus()
|
|
end)
|
|
yOffset:SetScript("OnEditFocusLost", function()
|
|
this:SetText(E:Round(yOffset.currentValue))
|
|
end)
|
|
yOffset:SetScript("OnEditFocusGained", yOffset.HighlightText)
|
|
yOffset:SetScript("OnShow", function()
|
|
this:ClearFocus()
|
|
this:SetText(E:Round(yOffset.currentValue))
|
|
end)
|
|
|
|
yOffset.text = yOffset:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
E:Point(yOffset.text, "RIGHT", yOffset, "LEFT", -4, 0)
|
|
yOffset.text:SetText("Y:")
|
|
E:Point(yOffset, "BOTTOMLEFT", nudgeFrame, "CENTER", 16, 8)
|
|
nudgeFrame.yOffset = yOffset
|
|
S:HandleEditBox(yOffset)
|
|
|
|
local resetButton = CreateFrame("Button", nudgeFrame:GetName().."ResetButton", nudgeFrame, "UIPanelButtonTemplate")
|
|
resetButton:SetText(RESET)
|
|
E:Point(resetButton, "TOP", nudgeFrame, "CENTER", 0, 2)
|
|
E:Size(resetButton, 100, 25)
|
|
resetButton:SetScript("OnClick", function()
|
|
if(ElvUIMoverNudgeWindow.child.textString) then
|
|
E:ResetMovers(ElvUIMoverNudgeWindow.child.textString)
|
|
E:UpdateNudgeFrame(ElvUIMoverNudgeWindow.child)
|
|
end
|
|
end)
|
|
S:HandleButton(resetButton)
|
|
-- Up Button
|
|
local upButton = CreateFrame("Button", nudgeFrame:GetName().."PrevButton", nudgeFrame)
|
|
E:Size(upButton, 26)
|
|
E:Point(upButton, "BOTTOMRIGHT", nudgeFrame, "BOTTOM", -6, 4)
|
|
upButton:SetScript("OnClick", function()
|
|
E:NudgeMover(nil, 1)
|
|
end)
|
|
upButton.icon = upButton:CreateTexture(nil, "ARTWORK")
|
|
E:Size(upButton.icon, 13)
|
|
E:Point(upButton.icon, "CENTER", 0)
|
|
upButton.icon:SetTexture([[Interface\AddOns\ElvUI\Media\Textures\SquareButtonTextures.blp]])
|
|
upButton.icon:SetTexCoord(0.01562500, 0.20312500, 0.01562500, 0.20312500)
|
|
|
|
S:SquareButton_SetIcon(upButton, "UP")
|
|
S:HandleButton(upButton)
|
|
-- Down Button
|
|
local downButton = CreateFrame("Button", nudgeFrame:GetName().."DownButton", nudgeFrame)
|
|
E:Size(downButton, 26)
|
|
E:Point(downButton, "BOTTOMLEFT", nudgeFrame, "BOTTOM", 6, 4)
|
|
downButton:SetScript("OnClick", function()
|
|
E:NudgeMover(nil, -1)
|
|
end)
|
|
downButton.icon = downButton:CreateTexture(nil, "ARTWORK")
|
|
E:Size(downButton.icon, 13)
|
|
E:Point(downButton.icon, "CENTER", 0)
|
|
downButton.icon:SetTexture([[Interface\AddOns\ElvUI\Media\Textures\SquareButtonTextures.blp]])
|
|
downButton.icon:SetTexCoord(0.01562500, 0.20312500, 0.01562500, 0.20312500)
|
|
|
|
S:SquareButton_SetIcon(downButton, "DOWN")
|
|
S:HandleButton(downButton)
|
|
-- Left Button
|
|
local leftButton = CreateFrame("Button", nudgeFrame:GetName().."LeftButton", nudgeFrame)
|
|
E:Size(leftButton, 26)
|
|
E:Point(leftButton, "RIGHT", upButton, "LEFT", -6, 0)
|
|
leftButton:SetScript("OnClick", function()
|
|
E:NudgeMover(-1)
|
|
end)
|
|
leftButton.icon = leftButton:CreateTexture(nil, "ARTWORK")
|
|
E:Size(leftButton.icon, 13)
|
|
E:Point(leftButton.icon, "CENTER", 0)
|
|
leftButton.icon:SetTexture([[Interface\AddOns\ElvUI\Media\Textures\SquareButtonTextures.blp]])
|
|
leftButton.icon:SetTexCoord(0.01562500, 0.20312500, 0.01562500, 0.20312500)
|
|
|
|
S:SquareButton_SetIcon(leftButton, "LEFT")
|
|
S:HandleButton(leftButton)
|
|
-- Right Button
|
|
local rightButton = CreateFrame("Button", nudgeFrame:GetName().."RightButton", nudgeFrame)
|
|
E:Size(rightButton, 26)
|
|
E:Point(rightButton, "LEFT", downButton, "RIGHT", 6, 0)
|
|
rightButton:SetScript("OnClick", function()
|
|
E:NudgeMover(1)
|
|
end)
|
|
rightButton.icon = rightButton:CreateTexture(nil, "ARTWORK")
|
|
E:Size(rightButton.icon, 13)
|
|
E:Point(rightButton.icon, "CENTER", 0)
|
|
rightButton.icon:SetTexture([[Interface\AddOns\ElvUI\Media\Textures\SquareButtonTextures.blp]])
|
|
rightButton.icon:SetTexCoord(0.01562500, 0.20312500, 0.01562500, 0.20312500)
|
|
|
|
S:SquareButton_SetIcon(rightButton, "RIGHT")
|
|
S:HandleButton(rightButton)
|
|
end
|