annotate SecureMenu.lua @ 2:04c5b817eead

The try to build my own secure menu continues...
author contrebasse
date Tue, 29 Mar 2011 22:06:36 +0200
parents 5fc29ed07094
children ed0582126cae
rev   line source
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