87 lines
2.3 KiB
Lua
87 lines
2.3 KiB
Lua
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
|
|
local _G = _G
|
|
local tinsert = tinsert
|
|
local ToggleFrame = ToggleFrame
|
|
local GetCursorPosition = GetCursorPosition
|
|
local CreateFrame = CreateFrame
|
|
|
|
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(_G.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(nil, nil, '')
|
|
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 = _G.UIParent:GetScale()
|
|
local x, y = GetCursorPosition()
|
|
x = x/UIScale
|
|
y = y/UIScale
|
|
frame:ClearAllPoints()
|
|
frame:Point('TOPLEFT', _G.UIParent, 'BOTTOMLEFT', x + xOffset, y + yOffset)
|
|
|
|
ToggleFrame(frame)
|
|
end
|