Quantcast
Download
(33 Kb)
Download
Updated: 05-25-17 01:14 AM
Compatibility:
Tomb of Sargeras (7.2.0)
Updated:05-25-17 01:14 AM
Created:11-24-13 01:19 PM
Downloads:1,535
Favorites:16
MD5:
7.2.0

NoTaint UIDropDownMenu  Updated this week!

Version: v7.2.0.24015-r3
by: another, arith

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.
Library checked more than year inside of TinyExtraBars without any taints from menus.

What is it
Library is standard code from Blizzard's files EasyMenu.lua, UIDropDownMenu.lua and UIDropDownMenuTemplates.xml with frames, tables, variables and functions renamed to:

  • constants (typed with all CAPS): "LIB_" added at the start
  • functions: "Lib_" added at the start


How to use it (for addon developer)
  • Add UIDropDownMenu.xml to your toc.
  • If your addon doesn't embed LibStub, you will need it.
  • Like ordinal code for UIDropDownMenu with "Lib_" instead.

Constants
  • LIB_UIDROPDOWNMENU_MINBUTTONS
  • LIB_UIDROPDOWNMENU_MAXBUTTONS
  • LIB_UIDROPDOWNMENU_MAXLEVELS
  • LIB_UIDROPDOWNMENU_BUTTON_HEIGHT
  • LIB_UIDROPDOWNMENU_BORDER_HEIGHT
  • LIB_UIDROPDOWNMENU_OPEN_MENU
  • LIB_UIDROPDOWNMENU_INIT_MENU
  • LIB_UIDROPDOWNMENU_MENU_LEVEL
  • LIB_UIDROPDOWNMENU_MENU_VALUE
  • LIB_UIDROPDOWNMENU_SHOW_TIME
  • LIB_UIDROPDOWNMENU_DEFAULT_TEXT_HEIGHT
  • LIB_OPEN_DROPDOWNMENUS

Functions
  • Lib_EasyMenu
  • Lib_EasyMenu_Initialize
  • Lib_UIDropDownMenuDelegate_OnAttributeChanged
  • Lib_UIDropDownMenu_InitializeHelper
  • Lib_UIDropDownMenu_Initialize
  • Lib_UIDropDownMenu_SetInitializeFunction
  • Lib_UIDropDownMenu_RefreshDropDownSize
  • Lib_UIDropDownMenu_OnUpdate
  • Lib_UIDropDownMenu_StartCounting
  • Lib_UIDropDownMenu_StopCounting
  • Lib_UIDropDownMenu_CreateInfo
  • Lib_UIDropDownMenu_CreateFrames
  • Lib_UIDropDownMenu_AddSeparator
  • Lib_UIDropDownMenu_AddButton
  • Lib_UIDropDownMenu_AddSeparator
  • Lib_UIDropDownMenu_GetMaxButtonWidth
  • Lib_UIDropDownMenu_GetButtonWidth
  • Lib_UIDropDownMenu_Refresh
  • Lib_UIDropDownMenu_RefreshAll
  • Lib_UIDropDownMenu_SetIconImage
  • Lib_UIDropDownMenu_SetSelectedName
  • Lib_UIDropDownMenu_SetSelectedValue
  • Lib_UIDropDownMenu_SetSelectedID
  • Lib_UIDropDownMenu_GetSelectedName
  • Lib_UIDropDownMenu_GetSelectedID
  • Lib_UIDropDownMenu_GetSelectedValue
  • Lib_UIDropDownMenuButton_OnClick
  • Lib_HideDropDownMenu
  • Lib_ToggleDropDownMenu
  • Lib_CloseDropDownMenus
  • Lib_UIDropDownMenu_OnHide
  • Lib_UIDropDownMenu_SetWidth
  • Lib_UIDropDownMenu_SetButtonWidth
  • Lib_UIDropDownMenu_SetText
  • Lib_UIDropDownMenu_GetText
  • Lib_UIDropDownMenu_ClearAll
  • Lib_UIDropDownMenu_JustifyText
  • Lib_UIDropDownMenu_SetAnchor
  • Lib_UIDropDownMenu_GetCurrentDropDown
  • Lib_UIDropDownMenuButton_GetChecked
  • Lib_UIDropDownMenuButton_GetName
  • Lib_UIDropDownMenuButton_OpenColorPicker
  • Lib_UIDropDownMenu_DisableButton
  • Lib_UIDropDownMenu_EnableButton
  • Lib_UIDropDownMenu_SetButtonText
  • Lib_UIDropDownMenu_SetButtonNotClickable
  • Lib_UIDropDownMenu_SetButtonClickable
  • Lib_UIDropDownMenu_DisableDropDown
  • Lib_UIDropDownMenu_EnableDropDown
  • Lib_UIDropDownMenu_IsEnabled
  • Lib_UIDropDownMenu_GetValue

Source Repository

If you would like to access the source repository or would like to set external link to your addon project, please use below URL:

svn://svn.wowinterface.com/NoTaint_UIDropDownMenu_Update-1134/trunk

v7.2.0.24015-r3 (2017/05/25)
----------------------------
- Reverted LIB_UIDROPDOWNMENU_MAXBUTTONS back to 8
- Renamed ToC file name
- Added OptionalDeps: LibStub to ToC

v7.2.0.24015-r2 (2017/05/19)
----------------------------
- added version number to EasyMenu
- increased LIB_UIDROPDOWNMENU_MAXBUTTONS to 24
- renamed packaged folder name to !NoTaint_UIDropDownMenu
- No impact to addons which embedded this lib
- For users who installed this lib separately, please remove the old "NoTaint_UIDropDownMenu" folder

v7.2.0.24015 (2017/05/12)
-------------------------
- added UIDropDownMenu.xml;
- removed customized codes in creating buttons;
- removed customized codes in Lib_UIDropDownMenu_AddButton()
- added LibStub to set library's version

v7.2.0.23801-r3 (2017/04/27)
----------------------------
- fixed the loading order in ToC if this get installed separately.

v7.2.0.23801-r2 (2017/04/17)
----------------------------
- ToC update to support proper loading if user install this library separately; this is for WoW 7.2 release.

v7.2.0.23801 (2017/03/22)
--------------------------
- fixed the issue when dropdown menu has more than 1 level

v7.2.0.23789 (2017/03/22)
--------------------------
- lib update to sync with WoW 7.2.0.23789
- TOC update to support WoW 7.2.0

v7.1.0.22908.r7 (2016/12/26)
--------------------------
- fixes with listframe width

v7.1.0.22908.r6 (2016/12/26)
--------------------------
- some minor enhancement in logical operation:
Lib_UIDropDownMenu_AddButton - index's value; width and maxWidth's values

v7.1.0.22908 (2016/10/27)
--------------------------
- Toc update to support WoW 7.1.0
- Codes synch with 7.1.0.22908:
- Added function Lib_UIDropDownMenu_AddSeparator(info, level)

v1.2
----
Updated (thanks to Blazeflack). To use Lib_UIDropDownMenu_AddSeparator left text value empty like

Code:
local tabsSubmenu = {
	{ text = "Add new tab", func = AddNewTab, notCheckable = true, keepShownOnClick = false },
	{ notCheckable = true, notClickable = true },
	{ text = "Remove active tab", func = ConfirmRemoveTab, notCheckable = true, keepShownOnClick = false },
}
1.1
---
Fixed first two menu's strata.
Optional Files (1)
File Name
Version
Size
Author
Date
Type
7.2.0.23801
13kB
03-22-17 03:23 AM
Patch


Archived Files (7)
File Name
Version
Size
Author
Date
v7.2.0.24015-r2
20kB
another
05-19-17 10:21 AM
v7.2.0.24015
20kB
another
05-12-17 08:45 AM
v7.2.0.23801-r3
13kB
another
04-27-17 08:38 AM
v7.2.0.23801-r2
13kB
another
04-17-17 02:09 AM
1.2
13kB
another
01-15-17 11:05 AM
1.1
13kB
another
11-29-13 05:03 PM
1.0
13kB
another
11-24-13 01:19 PM


Post A Reply Comment Options
Unread 05-24-17, 08:45 AM  
arith
A Fallenroot Satyr
 
arith's Avatar
AddOn Author - Click to view AddOns

Forum posts: 23
File comments: 54
Uploads: 25
LibUIDropDownMenu

Alright, just clone and created a new one: https://www.wowace.com/projects/libuidropdownmenu
and the one in WowInterface: http://www.wowinterface.com/download...pDownMenu.html
SVN source: https://repos.wowace.com/wow/libuidropdownmenu/trunk

I hope this will make things easier.
Last edited by arith : 05-24-17 at 10:10 PM.
Report comment to moderator  
Reply With Quote
Unread 05-23-17, 10:55 PM  
arith
A Fallenroot Satyr
 
arith's Avatar
AddOn Author - Click to view AddOns

Forum posts: 23
File comments: 54
Uploads: 25
Originally Posted by Resike
Originally Posted by arith
Originally Posted by Resike
Precreating 24 frames is not a good idea, first it's not neccessary, and it throws an error if you don't have a dropdown loaded with 24 items.
Hm... I did run several test but didn't see any errors. Could you post the error logs you encountered?
It iterates over the MAX buttons at line:77, and gives a nil error if it's not created.
I can't reproduce same error....
Anyway, I will revert it back to 8 in next release.
Furthermore, I am planning to clone the NoTaint_UIDropDownMenu to another one and change the prefix Lib / LIB to other one. There are too many addons using the old lib, and I am receiving more and more complain saying my addons have problem. I feel it would be easier to start with a new lib.
Report comment to moderator  
Reply With Quote
Unread 05-21-17, 12:51 PM  
Resike
A Pyroguard Emberseer
AddOn Author - Click to view AddOns

Forum posts: 1144
File comments: 236
Uploads: 11
Originally Posted by arith
Originally Posted by Resike
Precreating 24 frames is not a good idea, first it's not neccessary, and it throws an error if you don't have a dropdown loaded with 24 items.
Hm... I did run several test but didn't see any errors. Could you post the error logs you encountered?
It iterates over the MAX buttons at line:77, and gives a nil error if it's not created.
Report comment to moderator  
Reply With Quote
Unread 05-21-17, 09:04 AM  
arith
A Fallenroot Satyr
 
arith's Avatar
AddOn Author - Click to view AddOns

Forum posts: 23
File comments: 54
Uploads: 25
Originally Posted by Resike
Precreating 24 frames is not a good idea, first it's not neccessary, and it throws an error if you don't have a dropdown loaded with 24 items.
Hm... I did run several test but didn't see any errors. Could you post the error logs you encountered?
Report comment to moderator  
Reply With Quote
Unread 05-20-17, 01:49 PM  
Resike
A Pyroguard Emberseer
AddOn Author - Click to view AddOns

Forum posts: 1144
File comments: 236
Uploads: 11
Precreating 24 frames is not a good idea, first it's not neccessary, and it throws an error if you don't have a dropdown loaded with 24 items.
Report comment to moderator  
Reply With Quote
Unread 05-19-17, 12:23 PM  
arith
A Fallenroot Satyr
 
arith's Avatar
AddOn Author - Click to view AddOns

Forum posts: 23
File comments: 54
Uploads: 25
Originally Posted by ceylina
What I mean to say is that if an author follows your usage instructions and only links UIDropDownMenu.xml they will have issues trying to use this library without also linking libstub.

I have requested this in a few addons that are using outdated versions and they are hesitant to use the latest because following the included directions results in an error without explicitly adding libstub


I think this can be simply solved by adding the following in UIDropDownMenu.xml as the first script file

<Script file="LibStub\LibStub.lua"/>


Do by having the xml file look like this:

<Script file="LibStub\LibStub.lua"/>
<Script file="UIDropDownMenu.lua"/>
<Include file="UIDropDownMenuTemplates.xml"/>
<Script file="EasyMenu.lua"/>

It resolves the issue of making users add libstub explicitly in their TOC and instead they can continue to solely add UIDropDownMenu.xml and everything will be happy.
I know adding <Script file="LibStub\LibStub.lua"/> is one solution. But I cannot imagine any developer is not willing to update the outdated library, and also not quite willing to include LibStub.
Anyway, I have update the instruction first.

One idea came to my mind. Since the NoTaint_UIDropDown has been used in many addons but this lib was not maintained for a few years until I pick it up last year, I wonder if it worth to clone it, but then rename the functions and constants' prefix. For example, change Lib_UIDropDownXXXX to NLib_UIDropDownXXXX.
And for those developers who are more willing to keep their libs up to date, they might like to switch to the new one........
Report comment to moderator  
Reply With Quote
Unread 05-19-17, 12:02 PM  
ceylina
A Cyclonian

Forum posts: 48
File comments: 87
Uploads: 0
Originally Posted by arith
Originally Posted by ceylina
It seems the only way to get this to work with an addon now is to explicitly call libstub in your TOC file. For some reason libstub is not embedded in any include file in this library even though it is included in the folder.
I think it's quite often that most of the libs will only include the link of LibStub in toc, not in ther xml files. That being said, you will have to embed LibStub and link it in your ToC file.
I am not saying this make sense or make no sense, but I have seen most of the libs were doing so.

What I mean to say is that if an author follows your usage instructions and only links UIDropDownMenu.xml they will have issues trying to use this library without also linking libstub.

I have requested this in a few addons that are using outdated versions and they are hesitant to use the latest because following the included directions results in an error without explicitly adding libstub


I think this can be simply solved by adding the following in UIDropDownMenu.xml as the first script file

<Script file="LibStub\LibStub.lua"/>


Do by having the xml file look like this:

<Script file="LibStub\LibStub.lua"/>
<Script file="UIDropDownMenu.lua"/>
<Include file="UIDropDownMenuTemplates.xml"/>
<Script file="EasyMenu.lua"/>

It resolves the issue of making users add libstub explicitly in their TOC and instead they can continue to solely add UIDropDownMenu.xml and everything will be happy.
Report comment to moderator  
Reply With Quote
Unread 05-19-17, 10:12 AM  
arith
A Fallenroot Satyr
 
arith's Avatar
AddOn Author - Click to view AddOns

Forum posts: 23
File comments: 54
Uploads: 25
By the way,

I think I figured out the problem when user install the no-lib version of addons, and then install libs separately but then run into trouble with UIDropDownMenu.

I think the problem is the loading sequence.
My theory is, for example, the addon Atlas will be loaded earlier than NoTaint_UIDropDown. Then when a user use no-lib version of Atlas, it will run into problem.
An easy way to fix it would be to force NoTaint_UIDropDown to be loaded as earlier as possible, such as we add a "!" character as the folder's prefix.
Report comment to moderator  
Reply With Quote
Unread 05-19-17, 09:25 AM  
arith
A Fallenroot Satyr
 
arith's Avatar
AddOn Author - Click to view AddOns

Forum posts: 23
File comments: 54
Uploads: 25
Originally Posted by ceylina
It seems the only way to get this to work with an addon now is to explicitly call libstub in your TOC file. For some reason libstub is not embedded in any include file in this library even though it is included in the folder.
I think it's quite often that most of the libs will only include the link of LibStub in toc, not in ther xml files. That being said, you will have to embed LibStub and link it in your ToC file.
I am not saying this make sense or make no sense, but I have seen most of the libs were doing so.
Last edited by arith : 05-19-17 at 10:11 AM.
Report comment to moderator  
Reply With Quote
Unread 05-19-17, 06:55 AM  
ceylina
A Cyclonian

Forum posts: 48
File comments: 87
Uploads: 0
It seems the only way to get this to work with an addon now is to explicitly call libstub in your TOC file. For some reason libstub is not embedded in any include file in this library even though it is included in the folder.
Last edited by ceylina : 05-19-17 at 06:55 AM.
Report comment to moderator  
Reply With Quote
Unread 05-15-17, 12:26 AM  
arith
A Fallenroot Satyr
 
arith's Avatar
AddOn Author - Click to view AddOns

Forum posts: 23
File comments: 54
Uploads: 25
Originally Posted by Ketho
Originally Posted by arith
Just commit revision 17 to add LibStub and introduce LibStub:NewLibrary to set version number.
Since LibStub has been used, this will need to be loaded after LibStub.
Please test it and let me know if any issue.

Arith, I posted a few errors here since I can't find where I can make tickets
http://www.wowinterface.com/forums/s...5387&page=2#23
I guess curseforge / wowace's .pkgmeta (or says the auto-packaging) doesn't support repository on WowInterface or not support "svn://" protocol.

As for the errors you encountered, please load only UIDropDownMenu.xml to your ToC.
Last edited by arith : 05-17-17 at 12:19 AM.
Report comment to moderator  
Reply With Quote
Unread 05-14-17, 11:54 PM  
Ketho
A Molten Giant
 
Ketho's Avatar
AddOn Author - Click to view AddOns

Forum posts: 813
File comments: 167
Uploads: 61
Originally Posted by arith
Just commit revision 17 to add LibStub and introduce LibStub:NewLibrary to set version number.
Since LibStub has been used, this will need to be loaded after LibStub.
Please test it and let me know if any issue.

Arith, I posted a few errors here since I can't find where I can make tickets
http://www.wowinterface.com/forums/s...5387&page=2#23
__________________
Report comment to moderator  
Reply With Quote
Unread 05-12-17, 05:13 AM  
arith
A Fallenroot Satyr
 
arith's Avatar
AddOn Author - Click to view AddOns

Forum posts: 23
File comments: 54
Uploads: 25
Just commit revision 17 to add LibStub and introduce LibStub:NewLibrary to set version number.
Since LibStub has been used, this will need to be loaded after LibStub.
Please test it and let me know if any issue.
Report comment to moderator  
Reply With Quote
Unread 05-12-17, 04:32 AM  
arith
A Fallenroot Satyr
 
arith's Avatar
AddOn Author - Click to view AddOns

Forum posts: 23
File comments: 54
Uploads: 25
Originally Posted by arith
Originally Posted by Resike
Any chance to add some versioning for the lib like this:

Lua Code:
  1. local version = 3
  2.  
  3. if not Lib_UIDropDownMenu or Lib_UIDropDownMenu.version < version then
  4.     Lib_UIDropDownMenu = { }
  5.     Lib_UIDropDownMenu.version = version
  6. else
  7.     return
  8. end

So an older lib version won't override the functions of the newer ones?
I will try to implement it.
Below codes should do the thing
Lua Code:
  1. local MAJOR_VERSION = "NoTaint_UIDropDownMenu-7.2.0"
  2. local MINOR_VERSION = 90000 + tonumber(("$Rev$"):match("%d+"))
  3.  
  4. local LibStub = _G.LibStub
  5. if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end
  6. local Lib = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
  7. if not Lib then return end
Last edited by arith : 05-12-17 at 04:43 AM.
Report comment to moderator  
Reply With Quote
Unread 05-12-17, 04:00 AM  
arith
A Fallenroot Satyr
 
arith's Avatar
AddOn Author - Click to view AddOns

Forum posts: 23
File comments: 54
Uploads: 25
Originally Posted by Resike
Any chance to add some versioning for the lib like this:

Lua Code:
  1. local version = 3
  2.  
  3. if not Lib_UIDropDownMenu or Lib_UIDropDownMenu.version < version then
  4.     Lib_UIDropDownMenu = { }
  5.     Lib_UIDropDownMenu.version = version
  6. else
  7.     return
  8. end

So an older lib version won't override the functions of the newer ones?
I will try to implement it.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: