Quantcast
== About ==
Standard UIDropDownMenu global functions using protected frames and causing taints
when used by third-party addons. But it is possible to avoid taints by using same
functionality with that library.

== What is it ==
Library is standard code from Blizzard's files EasyMenu.lua, UIDropDownMenu.lua,
UIDropDownMenu.xml and UIDropDownMenuTemplates.xml with frames, tables, variables
and functions renamed to:
* constants : "L_" added at the start
* functions: "L_" added at the start

== How to use it (for addon developer) ==
* Embed LibUIDropDownMenu to your addon, you can specify to the folder to
  LibUIDropDownMenu\LibUIDropDownMenu if you feel this keep the folder cleaner.
* Add LibUIDropDownMenu.xml to your toc or your embeds.xml / libs.xml.
* If your addon doesn't embed LibStub, you will need it.
* Like ordinal code for UIDropDownMenu with "L_" instead.

== Constants ==
* L_UIDROPDOWNMENU_MINBUTTONS
* L_UIDROPDOWNMENU_MAXBUTTONS
* L_UIDROPDOWNMENU_MAXLEVELS
* L_UIDROPDOWNMENU_BUTTON_HEIGHT
* L_UIDROPDOWNMENU_BORDER_HEIGHT
* L_UIDROPDOWNMENU_OPEN_MENU
* L_UIDROPDOWNMENU_INIT_MENU
* L_UIDROPDOWNMENU_MENU_LEVEL
* L_UIDROPDOWNMENU_MENU_VALUE
* L_UIDROPDOWNMENU_SHOW_TIME
* L_UIDROPDOWNMENU_DEFAULT_TEXT_HEIGHT
* L_OPEN_DROPDOWNMENUS

== Functions ==
* L_EasyMenu
* L_EasyMenu_Initialize

* L_UIDropDownMenuDelegate_OnAttributeChanged
* L_UIDropDownMenu_InitializeHelper
* L_UIDropDownMenu_Initialize
* L_UIDropDownMenu_SetInitializeFunction
* L_UIDropDownMenu_RefreshDropDownSize
* L_UIDropDownMenu_OnUpdate
* L_UIDropDownMenu_StartCounting
* L_UIDropDownMenu_StopCounting
* L_UIDropDownMenu_CheckAddCustomFrame
* L_UIDropDownMenu_CreateInfo
* L_UIDropDownMenu_CreateFrames
* L_UIDropDownMenu_AddSeparator
* L_UIDropDownMenu_AddButton
* L_UIDropDownMenu_AddSeparator
* L_UIDropDownMenu_GetMaxButtonWidth
* L_UIDropDownMenu_GetButtonWidth
* L_UIDropDownMenu_Refresh
* L_UIDropDownMenu_RefreshAll
* L_UIDropDownMenu_RegisterCustomFrame
* L_UIDropDownMenu_SetIconImage
* L_UIDropDownMenu_SetSelectedName
* L_UIDropDownMenu_SetSelectedValue
* L_UIDropDownMenu_SetSelectedID
* L_UIDropDownMenu_GetSelectedName
* L_UIDropDownMenu_GetSelectedID
* L_UIDropDownMenu_GetSelectedValue
* L_UIDropDownMenuButton_OnClick
* L_HideDropDownMenu
* L_ToggleDropDownMenu
* L_CloseDropDownMenus
* L_UIDropDownMenu_OnHide
* L_UIDropDownMenu_SetWidth
* L_UIDropDownMenu_SetButtonWidth
* L_UIDropDownMenu_SetText
* L_UIDropDownMenu_GetText
* L_UIDropDownMenu_ClearAll
* L_UIDropDownMenu_JustifyText
* L_UIDropDownMenu_SetAnchor
* L_UIDropDownMenu_GetCurrentDropDown
* L_UIDropDownMenuButton_GetChecked
* L_UIDropDownMenuButton_GetName
* L_UIDropDownMenuButton_OpenColorPicker
* L_UIDropDownMenu_DisableButton
* L_UIDropDownMenu_EnableButton
* L_UIDropDownMenu_SetButtonText
* L_UIDropDownMenu_SetButtonNotClickable
* L_UIDropDownMenu_SetButtonClickable
* L_UIDropDownMenu_DisableDropDown
* L_UIDropDownMenu_EnableDropDown
* L_UIDropDownMenu_IsEnabled
* L_UIDropDownMenu_GetValue

== List of button attributes ==
* info.text = [STRING]  --  The text of the button
* info.value = [ANYTHING]  --  The value that L_UIDROPDOWNMENU_MENU_VALUE is set to when the button is clicked
* info.func = [function()]  --  The function that is called when you click the button
* info.checked = [nil, true, function]  --  Check the button if true or function returns true
* info.isNotRadio = [nil, true]  --  Check the button uses radial image if false check box image if true
* info.isTitle = [nil, true]  --  If it's a title the button is disabled and the font color is set to yellow
* info.disabled = [nil, true]  --  Disable the button and show an invisible button that still traps the mouseover event so menu doesn't time out
* info.tooltipWhileDisabled = [nil, 1] -- Show the tooltip, even when the button is disabled.
* info.hasArrow = [nil, true]  --  Show the expand arrow for multilevel menus
* info.hasColorSwatch = [nil, true]  --  Show color swatch or not, for color selection
* info.r = [1 - 255]  --  Red color value of the color swatch
* info.g = [1 - 255]  --  Green color value of the color swatch
* info.b = [1 - 255]  --  Blue color value of the color swatch
* info.colorCode = [STRING] -- "|cAARRGGBB" embedded hex value of the button text color. Only used when button is enabled
* info.swatchFunc = [function()]  --  Function called by the color picker on color change
* info.hasOpacity = [nil, 1]  --  Show the opacity slider on the colorpicker frame
* info.opacity = [0.0 - 1.0]  --  Percentatge of the opacity, 1.0 is fully shown, 0 is transparent
* info.opacityFunc = [function()]  --  Function called by the opacity slider when you change its value
* info.cancelFunc = [function(previousValues)] -- Function called by the colorpicker when you click the cancel button (it takes the previous values as its argument)
* info.notClickable = [nil, 1]  --  Disable the button and color the font white
* info.notCheckable = [nil, 1]  --  Shrink the size of the buttons and don't display a check box
* info.owner = [Frame]  --  Dropdown frame that "owns" the current dropdownlist
* info.keepShownOnClick = [nil, 1]  --  Don't hide the dropdownlist after a button is clicked
* info.tooltipTitle = [nil, STRING] -- Title of the tooltip shown on mouseover
* info.tooltipText = [nil, STRING] -- Text of the tooltip shown on mouseover
* info.tooltipOnButton = [nil, 1] -- Show the tooltip attached to the button instead of as a Newbie tooltip.
* info.justifyH = [nil, "CENTER"] -- Justify button text
* info.arg1 = [ANYTHING] -- This is the first argument used by info.func
* info.arg2 = [ANYTHING] -- This is the second argument used by info.func
* info.fontObject = [FONT] -- font object replacement for Normal and Highlight
* info.menuTable = [TABLE] -- This contains an array of info tables to be displayed as a child menu
* info.noClickSound = [nil, 1]  --  Set to 1 to suppress the sound when clicking the button. The sound only plays if .func is set.
* info.padding = [nil, NUMBER] -- Number of pixels to pad the text on the right side
* info.leftPadding = [nil, NUMBER] -- Number of pixels to pad the button on the left side
* info.minWidth = [nil, NUMBER] -- Minimum width for this line
* info.customFrame = frame -- Allows this button to be a completely custom frame, should inherit from L_UIDropDownCustomMenuEntryTemplate and override appropriate methods.