| contrebasse@0 | 1 local addonName, A = ... | 
| contrebasse@0 | 2 | 
| contrebasse@0 | 3 -- Create the menu frame | 
| contrebasse@0 | 4 local MenuFrame = CreateFrame("Frame",nil,UIParent) --, "ReagentMakerDropDownMenu"); -- Needs a global name | 
| contrebasse@0 | 5 MenuFrame:Hide() | 
| contrebasse@0 | 6 MenuFrame:SetBackdrop({ | 
| contrebasse@0 | 7 	bgFile = "Interface\\DialogFrame\\UI-DialogBox-Gold-Background",  -- path to the background texture | 
| contrebasse@0 | 8 	edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Gold-Border",    -- path to the border texture | 
| contrebasse@0 | 9 	tile = true,      -- true to repeat the background texture to fill the frame, false to scale it | 
| contrebasse@0 | 10 	tileSize = 32,    -- size (width or height) of the square repeating background tiles (in pixels) | 
| contrebasse@0 | 11 	edgeSize = 32,    -- thickness of edge segments and square size of edge corners (in pixels) | 
| contrebasse@0 | 12 	insets = {        -- distance from the edges of the frame to those of the background texture (in pixels) | 
| contrebasse@0 | 13 		left = 11, | 
| contrebasse@0 | 14 		right = 12, | 
| contrebasse@0 | 15 		top = 12, | 
| contrebasse@0 | 16 		bottom = 11 | 
| contrebasse@0 | 17 	} | 
| contrebasse@0 | 18 }) | 
| contrebasse@2 | 19 MenuFrame:SetWidth(170) | 
| contrebasse@2 | 20 MenuFrame:SetFrameStrata("DIALOG") | 
| contrebasse@2 | 21 | 
| contrebasse@2 | 22 local MENU_ENTRY_HEIGHT = 12 | 
| contrebasse@2 | 23 | 
| contrebasse@0 | 24 local numActiveEntries = 0 | 
| contrebasse@0 | 25 local menuEntries = {} | 
| contrebasse@2 | 26 local parentBtn -- The button it's associated with | 
| contrebasse@0 | 27 | 
| contrebasse@2 | 28 function A.menuIsOpen(btn) | 
| contrebasse@2 | 29 	if btn then | 
| contrebasse@2 | 30 		return MenuFrame:IsShown() and (btn==parentBtn) | 
| contrebasse@2 | 31 	else | 
| contrebasse@2 | 32 		return MenuFrame:IsShown() | 
| contrebasse@2 | 33 	end | 
| contrebasse@2 | 34 end | 
| contrebasse@1 | 35 function A.menuOpen(parent) | 
| contrebasse@1 | 36 	A.DEBUG("menuOpen") | 
| contrebasse@1 | 37 	--if not InCombatLockDown() and numActiveEntries>0 then | 
| contrebasse@2 | 38 		parentBtn = parent | 
| contrebasse@1 | 39 		MenuFrame:ClearAllPoints() | 
| contrebasse@2 | 40 		MenuFrame:SetPoint("LEFT",parent,"RIGHT",0,0) | 
| contrebasse@1 | 41 | 
| contrebasse@2 | 42 		MenuFrame:SetHeight(240) | 
| contrebasse@2 | 43 		--MenuFrame:SetParent(UIParent) | 
| contrebasse@1 | 44 | 
| contrebasse@0 | 45 		MenuFrame:Show() | 
| contrebasse@1 | 46 	--end | 
| contrebasse@0 | 47 end | 
| contrebasse@0 | 48 function A.menuClose() | 
| contrebasse@0 | 49 	MenuFrame:Hide() | 
| contrebasse@0 | 50 	MenuFrame:ClearAllPoints() | 
| contrebasse@0 | 51 | 
| contrebasse@2 | 52 	parentBtn = nil | 
| contrebasse@0 | 53 	for i=1,numActiveEntries do | 
| contrebasse@0 | 54 		menuEntries[i]:Hide() | 
| contrebasse@0 | 55 	end | 
| contrebasse@0 | 56 end | 
| contrebasse@0 | 57 | 
| contrebasse@0 | 58 function A.menuAddItem(text,action,itemID) | 
| contrebasse@1 | 59 	A.DEBUG("menuAddItem "..text) | 
| contrebasse@0 | 60 	local btn | 
| contrebasse@0 | 61 	-- Create a button only if necessary | 
| contrebasse@0 | 62 	if numActiveEntries >= #menuEntries then | 
| contrebasse@2 | 63 		btn = CreateFrame("Button", "ReagentMakerMenuButton"..(#menuEntries+1), MenuFrame) --, "SecureActionButtonTemplate") | 
| contrebasse@0 | 64 		table.insert(menuEntries,btn) | 
| contrebasse@0 | 65 | 
| contrebasse@2 | 66 		btn:SetHeight(MENU_ENTRY_HEIGHT) | 
| contrebasse@2 | 67 		btn:SetWidth(160) | 
| contrebasse@0 | 68 | 
| contrebasse@0 | 69 		-- Set its position | 
| contrebasse@2 | 70 		if #menuEntries==0 then | 
| contrebasse@0 | 71 			btn:SetPoint("TOPLEFT",MenuFrame,"TOPLEFT",0,0) | 
| contrebasse@0 | 72 		else | 
| contrebasse@0 | 73 			btn:SetPoint("TOPLEFT",menuEntries[#menuEntries-1],"BOTTOMLEFT",0,0) | 
| contrebasse@0 | 74 		end | 
| contrebasse@0 | 75 	else | 
| contrebasse@0 | 76 		btn = menuEntries[numActiveEntries+1] | 
| contrebasse@0 | 77 	end | 
| contrebasse@0 | 78 | 
| contrebasse@0 | 79 	-- Set its text | 
| contrebasse@2 | 80 	btn:SetText(text or "???") | 
| contrebasse@0 | 81 | 
| contrebasse@0 | 82 	-- Set its action | 
| contrebasse@0 | 83 	if type(action)=="function" then | 
| contrebasse@0 | 84 		btn:SetScript("OnClick",action) | 
| contrebasse@0 | 85 		btn:SetAttribute("type", nil) | 
| contrebasse@0 | 86 		btn:SetAttribute("spell", nil) | 
| contrebasse@1 | 87 		btn:SetAttribute("target-item",itemID) | 
| contrebasse@0 | 88 	elseif type(action)=="string" then | 
| contrebasse@0 | 89 		btn:SetScript("OnClick",nil) | 
| contrebasse@0 | 90 		btn:SetAttribute("type", "spell") | 
| contrebasse@0 | 91 		btn:SetAttribute("spell", action) | 
| contrebasse@0 | 92 		btn:SetAttribute("target-item",GetItemInfo(itemID)) | 
| contrebasse@0 | 93 	end -- if | 
| contrebasse@0 | 94 | 
| contrebasse@0 | 95 	-- Reposition MenuFrame | 
| contrebasse@1 | 96 	--MenuFrame:SetPoint("BOTTOMRIGHT",btn,"BOTTOMRIGHT",0,0) | 
| contrebasse@2 | 97 	MenuFrame:SetHeight((numActiveEntries+1)*MENU_ENTRY_HEIGHT) | 
| contrebasse@0 | 98 | 
| contrebasse@2 | 99 	-- Increase the entry number | 
| contrebasse@0 | 100 	numActiveEntries = numActiveEntries + 1 | 
| contrebasse@2 | 101 	A.DEBUG("Item added ") | 
| contrebasse@0 | 102 end -- function |