| 
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
 |