Files
Andrew6810 60ef8a38af init
2022-10-21 07:09:01 -07:00

88 lines
2.3 KiB
Lua

local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
--Lua functions
local tinsert = tinsert
--WoW API / Variables
local CreateFrame = CreateFrame
local ToggleFrame = ToggleFrame
local GetCursorPosition = GetCursorPosition
local PADDING = 10
local BUTTON_HEIGHT = 16
local BUTTON_WIDTH = 135
local function OnClick(btn)
btn.func()
btn:GetParent():Hide()
end
local function OnEnter(btn)
btn.hoverTex:Show()
end
local function OnLeave(btn)
btn.hoverTex:Hide()
end
function E:DropDown(list, frame, xOffset, yOffset)
if not frame.buttons then
frame.buttons = {}
frame:SetFrameStrata("DIALOG")
frame:SetClampedToScreen(true)
tinsert(UISpecialFrames, frame:GetName())
frame:Hide()
end
xOffset = xOffset or 0
yOffset = yOffset or 0
for i = 1, #frame.buttons do
frame.buttons[i]:Hide()
end
for i = 1, #list do
if not frame.buttons[i] then
frame.buttons[i] = CreateFrame("Button", nil, frame)
frame.buttons[i].hoverTex = frame.buttons[i]:CreateTexture(nil, "OVERLAY")
frame.buttons[i].hoverTex:SetAllPoints()
frame.buttons[i].hoverTex:SetTexture([[Interface\QuestFrame\UI-QuestTitleHighlight]])
frame.buttons[i].hoverTex:SetBlendMode("ADD")
frame.buttons[i].hoverTex:Hide()
frame.buttons[i].text = frame.buttons[i]:CreateFontString(nil, "BORDER")
frame.buttons[i].text:SetAllPoints()
frame.buttons[i].text:FontTemplate()
frame.buttons[i].text:SetJustifyH("LEFT")
frame.buttons[i]:SetScript("OnEnter", OnEnter)
frame.buttons[i]:SetScript("OnLeave", OnLeave)
end
frame.buttons[i]:Show()
frame.buttons[i]:Height(BUTTON_HEIGHT)
frame.buttons[i]:Width(BUTTON_WIDTH)
frame.buttons[i].text:SetText(list[i].text)
frame.buttons[i].func = list[i].func
frame.buttons[i]:SetScript("OnClick", OnClick)
if i == 1 then
frame.buttons[i]:Point("TOPLEFT", frame, "TOPLEFT", PADDING, -PADDING)
else
frame.buttons[i]:Point("TOPLEFT", frame.buttons[i-1], "BOTTOMLEFT")
end
end
frame:Height((#list * BUTTON_HEIGHT) + PADDING * 2)
frame:Width(BUTTON_WIDTH + PADDING * 2)
local UIScale = UIParent:GetScale()
local x, y = GetCursorPosition()
x = x/UIScale
y = y/UIScale
frame:ClearAllPoints()
frame:Point("TOPLEFT", UIParent, "BOTTOMLEFT", x + xOffset, y + yOffset)
ToggleFrame(frame)
end