Download
(8 Kb)
Download
Updated: 03/13/23 03:24 PM
Pictures
File Info
Compatibility:
Scribes of Fate (8.3.5)
Firesong (8.2.5)
Updated:03/13/23 03:24 PM
Created:07/11/15 10:51 AM
Monthly downloads:42,601
Total downloads:4,380,932
Favorites:1,969
MD5:
LibCustomMenu  Popular! (More than 5000 hits)
Version: 7.2.1
by: votan [More]
Info
This library is for addon developers. Download it, if an addon dependency tells you so.

Description
This library is written to overcome one way to get the "Access a private function XYZ from insecure code". But beginning with version 2.0, it does additional provide a new feature: sub menus.
Beginning with version 3.0, it does additional provide a new feature: divider.

Background
Controls, created from add-on code (as part of code path) are marked as "insecure/compromissed".
Functions, which have no problem with been called from "insecure" controls, are still working perfectly.
Like those of add-ons or Show On Map, Link in Chat or Get Help.
But "secured" functions like UseItem, InitiateDestroy, PickupInventoryItem raising the error message from above.
Once you hook AddMenuItem ALL controls created for the context-menu are "insecure".

Prior to ESO 2.0.13 if an add-on offers a full custom context-menu (no built-in menu entries) and this context-menu is shown first after (re-)load UI the first menu item controls are insecure. A crash of "Use" in the inventory afterwards was guaranteed.
Starting with ESO 2.0.13 ZOS preallocates 10 "secure" menu items. See here.
But this just reduces the chance of running into that problem, it does not fix it.
Currently the number of preallocated controls is 30. Running into this problem with AddMenuItem is real rare, but inventory action slots still don't like custom menu entries.

To avoid the error message, the controls of built-in menu items and add-on menu items must be strictly separated. That's what AddCustomMenuItem of this library does. It uses an own pool of controls, which look exactly the same. Sounds strange, but works.

I don't use private functions. Why should I use this lib?
It's not you, who uses private functions. It is built-in code, which re-uses controls indirectly created by your add-on in AddMenuItem.

I want to use this lib, so what to do?
After you have included the lib in your add-on manifest (.txt) do a text search for the global function AddMenuItem (not any :AddMenuItem of other objects) and replace it with AddCustomMenuItem.
Be careful with a simple "Replace All" over all files! You probably replace the AddMenuItem of LibCustomMenu itself

Version 1.0
This version was intended as proof of concept, but was successfully used in Beartram's FCO Item Saver, Circonian's FilterIt and my Fish Fillet.

Version 2.0
In order to have more value than avoiding a rare, just annoying "bug", sirinsidiator suggested and provided proof of concept code for sub menu items.
A big thank to sirinsidiator!
I finalized it and here we are.

API 2.0
function AddCustomMenuItem(mytext, myfunction, itemType, myfont, normalColor, highlightColor, itemYPad)

Fully compatible with AddMenuItem.
mytext: string, required. Caption of menu item.
myfunction: function(), required. Called if clicked.
itemType: int, optional. MENU_ADD_OPTION_LABEL or MENU_ADD_OPTION_CHECKBOX. Default MENU_ADD_OPTION_LABEL.
myfont: string, optional.
normalColor: ZO_ColorDef, optional. Color of unselected item.
highlightColor: ZO_ColorDef, optional. Color of selected/hovered item.
itemYPad: int, optional. y-padding between items.


function AddCustomSubMenuItem(mytext, entries, myfont, normalColor, highlightColor, itemYPad, subMenuButtonCallbackFunc)

mytext: string, required. Caption of menu item.
entries: table of sub items or callback returning table of sub items, required.
myfont: string, optional.
normalColor: ZO_ColorDef, optional. Color of unselected/normal sub item.
highlightColor: ZO_ColorDef, optional. Color of selected/hovered sub item.
itemYPad: int, optional. y-padding between sub items.
subMenuButtonCallbackFunc: function, optional. Callback function for the click on the submenu open button (the one at the main menu showing the submenu)

sub item:
label: string or function(rootMenu, childControl), required.
callback: function(), required.
disabled: boolean or function(rootMenu, childControl), optional. Default false. if true, sub item is visible, but gray and not clickable.
visible: boolean or function(rootMenu, childControl), optional. Default true.

These examples are for self-created menus. If you want to add items to the inventory context-menu, look at the example for LibCustomMenu:RegisterContextMenu more below.

example 1:
Lua Code:
  1. local entries = {
  2.   {
  3.     label = "Test 1",
  4.     callback = function() d("Test 1") end,
  5.   },
  6.   {
  7.     label = "Test 2",
  8.     callback = function() d("Test 2") end,
  9.     disabled = function(rootMenu, childControl) return true end,
  10.   }
  11. }
  12. ClearMenu()
  13. AddCustomSubMenuItem("Sub Menu", entries)
  14. ShowMenu()

example 2:
Lua Code:
  1. local function GetEntries(rootMenu)
  2. d("run")
  3. return {
  4.   {
  5.     label = function() return GetTimeStamp() end,
  6.     callback = function() d("Test 1") end,
  7.   },
  8.   {
  9.     label = "Test 2",
  10.     callback = function() d("Test 2") end,
  11.     disabled = function(rootMenu, childControl) return true end,
  12.   }
  13. }
  14. end
  15. ClearMenu()
  16. AddCustomSubMenuItem("Sub Menu", GetEntries)
  17. ShowMenu()
If you have Notebook or ZAM Notebook, you could copy&paste the scripts from above and execute them.

API 3.0
In addition to API 2.0:
Allow divider by setting member label to a static "-". Suggested by Beartram.

example:
Lua Code:
  1. local entries = {
  2.   {
  3.     label = "Test 1",
  4.     callback = function() d("Test 1") end,
  5.   },
  6.   {
  7.     label = "-",
  8.   },
  9.   {
  10.     label = "Test 2",
  11.     callback = function() d("Test 2") end,
  12.     disabled = function(rootMenu, childControl) return true end,
  13.   }
  14. }
  15. ClearMenu()
  16. AddCustomSubMenuItem("Sub Menu", entries)
  17. ShowMenu()

API 4.1
In addition to API 3.0:
actionSlots:AddCustomSlotAction(actionStringId, actionCallback, actionType, visibilityFunction, options)

for example while hooking ZO_InventorySlot_DiscoverSlotActionsFromActionList(inventorySlot, slotActions)
for example within the callback of API 6.0. See below.

API 5.0
In addition to API 4.1+:
New entry properties itemType and checked.
itemType = MENU_ADD_OPTION_LABEL (default) or MENU_ADD_OPTION_CHECKBOX for a checkbox
checked = false/true or function() return state end
The initial checked state than opening the sub menu.

example:
Lua Code:
  1. local myState = true
  2.     local entries = {
  3.       {
  4.         label = "Test 1",
  5.         callback = function(state) myState = state df("Test 1: %s", tostring(myState)) end,
  6.         checked = function() return myState end,
  7.         itemType = MENU_ADD_OPTION_CHECKBOX,
  8.       },
  9.       {
  10.         label = "Test 1b",
  11.         callback = function() d("Test 1b") end,
  12.         itemType = MENU_ADD_OPTION_LABEL,
  13.       },
  14.       {
  15.         label = "-",
  16.       },
  17.       {
  18.         label = "Test 2",
  19.         callback = function() d("Test 2") end,
  20.         disabled = function(rootMenu, childControl) return true end,
  21.       }
  22.     }
  23.     ClearMenu()
  24.     AddCustomSubMenuItem("Sub Menu", entries)
  25.     ShowMenu()

API 6.2
In addition to API 5+:
Added callbacks, you can register to, to hook into inventory slot context menu. You don't need to reinvent the hook and are able to control the position of your entry/entries more granular.

category
lib.CATEGORY_EARLY
lib.CATEGORY_PRIMARY
lib.CATEGORY_SECONDARY
lib.CATEGORY_TERTIARY
lib.CATEGORY_QUATERNARY
lib.CATEGORY_LATE

CATEGORY_EARLY is before the first built-in menu entry.
CATEGORY_PRIMARY is after the first built-in menu entry. And so on.
CATEGORY_LATE is after built-in menu and default.

lib:RegisterContextMenu(func, category)
Register to the context menu of the inventory mouse right click.

lib:RegisterKeyStripEnter(func, category)
Register to the inventory mouse hover used to update the keybind buttons at the bottom.

func: callback function to be called.
Signature:
Lua Code:
  1. local function func(inventorySlot, slotActions)
  2. end

category: optional. defaults to CATEGORY_LATE.

lib:RegisterKeyStripExit(func)
Register to the inventory mouse hover used to update the keybind buttons at the bottom, if the mouse exits an inventory slot.

func: callback function to be called.
Signature:
Lua Code:
  1. local function func()
  2. end

example:
Lua Code:
  1. ZO_CreateStringId("SI_BINDING_NAME_SHOW_POPUP", "Show in Popup")
  2. local function AddItem(inventorySlot, slotActions)
  3.   local valid = ZO_Inventory_GetBagAndIndex(inventorySlot)
  4.   if not valid then return end
  5.   slotActions:AddCustomSlotAction(SI_BINDING_NAME_SHOW_POPUP, function()
  6.     local bagId, slotIndex = ZO_Inventory_GetBagAndIndex(inventorySlot)
  7.     local itemLink = GetItemLink(bagId, slotIndex)
  8.     ZO_PopupTooltip_SetLink(itemLink)
  9.   end , "")
  10. end
  11.  
  12. LibCustomMenu:RegisterContextMenu(AddItem, LibCustomMenu.CATEGORY_PRIMARY)

example 2:
Lua Code:
  1. local function AddItem(inventorySlot, slotActions)
  2.   local bagId, slotIndex = ZO_Inventory_GetBagAndIndex(inventorySlot)
  3.   if not CanItemBePlayerLocked(bagId, slotIndex) then return end
  4.   local locked = IsItemPlayerLocked(bagId, slotIndex)
  5.  
  6.   slotActions:AddCustomSlotAction(locked and SI_ITEM_ACTION_UNMARK_AS_LOCKED or SI_ITEM_ACTION_MARK_AS_LOCKED, function()
  7.     SetItemIsPlayerLocked(bagId, slotIndex, not locked)
  8.   end, "keybind2")
  9.   -- you can use: "primary", "secondary", "keybind1", "keybind2"
  10. end
  11.  
  12. local menu = LibCustomMenu
  13. --menu:RegisterContextMenu(AddItem, menu.CATEGORY_PRIMARY)
  14. menu:RegisterKeyStripEnter(AddItem, menu.CATEGORY_LATE)
Not really practical, because it hides the built-in keybind.
But you could use the callback just to be notified as well.

API 6.8
In addition to API 6.2+:
Added functionality to add an optional tooltip to a menu entry.
For the top level menu entries there is a new global function:
function AddCustomMenuTooltip(tooltip, index)
tooltip: Either a string shown as a simple tooltip or a callback function to let you do everything.
Signature:
Lua Code:
  1. local function func(control, inside)
  2. end
control: the menu entry control.
inside: The function is called on mouse enter with inside=true and on mouse exit with inside=false.

index: Optional. Index of the menu entry, the tooltip is for. By default the index of the last added item is used. => You call AddCustomMenuItem and when AddCustomMenuTooltip.

For sub-menus a new key "tooltip" can be used. Again it is either a string or the callback function with the signature from above.

example:
Lua Code:
  1. local myState = true
  2.     local entries = {
  3.       {
  4.         label = "Test 1",
  5.         callback = function(state) myState = state df("Test 1: %s", tostring(myState)) end,
  6.         checked = function() return myState end,
  7.         itemType = MENU_ADD_OPTION_CHECKBOX,
  8.         tooltip = "This is Test 1",
  9.       },
  10.       {
  11.         label = "Test 1b",
  12.         callback = function() d("Test 1b") end,
  13.         itemType = MENU_ADD_OPTION_LABEL,
  14.         tooltip = "This is Test 2",
  15.       },
  16.       {
  17.         label = "-",
  18.       },
  19.       {
  20.         label = "Test 2",
  21.         callback = function() d("Test 2") end,
  22.         disabled = function(rootMenu, childControl) return true end,
  23.       }
  24.     }
  25.     ClearMenu()
  26.     AddCustomSubMenuItem("Sub Menu", entries)
  27.     AddCustomMenuTooltip("A sub-menu")
  28.     AddCustomMenuItem("-", function() d("soso") end)
  29.     AddCustomMenuItem("Button", function() d("jojo") end)
  30.     AddCustomMenuTooltip(function(control, inside) if inside then d("A great button") end end)
  31.     AddCustomMenuItem("CheckBox", function() d("soso") end, MENU_ADD_OPTION_CHECKBOX)
  32.     ShowMenu()
How to use Checkbox at top level
Lua Code:
  1. local index = AddCustomMenuItem("CheckBox", function() <your callback> end, MENU_ADD_OPTION_CHECKBOX)
  2. if needToCheckIt then
  3.     ZO_CheckButton_SetChecked(ZO_Menu.items[index].checkbox)
  4. end

API 6.9
lib:EnableSpecialKeyContextMenu(key)
key: KEY_CTRL or KEY_ALT or KEY_SHIFT or KEY_COMMAND
Show an alternative context menu, if the special key is pressed while right-clicking the inventory item.

lib:RegisterSpecialKeyContextMenu(func)
Register a callback for the alternative context menu. You, the addon author, have to check which menu items you want to add for the given combination of special keys. (See signature below)
You have to enable all the keys you want to handle. See lib:EnableSpecialKeyContextMenu(key). There is no DisableSpecialKeyContextMenu, because you don't know who else had enabled them.

Signature:
Lua Code:
  1. local function func(inventorySlot, slotActions, ctrl, alt, shift, command)
  2. end
API 6.92
lib:RegisterPlayerContextMenu(func, category)
Register to the context menu of the chat player link mouse right click,

func: callback function to be called.
Signature:
Code:
local function func(playerName, rawName)
end
Category: See API 6.2 description for the available categories.

API 7.1
lib:RegisterGuildRosterContextMenu(func, category)
Register to the context menu of the guild roster member mouse right click.

func: callback function to be called.
Signature:
Code:
local function func(rowData)
end
API 7.2
lib:RegisterFriendsListContextMenu(func, category)
Register to the context menu of the friends list mouse right click.

lib:RegisterGroupListContextMenu(func, category)
Register to the context menu of the group list mouse right click.

Both analog to RegisterGuildRosterContextMenu. See above.

Example
Lua Code:
  1. local function AddItem(data)
  2. AddCustomMenuItem("Example", function() d(data.displayName) end)
  3. end
  4.  
  5. local menu = LibCustomMenu
  6. menu:RegisterFriendsListContextMenu(AddItem, menu.CATEGORY_EARLY)
  7. menu:RegisterFriendsListContextMenu(AddItem, menu.CATEGORY_LAST)
version 7.2.1:
- Fixed nil error in AddCustomMenuItem. Sorry.

version 7.2.0:
- New functions RegisterFriendsListContextMenu and RegisterGroupListContextMenu as requested.

version 7.1.3:
- Update for "High Isle".

version 7.1.2:
- Fix for U32 adding a divider to header menu item. Thanks to @silvereyes.

version 7.1.1:
- Fixed issue with Shissu's Guild Tools. Thanks to @marcbf for reporting.

version 7.1.0:
- New API function RegisterGuildRosterContextMenu. Requested by @Saenic.

version 7.0.1:
- Allow to click sub-menu button itself. (a bit like a DropDown-Button)
- Allow to refresh/change other sub-menu items with clicking a checkbox menu item.

version 7.0.0:
- Removed LibStub support
- Added new menu item type: MENU_ADD_OPTION_HEADER

version 6.9.5:
- Update to API 100034 "Flames of Ambition".

version 6.9.4:
- Update to API 100033 "Markarth".

version 6.9.3:
- Update to API 100032 "Stonethorn".

version 6.9.2. Upon request added a new function RegisterPlayerContextMenu to added menu items to the player context menu of the chat.

version 6.9.1: Forgotten to increase the version number for LibStub legacy support. Added a warning, if LibStub has a "newer" version, which should not be!

version 6.9.0:
- Support keyboard modifier keys for inventory context menu to create special menus using those keys.

version 6.8.2:
- Update to API 100030 "Harrowstorm".

version 6.8.1:
- Update to API 100029 "Dragonhold".

version 6.8.0:
- Fix layout of built-in checkbox button of menu top level entries
- Added tooltip support: Either callback function or text string.

version 6.7.1:
- Update to API 100028 "Scalebreaker".

version 6.7.0:
- API bump 100027 "Elsweyr".
- Accessible via LibCustomMenu.
- Use of LibStub is optional.

version 6.6.3:
- Update to API 100026 "Wrathstone".

version 6.6.2:
- Reverted back to depend on LibStub. It is too early for that.

version 6.6.1:
- Update to API 100025 "Murkmire".
- Work without LibStub as well.

version 6.6:
- Update to API 100024 "Wolfhunter".
- New library load structure.

version 6.5: Fix for PTS.

version 6.4: Fixed compatibility with other addons hooking the context-menu. Like Craft Bag Extended.

version 6.3:
- Improve compabitility with AGS.

version 6.2:
- Handle inventory context menu and key strip menu. Take 2.


version 6.1:
- Fixed a conflict with CraftBagExtended.

version 6:
- Handle inventory context menu and key strip menu.


version 5:
- Supporting checkboxes in submenus.
- Fixed Divider menu item.

version 4.3:
- Update for "Horns of the Reach".

version 4.2.0:
- Fixed rare timing issue closing menu while mouse is over sub-menu.
- APIVersion update to 100017.

version 4.1.1:
- APIVersion update to 100014.

version 4.1:
- Added ZO_InventorySlotActions:AddCustomSlotAction. (Requested by merlight)
- APIVersion update to 100013.

version 4: * Working with Orsinium. Just the manifest APIVersion must be updated
- Fixed issue: main menu not closing if sub-menu used outside inventory. Thanks to circonian.

version 3:
- New menu item type: Divider. A static text "-" will be displayed as a divider. You can use <lib>.DIVIDER for better readability.

version 2:
- New global function AddCustomSubMenuItem

version 1:
- New global function AddCustomMenuItem as a replacement for AddMenuItem.
Optional Files (0)


Archived Files (35)
File Name
Version
Size
Uploader
Date
7.2.0
8kB
votan
03/11/23 11:59 AM
7.1.3
8kB
votan
04/24/22 09:04 AM
7.1.2
8kB
votan
10/24/21 07:44 AM
7.1.1
8kB
votan
09/05/21 07:30 AM
7.1.0
8kB
votan
09/04/21 09:32 AM
7.0.1
8kB
votan
07/04/21 04:46 AM
7.0.0
8kB
votan
04/28/21 11:21 AM
6.9.5
7kB
votan
02/20/21 09:09 AM
6.9.4
7kB
votan
11/02/20 04:41 AM
6.9.3
7kB
votan
08/22/20 04:55 AM
6.9.2
7kB
votan
04/21/20 03:12 PM
6.9.1
7kB
votan
04/04/20 06:22 AM
6.9.0
7kB
votan
04/03/20 11:43 AM
6.8.2
7kB
votan
02/15/20 11:44 AM
6.8.1
7kB
votan
10/03/19 04:37 AM
6.8.0
7kB
votan
08/07/19 01:15 PM
6.7.1
7kB
votan
07/30/19 11:57 AM
6.7.0
7kB
votan
05/18/19 08:07 AM
6.6.3
16kB
votan
02/23/19 10:15 AM
6.6.2
8kB
votan
10/21/18 09:31 AM
6.6.1
7kB
votan
10/19/18 12:13 PM
6.6
14kB
votan
08/13/18 11:17 AM
6.5
8kB
votan
04/22/18 05:21 AM
6.4
7kB
votan
04/16/18 11:45 AM
6.3
7kB
votan
03/03/18 10:58 AM
6.2
8kB
votan
02/02/18 12:35 AM
5
7kB
votan
01/27/18 03:11 PM
5
7kB
votan
08/15/17 12:34 PM
4.3
6kB
votan
07/15/17 01:00 PM
4.2.0
6kB
votan
10/12/16 12:56 PM
4.1.1
6kB
votan
03/07/16 12:13 PM
4.1.0
6kB
votan
11/22/15 02:24 PM
4.0.0
6kB
votan
08/06/15 10:48 AM
3.0.0
6kB
votan
07/25/15 05:36 AM
2.0.0
5kB
votan
07/11/15 10:51 AM


Post A Reply Comment Options
Unread 07/04/21, 05:42 AM  
SkebbZ

Forum posts: 0
File comments: 8
Uploads: 0
Question 7.0.1 glitchy/suspended update

Minion gets stuck on installing 7.0.1 update, and the website says the file is unavailable pending administrator review.
Report comment to moderator  
Reply With Quote
Unread 06/09/21, 02:30 PM  
Amma Rokk
 
Amma Rokk's Avatar

Forum posts: 4
File comments: 15
Uploads: 0
I updated to LibCustomMenu 700 yesterday and right click in Inventory, bankers, guild banks, merchants etc doesn't work. Any way to fix that?
----------June 16th----------------
Some testing done. When I updated LibCustomMenu Advanced Filters and pChat worked again, but right click doesn't work. So lot of disabling and reloading ui resulted in finding that disabling Inventory Insight fixed right click issue in inventory, bank, trader, item page.
Addon Selector doesn't work and doesn't show any presaved packs. Ok, I'll just manually disable things for trials.
Then I find out that the right click issue is still a problem on the Friends page. Disabled Addon Selector and right click is back on the Friends page... for few minutes.
Downgraded LibCustomMenu again since I didn't want to spend more hours in finding addon that may or may not be the culprit and everything works except Advanced Filters and pChat. But rather that then not having access to right click menus
---------June 18t-------------------
More testing revealed the culprit being Social Indicators which has in its own lib folder old version of LCM. Deleted that LCM folder and everything seems to be working again.
Last edited by Amma Rokk : 06/18/21 at 02:32 PM.
Report comment to moderator  
Reply With Quote
Unread 06/06/21, 06:08 PM  
La'razmirr
 
La'razmirr's Avatar

Forum posts: 1
File comments: 14
Uploads: 0
pChat has updated but it needs to wait on LibCustomMenu to update. It cannot be used with the current version.
Last edited by La'razmirr : 06/06/21 at 06:08 PM.
Report comment to moderator  
Reply With Quote
Unread 06/04/21, 09:45 AM  
frozyeso

Forum posts: 0
File comments: 6
Uploads: 0
Re: Re: Re: create control

Deleted.
Last edited by frozyeso : 06/04/21 at 09:48 AM.
Report comment to moderator  
Reply With Quote
Unread 06/04/21, 09:16 AM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1672
Uploads: 40
Re: Re: create control

Originally Posted by denzel
Originally Posted by Wowakan
Getting the following errors:

Failed to create control 'LibCustomMenuSubmenu'. Duplicate name.

and

user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:86: attempt to index a nil value
stack traceback:
user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:86: in function 'Submenu:Initialize'
user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:78: in function 'Submenu:New'
user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:648: in function 'OnAddonLoaded'
I think Im getting same errors, did you find a solution?
You have to delete the folder "SetTracker/libs/LibCustomMenu".
Report comment to moderator  
Reply With Quote
Unread 06/04/21, 07:42 AM  
denzel

Forum posts: 0
File comments: 4
Uploads: 0
Re: create control

Originally Posted by Wowakan
Getting the following errors:

Failed to create control 'LibCustomMenuSubmenu'. Duplicate name.

and

user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:86: attempt to index a nil value
stack traceback:
user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:86: in function 'Submenu:Initialize'
user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:78: in function 'Submenu:New'
user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:648: in function 'OnAddonLoaded'
I think Im getting same errors, did you find a solution?
Report comment to moderator  
Reply With Quote
Unread 06/04/21, 07:29 AM  
denzel

Forum posts: 0
File comments: 4
Uploads: 0
Sorry I'm not very technically minded, but I suddenly started getting this error

Failed to create control 'LibCustomMenuSubmenu'. Duplicate name.

Followed by

user:/AddOns/FCMQT/Libs/LibCustomMenu.lua:86: attempt to index a nil value
stack traceback:
user:/AddOns/FCMQT/Libs/LibCustomMenu.lua:86: in function 'Submenu:Initialize'
|caaaaaa<Locals> self = [table:1]{}, name = "LibCustomMenuSubmenu" </Locals>|r
user:/AddOns/FCMQT/Libs/LibCustomMenu.lua:78: in function 'Submenu:New'
|caaaaaa<Locals> self = [table:2]{}, object = [table:1] </Locals>|r
user:/AddOns/FCMQT/Libs/LibCustomMenu.lua:648: in function 'OnAddonLoaded'
|caaaaaa<Locals> event = 65536, name = "LibDebugLogger" </Locals>|r

I assume these are coonected, apologies if Im wrong.How can I solve this please

tia
Last edited by denzel : 06/04/21 at 07:32 AM.
Report comment to moderator  
Reply With Quote
Unread 05/31/21, 08:55 PM  
kuhlmja

Forum posts: 0
File comments: 4
Uploads: 0
Potential Fix without editing .lua

I downloaded the file before the 7.xx version and it got rid of my errors. I had 7 addons that were affected by whatever the most recent file changed. Now I just have to remember to never update this addon. I now can access the setup menus (before I couldn't access ANY custom setup menu for ANY addon because of this library). So if you aren't up for doing the edits listed above, just download the previous version and install it manually into your live directory. Perhaps the author of the library will fix it, but I'm not taking any chances and will not be updating this library anytime soon.
Report comment to moderator  
Reply With Quote
Unread 05/20/21, 11:13 PM  
votan
 
votan's Avatar
AddOn Author - Click to view AddOns

Forum posts: 577
File comments: 1672
Uploads: 40
Originally Posted by mightyjo
Potentially silly question.

When I use LibCustomMenu:RegisterContextMenu() and/or slotActions:AddCustomSlotAction() do I need to ClearMenu() and ShowMenu()?

I haven't been and things look great to me. But I got this screenshot from a user in which my menu items are overlapping the built-ins and some other add-ons' menus. Not sure whether to blame folks calling ZO_PreHook directly or myself for doing it wrong.



Thanks!
No. You don't need to. Your user must have an addon also hooking into the inventory menu or LibCustomMenu is loaded twice from an addon using it the old, embedded way.
Like rumple9. I still try to find it.
Report comment to moderator  
Reply With Quote
Unread 05/20/21, 01:14 PM  
mightyjo
AddOn Author - Click to view AddOns

Forum posts: 1
File comments: 17
Uploads: 2
Potentially silly question.

When I use LibCustomMenu:RegisterContextMenu() and/or slotActions:AddCustomSlotAction() do I need to ClearMenu() and ShowMenu()?

I haven't been and things look great to me. But I got this screenshot from a user in which my menu items are overlapping the built-ins and some other add-ons' menus. Not sure whether to blame folks calling ZO_PreHook directly or myself for doing it wrong.



Thanks!
Report comment to moderator  
Reply With Quote
Unread 05/19/21, 05:03 PM  
rumple9

Forum posts: 3
File comments: 86
Uploads: 0
errors

Hi since this addon was last updated I an regularly getting the following errors and it breaks my game. This was triggered by trying to right click on an item and mark it as junk:



[23:46] [23:46] Failed to create control 'ZO_CustomMenuItem1'. Duplicate name.
[23:46] [23:46] user:/AddOns/LibCustomMenu/LibCustomMenu.lua:586: attempt to index a nil value
stack traceback:
user:/AddOns/LibCustomMenu/LibCustomMenu.lua:586: in function 'MenuItemFactory'
<Locals> pool = [table:1]{m_NextControlId = 1, m_NextFree = 2} </Locals>
EsoUI/Libraries/Utility/ZO_ObjectPool.lua:141: in function 'ZO_ObjectPool:AcquireObject'
<Locals> self = [table:1], objectKey = 1 </Locals>
EsoUI/Libraries/ZO_ContextMenus/ZO_ContextMenus.lua:267: in function 'AddMenuItem'
<Locals> mytext = "Add to Listing", myfunction = user:/AddOns/AwesomeGuildStore/wrappers/SellTabWrapper.lua:409 </Locals>
EsoUI/Ingame/Inventory/InventorySlotActions.lua:187: in function 'ZO_InventorySlotActions:AddSlotAction'
<Locals> self = [table:2]{m_contextMenuMode = T, m_numContextMenuActions = 0, craftBagExtendedHooked = T, craftBagExtendedPostHooked = F, m_hasActions = T}, actionStringId = 5344, actionCallback = user:/AddOns/AwesomeGuildStore/wrappers/SellTabWrapper.lua:409, actionType = "primary", visibilityFunction = EsoUI/Ingame/Inventory/InventorySlotActions.lua:163, actionName = "Add to Listing" </Locals>
(tail call): ?
(tail call): ?
(tail call): ?
(tail call): ?
user:/AddOns/LibCustomMenu/LibCustomMenu.lua:795: in function 'ZO_InventorySlotActions:AddCustomSlotAction'
<Locals> self = [table:2], orgItemPool = [table:3]{m_NextControlId = 30, m_NextFree = 31}, orgCheckboxItemPool = [table:4]{m_NextControlId = 30, m_NextFree = 31} </Locals>
user:/AddOns/AwesomeGuildStore/wrappers/SellTabWrapper.lua:409: in function 'UpdateSlotActions'
<Locals> inventorySlot = ud, slotActions = [table:2] </Locals>
EsoUI/Libraries/Utility/ZO_CallbackObject.lua:107: in function 'ZO_CallbackObjectMixin:FireCallbacks'
<Locals> self = [table:5]{fireCallbackDepth = 1}, eventName = 1, registry = [table:6]{}, callbackInfoIndex = 1, callbackInfo = [table:7]{3 = F}, callback = user:/AddOns/AwesomeGuildStore/wrappers/SellTabWrapper.lua:400, deleted = F </Locals>
user:/AddOns/LibCustomMenu/LibCustomMenu.lua:631: in function 'addCategory'
user:/AddOns/LibCustomMenu/LibCustomMenu.lua:658: in function 'InsertToMenu'
EsoUI/Libraries/Utility/ZO_Hook.lua:18: in function '(anonymous)'
(tail call): ?
(tail call): ?
(tail call): ?
EsoUI/Ingame/Inventory/InventorySlot.lua:1804: in function 'actionHandler'
<Locals> inventorySlot = ud, slotActions = [table:2] </Locals>
EsoUI/Ingame/Inventory/InventorySlot.lua:2001: in function 'ZO_InventorySlot_DiscoverSlotActionsFromActionList'
<Locals> inventorySlot = ud, slotActions = [table:2], slotType = 2, potentialActions = [table:8]{1 = "quickslot"}, _ = 8, action = "trading_house_search_from_sell...", actionHandler = EsoUI/Ingame/Inventory/InventorySlot.lua:1802 </Locals>
(tail call): ?
(tail call): ?
EsoUI/Ingame/Inventory/InventorySlot.lua:2012: in function 'PerClickInitializeActions'
<Locals> inventorySlot = ud, useContextMenu = T </Locals>
EsoUI/Ingame/Inventory/InventorySlot.lua:2016: in function 'ZO_InventorySlot_ShowContextMenu'
<Locals> inventorySlot = ud </Locals>
(tail call): ?
(tail call): ?
(tail call): ?
(tail call): ?
(tail call): ?
(tail call): ?
EsoUI/Ingame/Inventory/InventorySlot.lua:2058: in function 'ZO_InventorySlot_OnSlotClicked'
<Locals> inventorySlot = ud, button = 2 </Locals>
[23:46] [23:46] Failed to create control 'ZO_CustomMenuItem2'. Duplicate name.
[23:46] [23:46] user:/AddOns/LibCustomMenu/LibCustomMenu.lua:586: attempt to index a nil value
stack traceback:
user:/AddOns/LibCustomMenu/LibCustomMenu.lua:586: in function 'MenuItemFactory'
<Locals> pool = [table:1]{m_NextControlId = 2, m_NextFree = 3} </Locals>
EsoUI/Libraries/Utility/ZO_ObjectPool.lua:141: in function 'ZO_ObjectPool:AcquireObject'
<Locals> self = [table:1], objectKey = 2 </Locals>
EsoUI/Libraries/ZO_ContextMenus/ZO_ContextMenus.lua:267: in function 'AddMenuItem'
<Locals> mytext = "Stats to Chat", myfunction = user:/AddOns/ArkadiusTradeToolsSales/ArkadiusTradeToolsSales.lua:1074 </Locals>
user:/AddOns/ArkadiusTradeToolsSales/ArkadiusTradeToolsSales.lua:1087: in function 'ArkadiusTradeToolsSales:ShowMenu'
<Locals> self = [table:2]{AUTHOR = "@Aldanga, @Arkadius1", VERSION = "1.12.2", TITLE = "Arkadius Trade Tools - Sales", serverName = "EU Megaserver", NAME = "ArkadiusTradeToolsSales", displayName = "@rumple99"}, text = "Stats to Chat", callback = user:/AddOns/ArkadiusTradeToolsSales/ArkadiusTradeToolsSales.lua:1074 </Locals>
(tail call): ?
EsoUI/Libraries/Utility/ZO_Hook.lua:18: in function 'ShowMenu'
user:/AddOns/FurnitureCatalogue/FurCContextMenu.lua:160: in function 'func'
EsoUI/Libraries/Globals/globalapi.lua:222: in function '(anonymous)'
[23:46] [23:46] Failed to create control 'ZO_CustomMenuItem3'. Duplicate name.
[23:46] [23:46] user:/AddOns/LibCustomMenu/LibCustomMenu.lua:586: attempt to index a nil value
stack traceback:
user:/AddOns/LibCustomMenu/LibCustomMenu.lua:586: in function 'MenuItemFactory'
<Locals> pool = [table:1]{m_NextControlId = 3, m_NextFree = 4} </Locals>
EsoUI/Libraries/Utility/ZO_ObjectPool.lua:141: in function 'ZO_ObjectPool:AcquireObject'
<Locals> self = [table:1], objectKey = 3 </Locals>
EsoUI/Libraries/ZO_ContextMenus/ZO_ContextMenus.lua:267: in function 'AddMenuItem'
<Locals> mytext = "Popup Item Data", myfunction = user:/AddOns/MasterMerchant/MasterMerchant.lua:1057, itemType = 1 </Locals>
user:/AddOns/MasterMerchant/MasterMerchant.lua:1057: in function 'func'
EsoUI/Libraries/Globals/globalapi.lua:222: in function '(anonymous)'
[23:46] [23:46] Failed to create control 'ZO_CustomMenuItem4'. Duplicate name.
[23:46] [23:46] user:/AddOns/LibCustomMenu/LibCustomMenu.lua:586: attempt to index a nil value
stack traceback:
user:/AddOns/LibCustomMenu/LibCustomMenu.lua:586: in function 'MenuItemFactory'
<Locals> pool = [table:1]{m_NextControlId = 4, m_NextFree = 5} </Locals>
EsoUI/Libraries/Utility/ZO_ObjectPool.lua:141: in function 'ZO_ObjectPool:AcquireObject'
<Locals> self = [table:1], objectKey = 4 </Locals>
EsoUI/Libraries/ZO_ContextMenus/ZO_ContextMenus.lua:267: in function 'AddMenuItem'
<Locals> mytext = "36:36:EsoUI/Art/Contacts/soc..."} </Locals>
EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox.lua:40: in function 'ZO_ComboBox:ShowDropdownInternal'
<Locals> self = [table:2] </Locals>
(tail call): ?
EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox_Base.lua:143: in function 'ZO_ComboBox_Base:ShowDropdown'
<Locals> self = [table:2] </Locals>
EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox_Base.lua:314: in function 'ZO_ComboBox_OpenDropdown'
<Locals> container = ud, comboBox = [table:2] </Locals>
EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox.lua:56: in function 'ZO_ComboBox_DropdownClicked'
<Locals> container = ud </Locals>
AwesomeGuildStoreGuildSelectorComboBoxSelectedItemText_MouseUp:4: in function '(main chunk)'
<Locals> self = ud, button = 1, upInside = T, ctrl = F, alt = F, shift = F, command = F </Locals>
[23:46] [23:46] Failed to create control 'ZO_CustomMenuItem5'. Duplicate name.
[23:46] [23:46] user:/AddOns/LibCustomMenu/LibCustomMenu.lua:586: attempt to index a nil value
stack traceback:
user:/AddOns/LibCustomMenu/LibCustomMenu.lua:586: in function 'MenuItemFactory'
<Locals> pool = [table:1]{m_NextControlId = 5, m_NextFree = 6} </Locals>
EsoUI/Libraries/Utility/ZO_ObjectPool.lua:141: in function 'ZO_ObjectPool:AcquireObject'
<Locals> self = [table:1], objectKey = 5 </Locals>
EsoUI/Libraries/ZO_ContextMenus/ZO_ContextMenus.lua:267: in function 'AddMenuItem'
<Locals> mytext = "36:36:EsoUI/Art/Contacts/soc..."} </Locals>
EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox.lua:40: in function 'ZO_ComboBox:ShowDropdownInternal'
<Locals> self = [table:2] </Locals>
(tail call): ?
EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox_Base.lua:143: in function 'ZO_ComboBox_Base:ShowDropdown'
<Locals> self = [table:2] </Locals>
EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox_Base.lua:314: in function 'ZO_ComboBox_OpenDropdown'
<Locals> container = ud, comboBox = [table:2] </Locals>
EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox.lua:56: in function 'ZO_ComboBox_DropdownClicked'
<Locals> container = ud </Locals>
AwesomeGuildStoreG
Last edited by rumple9 : 05/19/21 at 05:05 PM.
Report comment to moderator  
Reply With Quote
Unread 05/11/21, 06:56 AM  
Wowakan

Forum posts: 2
File comments: 8
Uploads: 0
create control

Getting the following errors:

Failed to create control 'LibCustomMenuSubmenu'. Duplicate name.

and

user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:86: attempt to index a nil value
stack traceback:
user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:86: in function 'Submenu:Initialize'
user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:78: in function 'Submenu:New'
user:/AddOns/SetTracker/libs/LibCustomMenu/LibCustomMenu.lua:648: in function 'OnAddonLoaded'
Report comment to moderator  
Reply With Quote
Unread 05/10/21, 10:00 AM  
DigitalTemerity

Forum posts: 0
File comments: 1
Uploads: 0
Version 7.0.0. Broke Several Addons

I had to roll back to 6.5.9 because several of my addons including Votan's were disabled by the library errors I got despite having a bug squasher installed. Either the other addons that use this version need to be changed or this version needs to be changed. Just alerting you that there is a problem.
Report comment to moderator  
Reply With Quote
Unread 05/07/21, 06:02 AM  
FWSWBN
 
FWSWBN's Avatar

Forum posts: 18
File comments: 489
Uploads: 0
Re: Re: Re: Duplicate LibCustomMenu

Originally Posted by papahuge
Originally Posted by FWSWBN
Originally Posted by araminta
So.. Dolgubon's 3.0.5 fixed it on his end.

I found the offending entry in FCMQT... their version was back to 2019.. So in the process I realized that FCMQT is also way out of date. Does anyone have a recommendation for something to use instead? (It's a quest tracking addon that gives you a list of quests instead of just the one you are working on)

Thanks
FCMQT works fine if you do so like i and many others written..

1. open your addon folder
2. go into every addon and look if there is a LibCustomMenu and delete this lib (and only this lib, no other)
3. do this for all addons you have (open folder, look inside, is there a LibCustomMenu delete it)
4. done everything works fine without any errors.


and to dolgubon.... he uses again a LibCustomMenu INSIDE his addon folder and he uses another one than the 7.0.0 (its much smaller).
also delete this LibCustomMenu inside Lazy Writ Crafter.
I have 100+ addons though. I came here to play games, not edit scripts. Why must this be so r3t4rded?
well than you have half of mine addons... i am now more than 210+

you dont need to edit scripts... only delete the wrong / old LibCustomMenu inside the addon folders.
it takes me not more than 10 minutes to do this and its so easy that also you can do it.

why they make it so?
its easy to say... its BETTER when all libs are not inside the folders.
so everytime they get updated ... everything works ... some / most of the famous addon writer does this allready, all others.... they cant, they want or they dont maintain the addons anymore.

so what is your problem, you need to do this only one time.


EDIT:
if you dont want to do this, deinstall all addons and play vanilla
Last edited by FWSWBN : 05/07/21 at 06:03 AM.
Report comment to moderator  
Reply With Quote
Unread 05/06/21, 05:01 PM  
papahuge

Forum posts: 2
File comments: 18
Uploads: 0
Re: Re: Duplicate LibCustomMenu

Originally Posted by FWSWBN
Originally Posted by araminta
So.. Dolgubon's 3.0.5 fixed it on his end.

I found the offending entry in FCMQT... their version was back to 2019.. So in the process I realized that FCMQT is also way out of date. Does anyone have a recommendation for something to use instead? (It's a quest tracking addon that gives you a list of quests instead of just the one you are working on)

Thanks
FCMQT works fine if you do so like i and many others written..

1. open your addon folder
2. go into every addon and look if there is a LibCustomMenu and delete this lib (and only this lib, no other)
3. do this for all addons you have (open folder, look inside, is there a LibCustomMenu delete it)
4. done everything works fine without any errors.


and to dolgubon.... he uses again a LibCustomMenu INSIDE his addon folder and he uses another one than the 7.0.0 (its much smaller).
also delete this LibCustomMenu inside Lazy Writ Crafter.
I have 100+ addons though. I came here to play games, not edit scripts. Why must this be so r3t4rded?
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: