You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
2.2 KiB

local E, L, V, P, G = unpack(ElvUI)
local _G = _G
local next = next
local tinsert = tinsert
local CreateFrame = CreateFrame
local GetCursorPosition = GetCursorPosition
local ToggleFrame = ToggleFrame
local UIParent = UIParent
local function OnClick(btn)
if btn.func then
btn.func()
end
btn:GetParent():Hide()
end
local function OnEnter(btn)
if btn.hoverTex then
btn.hoverTex:Show()
end
end
local function OnLeave(btn)
if btn.hoverTex then
btn.hoverTex:Hide()
end
end
local function CreateButton(frame, i)
local button = CreateFrame('Button', nil, frame)
button:SetScript('OnEnter', OnEnter)
button:SetScript('OnLeave', OnLeave)
frame.buttons[i] = button
local hover = button:CreateTexture(nil, 'OVERLAY')
hover:SetAllPoints()
hover:SetTexture(136810) -- Interface\QuestFrame\UI-QuestTitleHighlight
hover:SetBlendMode('ADD')
hover:Hide()
button.hoverTex = hover
local text = button:CreateFontString(nil, 'BORDER')
text:SetAllPoints()
text:FontTemplate(nil, nil, 'SHADOW')
text:SetJustifyH('LEFT')
button.text = text
return button
end
function E:DropDown(list, frame, width, height, padding, xOffset, yOffset)
if not width then width = 135 end
if not height then height = 16 end
if not padding then padding = 10 end
if not frame.buttons then
frame.buttons = {}
frame:SetFrameStrata('DIALOG')
frame:SetClampedToScreen(true)
frame:Hide()
tinsert(_G.UISpecialFrames, frame:GetName())
end
for _, button in next, frame.buttons do
button:Hide()
end
local numEntries = #list
for i = 1, numEntries do
local entry = list[i]
local button = frame.buttons[i] or CreateButton(frame, i)
button.text:SetText(entry.text)
button.func = entry.func
button:Show()
button:ClearAllPoints()
button:SetScript('OnClick', OnClick)
button:Size(width, height)
if i == 1 then
button:Point('TOPLEFT', frame, 'TOPLEFT', padding, -padding)
else
button:Point('TOPLEFT', frame.buttons[i-1], 'BOTTOMLEFT')
end
end
local x, y = GetCursorPosition()
local SPACING = padding * 2
frame:ClearAllPoints()
frame:Point('TOPLEFT', UIParent, 'BOTTOMLEFT', (x / E.uiscale) + (xOffset or 0), (y / E.uiscale) + (yOffset or 0))
frame:Size(width + SPACING, (numEntries * height) + SPACING)
ToggleFrame(frame)
end