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
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
|
|
|