local WIT, core = ... local AceGUI = LibStub("AceGUI-3.0") function core.UI.ApplyContextMenuToFrame(frame, item) frame.ContextMenu = AceGUI:Create("WITDropDownMenu") frame.ContextMenu:SetAnchor(frame, 0, 0) frame.ContextMenu:SetMenuList(item.Children) frame:SetCallback("OnClick", function(self) frame.ContextMenu:Show() end) end local function CreateMenuItem(item) local frame = CreateFrame("Button", nil, UIParent) local width = item.IconWidth or 16 local height = item.IconHeight or item.IconWidth or 16 frame:SetWidth(width) frame:SetHeight(height) local image = frame:CreateTexture(nil, "BACKGROUND") image:SetTexture(item.Icon) image:SetAllPoints(frame) frame.ContextMenu = AceGUI:Create("WITDropDownMenu") frame.ContextMenu:SetAnchor(frame, 0, height / 2 + 5) frame.ContextMenu:SetMenuList(item.Children) frame:SetScript("OnClick", function(self) frame.ContextMenu:Show() end) local widget = { frame = frame, type = "ContextMenu" } widget.OnAcquire = function() end return AceGUI:RegisterAsWidget(widget) end local function CreateMenuItem2(item) local icon = AceGUI:Create("Icon") icon:SetImage(item.Icon) icon:SetImageSize(item.IconWidth or 16, item.IconHeight or item.IconWidth or 16) icon:SetWidth(item.IconWidth or 16) icon:SetHeight(item.IconHeight or item.IconWidth or 16) icon.ContextMenu = AceGUI:Create("WITDropDownMenu") icon.ContextMenu:SetAnchor(icon) icon.ContextMenu:SetMenuList(item.Children) icon:SetCallback("OnClick", function(self) icon.ContextMenu:Show() end) return icon end function core.UI.ContextMenu(menuItems, frame) if not frame then frame = AceGUI:Create("SimpleGroup") frame:SetLayout("Flow") frame:SetHeight(menuItems[1].IconHeight or menuItems[1].IconWidth or 16) end for _, item in pairs(menuItems) do frame:AddChild(CreateMenuItem(item)) end return frame end function core.UI.ContextMenuButton(item) return CreateMenuItem(item) end