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.

104 lines
3.2 KiB

local Type, Version = "WITDropDownMenu", 24
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
-- Lua APIs
local pairs, assert, type = pairs, assert, type
local min, max, floor, abs = math.min, math.max, math.floor, math.abs
-- WoW APIs
local CreateFrame, UIParent = CreateFrame, UIParent
--[[-----------------------------------------------------------------------------
Scripts
-------------------------------------------------------------------------------]]
local function DropDownMenu_OnLoad(dropDown, level, menuList)
if menuList then
for key, item in pairs(menuList) do
if not item.IsVisible or item.IsVisible(item.ActionArg) then
local hasChildren = item.Children ~= nil and #(item.Children) > 0
local info = UIDropDownMenu_CreateInfo()
info.hasArrow = hasChildren
info.notCheckable = true
info.disabled = item.IsEnabled and (not item.IsEnabled(item.ActionArg))
info.text = item.DisplayName or item.Name
info.menuList = item.Children
info.func = function (self, arg1)
if item.Action then
item.Action(arg1)
end
--UIDROPDOWNMENU_OPEN_MENU
for key, _ in pairs(dropDown.obj.frame) do
--print(key)
end
if level and level > 1 then
dropDown.obj:Show()
end
end
info.arg1 = item.ActionArg
UIDropDownMenu_AddButton(info, level)
end
end
end
end
local function Init(frame)
UIDropDownMenu_Initialize(frame, DropDownMenu_OnLoad)
end
--[[-----------------------------------------------------------------------------
Methods
-------------------------------------------------------------------------------]]
local methods = {
["OnAcquire"] = function(self)
self.frame:Hide()
self.anchor = nil
end,
["Show"] = function(self)
if not self.Initialized then
UIDropDownMenu_Initialize(self.frame, DropDownMenu_OnLoad)
end
ToggleDropDownMenu(1, nil, self.frame, self.anchor.frame or self.anchor, self.offsetX, self.offsetY, self.menuList)
self.Initialized = true
end,
["SetAnchor"] = function(self, anchorFrame, offsetX, offsetY)
self.anchor = anchorFrame
self.offsetX = offsetX or self.offsetX or 0
self.offsetY = offsetY or self.offsetY or 0
end,
["SetMenuList"] = function(self, menuList)
self.menuList = menuList
end
}
--[[-----------------------------------------------------------------------------
Constructor
-------------------------------------------------------------------------------]]
local function Constructor()
local frame = CreateFrame("Frame", nil, UIParent, "UIDropDownMenuTemplate")
--local num = AceGUI:GetNextWidgetNum(Type)
local widget = {
frame = frame,
type = Type
}
for method, func in pairs(methods) do
widget[method] = func
end
frame.obj = widget
return AceGUI:RegisterAsWidget(widget)
end
AceGUI:RegisterWidgetType(Type, Constructor, Version)