Creating simple pop - up dialog boxes Static popups are simple one - , two - , or three - button dialog boxes you see when confirming a warlock summon , sending money through the mail , renaming a pet , and so forth . This tutorial describes how you can use the StaticPopup code to display simple dialogs in your own addon . As you might expect , all of the basic UI elements ( positioning , sound effects , layout ) are handled for you . Basic setup . In the " Hello , World " programming tradition , the example on this page will assume that you have a function , called GreetTheWorld , and that you are creating a simple dialog to ask the player whether or not to be socially outgoing . New dialogs are created by adding an entry to the global StaticPopupDialogs table , and populating the entry with required and optional information . Here is a simple two - button entry : The index into the array is an arbitrary string . It must be unique in the context of the array . ( If you are familiar with the array , this works exactly the same . ) Here you see the basic required information , along with some settings that are strictly optional but should be given by all well - behaved entries : If your addon has a general OnLoad event handler , that is an excellent place to perform this array insertion . If the contents of the entry do not require any runtime information , you can perform the insertion during loadup by putting it at file scope . Note that this guide refers to setting boolean options to ' true ' or ' false ' ; earlier editions used ' 1 ' and ' nil ' for the same purposes . The fact of the matter is that you can set those options to anything which evaluates to true - valued or false - valued results according to Lua : ' nil ' and ' false ' are false - valued , anything else ( including 0 and " " ) is true - valued . A lot of original Blizzard code was written for an earlier version of Lua , which did not have formal boolean types . Use whatever makes the most sense for your addon . Displaying the popup . To display the dialog , call StaticPopup _ Show with the name of the entry : The dialog will be put together and displayed , and the function returns as soon as the dialog is shown . If all goes well , the table object for that dialog will be returned from the function . If there are any problems , it returns nil . This function has two more optional arguments , see Dialog Text Parameters below . Up to 4 static popups may be displayed at once . The UI will handle finding an open popup slot for you . Hiding the popup . To make the dialog disappear without having a user click it , call StaticPopup _ Hide with the name of the entry : Calling the StaticPopup _ Hide function after the dialog has already been hidden does not appear to have any ill effect . There are no return values from this function . Advanced setup . Dialog text parameters . The " text " field of an entry can contain formatting placeholders . When the popup is actually displayed , the calling function can pass two additional arguments to StaticPopup _ Show . The " text " field and these two arguments will be passed through the format function before being added to the dialog . For example , the default guild invitation popup sets text = " % s invites you to join % s " , and the display call is to StaticPopup _ Show ( " GUILD _ INVITE " , name _ of _ officer , name _ of _ guild ) . Editable text fields . To add a editbox in the popup set the " hasEditBox " option field to true . The EditBox gets the name " $ parentEditBox " , relative to the Popup , and is also available in the popup ' s " . editBox " field . ( Recall that the popup dialog is the value returned from the " StaticPopup _ Show ( ) " function . ) To get and set the value of the EditBox use the following code : More complicated usage might be to use OnShow to call self . button1 : Disable ( ) ( graying out the Accept button ) , and then including the following in your options table to allow the Accept button to be clicked as soon as the user types something in the text field : Using " hasEditBox " / " . editBox " causes a small one - line text field to appear . You can use the " hasWideEditBox " option field ( and the corresponding " . wideEditBox " dialog field ) to cause the text field to have the full width of the dialog box instead . To do this , you must set both options , but only the wide edit box will be used . Both normal and wide editboxes will respect the " maxLetters " field if you set it ( most editbox popups used by Blizzard set this to 24 or 31 ) . Optional features . There are some more settings available for use in static popup entries . This list is almost certainly incomplete , I ' m just describing the ones which catch my eye . For more information , extract the StaticPopup . xml and . lua files from the default UI and browse . As an example , consider the Ready Check from CT _ RaidAssist , which pops up a two - button dialog box with a 30 - second timeout . The CT authors implemented everything from scratch : 107 lines of XML specifying window , field , and button sizes , plus a couple lines of Lua here and there . It could be replaced with something like the following : and called via ( Note : the above was written before the 1 . 11 game patch added a builtin ready check . While ready checks no longer need to be implemented by addon authors , the example is simple enough to remain here . ) Passing arguments to local functions . It is possible , though not immediately obvious how , to pass arbitrary user data to the local functions ( e . g . OnAccept , OnCancel ) . Write your local function like this : And make the call like this : The dialog ' s fields " data " and " data2 " are passed as additional arguments to OnAccept . The " data " field is passed to OnCancel and OnAlt ( the function called if button3 is set ) , but not " data2 " . They are also accessible through the dialog itself , as " self . data " and " self . data2 " . In this example they are strings , but they can be of any type including tables . Notice that you are actually setting the frame ' s data " after " you have called StaticPopup _ Show . This works because popping up a dialog box does not halt script execution . The dialog box isn ' t even visible to the player until after the current script execution cycle completes . By the time the player clicks a button to run OnAccept / OnCancel / etc , all of this code will have long since finished . If you need to manipulate any of the dialog ' s visual elements , most of them are directly accessible as table fields of the dialog , so you do not need to use an expensive sequence of " getglobal ( self : GetName ( ) . . " Something " ) " . For example , " dialog . button1 " points to the first button . See the StaticPopup . xml file ' s various OnLoad sections for the full list .