diff --git a/2/3/4/5/6/7/ElvUI/Core/dropdown.lua b/2/3/4/5/6/7/ElvUI/Core/dropdown.lua index e69de29..062b1ad 100644 --- a/2/3/4/5/6/7/ElvUI/Core/dropdown.lua +++ b/2/3/4/5/6/7/ElvUI/Core/dropdown.lua @@ -0,0 +1,89 @@ +local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB + +--Cache global variables +--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, getn(frame.buttons) do + frame.buttons[i]:Hide() + end + + for i = 1, getn(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]:SetHeight(BUTTON_HEIGHT) + frame.buttons[i]:SetWidth(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]:SetPoint("TOPLEFT", frame, "TOPLEFT", PADDING, -PADDING) + else + frame.buttons[i]:SetPoint("TOPLEFT", frame.buttons[i-1], "BOTTOMLEFT") + end + end + + frame:SetHeight((getn(list) * BUTTON_HEIGHT) + PADDING * 2) + frame:SetWidth(BUTTON_WIDTH + PADDING * 2) + + local UIScale = UIParent:GetScale() + local x, y = GetCursorPosition() + x = x/UIScale + y = y/UIScale + frame:ClearAllPoints() + frame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", x + xOffset, y + yOffset) + + ToggleFrame(frame) +end \ No newline at end of file