Download
(29 Kb)
Download
Updated: 03/21/24 05:38 AM
Pictures
File Info
Compatibility:
Scions of Ithelia (9.3.0)
Updated:03/21/24 05:38 AM
Created:01/24/23 03:57 PM
Monthly downloads:50,969
Total downloads:151,751
Favorites:88
MD5:
9.3.0
LibScrollableMenu  Updated this week!  Popular! (More than 5000 hits)
Version: 2.0
by: tomstock, Baertram
Library for scrollable menus and nested submenus at ComboBoxes.

It features:
  • Scrollable menus
  • Nested submenus
  • Headers
  • Dividers
  • Checkboxes
  • MultiIcons
  • "Is new" state icon
  • Callbacks fired at menu open, close, submenu open close, entry mouse enter, entry mouse exit, entry selected, checkbox checked state change, is new state change, dropdown opened, dropdown closed
  • Narration: Call custom function of addon to narrate or return a string to be narrated
  • Scrollable nested context menus at any control (like LibCustomMenu)

Originally developed by Kyoma in Kyoma's Titlizer. Now used in Improved Titleizer, AddonSelector, AdvancedFilters.


Known Issues

Developer reference
Read the Github readme file and check file LSM_test.lua for example code


Add a scrolhelper (dropdown scrollable) to a ZO_ComboBox:
API syntax:
Code:
--Adds a scroll helper to the comboBoxControl dropdown entries, and enables submenus (scollable too) at the entries.
--	control parent 							Must be the parent control of the comboBox
--	control comboBoxControl 				Must be any ZO_ComboBox control (e.g. created from virtual template ZO_ComboBox)
 --  table options:optional = {
 --		number visibleRowsDropdown:optional		Number or function returning number of shown entries at 1 page of the scrollable comboBox's opened dropdown
 --		number visibleRowsSubmenu:optional		Number or function returning number of shown entries at 1 page of the scrollable comboBox's opened submenus
 --		boolean sortEntries:optional			Boolean or function returning boolean if items in the main-/submenu should be sorted alphabetically
--		boolean sortEntries:optional			Boolean or function returning boolean if items in the main-/submenu should be sorted alphabetically: ZO_SORT_ORDER_UP or ZO_SORT_ORDER_DOWN
--		table sortType:optional					table or function returning table for the sort type, e.g. ZO_SORT_BY_NAME, ZO_SORT_BY_NAME_NUMERIC
--		table	XMLRowTemplates:optional		Table or function returning a table with key = row type of lib.scrollListRowTypes and the value = subtable having
--												"template" String = XMLVirtualTemplateName, rowHeight number = ZO_COMBO_BOX_ENTRY_TEMPLATE_HEIGHT,setupFunc = function(control, data, list) end
--												-->See local table "defaultXMLTemplates" in LibScrollableMenu
--												-->Attention: If you do not specify all template attributes, the non-specified will be mixedIn from defaultXMLTemplates[entryType_ID] again!
--		{
--			[lib.scrollListRowTypes.ENTRY_ID] = 		{ template = "XMLVirtualTemplateRow_ForEntryId", ... }
--			[lib.scrollListRowTypes.SUBMENU_ENTRY_ID] = { template = "XMLVirtualTemplateRow_ForSubmenuEntryId", ... },
--			...
--		}
--		table	narrate:optional				Table or function returning a table with key = narration event and value = function called for that narration event.
--												Each functions signature/parameters is shown below!
--												-> The function either builds your narrateString and narrates it in your addon.
--												   Or you must return a string as 1st return param (and optionally a boolean "stopCurrentNarration" as 2nd return param. If this is nil it will be set to false!)
--												    and let the library here narrate it for you via the UI narration
--												Optional narration events can be:
--												"OnDropdownMouseEnter" 	function(scrollhelperObject, dropdownControl)  Build your narrateString and narrate it now, or return a string and let the library narrate it for you end
--												"OnDropdownMouseExit"	function(scrollhelperObject, dropdownControl) end
--												"OnMenuShow"			function(scrollhelperObject, dropdownControl, nil, nil) end
--												"OnMenuHide"			function(scrollhelperObject, dropdownControl) end
--												"OnSubMenuShow"			function(scrollhelperObject, parentControl, anchorPoint) end
--												"OnSubMenuHide"			function(scrollhelperObject, parentControl) end
--												"OnEntryMouseEnter"		function(scrollhelperObject, entryControl, data, hasSubmenu) end
--												"OnEntryMouseExit"		function(scrollhelperObject, entryControl, data, hasSubmenu) end
--												"OnEntrySelected"		function(scrollhelperObject, entryControl, data, hasSubmenu) end
--												"OnCheckboxUpdated"		function(scrollhelperObject, checkboxControl, data) end
--			Example:	narrate = { ["OnDropdownMouseEnter"] = myAddonsNarrateDropdownOnMouseEnter, ... }
--  }

function AddCustomScrollableComboBoxDropdownMenu(parent, comboBoxControl, options)
Added new API functions to create the scrollable (nested) context menus at any control,like LibCustomMenu does.
API syntax:
Code:
Entry types:
LSM_ENTRY_TYPE_NORMAL 
LSM_ENTRY_TYPE_DIVIDER 
LSM_ENTRY_TYPE_HEADER
LSM_ENTRY_TYPE_CHECKBOX 


--Adds a new entry to the context menu entries with the shown text, which calls the callback function once clicked.
--If entries is provided the entry will be a submenu having those entries. The callback can only be used if entries are passed in
--but normally it should be nil in that case
function AddCustomScrollableMenuEntry(text, callback, entryType, entries, isNew)

--Adds an entry having a submenu (or maybe nested submenues) in the entries table
function AddCustomScrollableSubMenuEntry(text, entries)

--Adds a divider line to the context menu entries
function AddCustomScrollableMenuDivider()

--Pass in a table with predefined context menu entries and let them all be added in order of the table's number key
function AddCustomScrollableMenuEntries(contextMenuEntries)

--Set the options (visible rows max, etc.) for the scrollable context menu
function SetCustomScrollableMenuOptions(options)

--Add a new scrollable context menu with the defined entries table.
--You can add more entries later via AddCustomScrollableMenuEntry function too
function AddCustomScrollableMenu(entries, options)

--Show the custom scrollable context menu now
function ShowCustomScrollableMenu(controlToAnchorTo, options)

--Hide the custom scrollable context menu and clear internal variables, mouse clicks etc.
function ClearCustomScrollableMenu()
You can basically search & replace the first params of AddCustomMenuItem and AddCustomSubMenuItem with the
LibScrollableMenu's API functions AddCustomScrollableMenuEntry and AddCustomScrollableSubMenuEntry



GitHub
https://github.com/tomstock1337/eso-LibScrollableMenu
2.0 IsJustaGhost, Baertram - 2024-03-21
- Fixed: width update of entries (no abbreviated texts)
- Fixed: data.label (string or function returning a string)
- Fixed: SetTimeout menus opening/closing
- Added: Callback for dropdown menu added (pre-init!) "OnDropdownMenuAdded"


1.9 Baertram - 2024-03-11 - Compatible with API101041 "Scions of Ithelia"
!A very huge thanks to IsJustaGhost for all his work on recoding the total library to get it compatible with Scions of Ithelia!

-Made compatible with Scions of Ithelia
-Fixed several bugs

-> Attention: Some API functions for context menus changed in param/signature
Please check your addon's API function signature:
--AddCustomScrollableMenu(entries, options) -> Removed 1st param parentCtrl
--SetCustomScrollableMenuOptions(options) -> Removed 2nd param scrollHelper (maybe readded. currently this function will onyl work for ContextMenus. If you want to change the options of a dropdown, it's currently not possible anymore after creating the dropdown. We are working on an a way.
--ShowCustomScrollableMenu(controlToAnchorTo, options) -> Removed 2nd to 4th params controlToAnchorTo, point, relativePoint, offsetX, offsetY and replaced 2nd with options



-Added new dropdown options for the menus:
["font"] = "ESOFontNameHere" -- String or function returning a string: font to use for the dropdown entries
["spacing"] = 1, -- Number or function returning a Number : Spacing between the entries
["preshowDropdownFn"] = function(ctrl) end, --function to run before the dropdown shows

-> See documentation above API function AddCustomScrollableComboBoxDropdownMenu

1.8 Baertram - 2024-02-26 - Not compatible with API101041 "Scions of Ithelia"!
-Fixed ignoreCallback at menu entries without a callback function (not playing a sound on selection, not closing the menu/submenu on selection)
-Added data.enabled for the menu/submenu entries. If enabled == false, there won't be any selection highlight and clickable entry

1.7 IsJustaGhost & Baertram - 2024-01-12
Added new API functions to create the scrollable (nested) menus at any control as a context menu like LibCustomMenu does.

API syntax:
Code:
Entry types:
LSM_ENTRY_TYPE_NORMAL 
LSM_ENTRY_TYPE_DIVIDER 
LSM_ENTRY_TYPE_HEADER
LSM_ENTRY_TYPE_CHECKBOX 


--Adds a new entry to the context menu entries with the shown text, which calls the callback function once clicked.
--If entries is provided the entry will be a submenu having those entries. The callback can only be used if entries are passed in
--but normally it should be nil in that case
function AddCustomScrollableMenuEntry(text, callback, entryType, entries, isNew)

--Adds an entry having a submenu (or maybe nested submenues) in the entries table
function AddCustomScrollableSubMenuEntry(text, entries)

--Adds a divider line to the context menu entries
function AddCustomScrollableMenuDivider()

--Pass in a table with predefined context menu entries and let them all be added in order of the table's number key
function AddCustomScrollableMenuEntries(contextMenuEntries)

--Set the options (visible rows max, etc.) for the scrollable context menu
function SetCustomScrollableMenuOptions(options, scrollHelper)

--Add a new scrollable context menu with the defined entries table.
--You can add more entries later via AddCustomScrollableMenuEntry function too
function AddCustomScrollableMenu(parent, entries, options)

--Show the custom scrollable context menu now
function ShowCustomScrollableMenu(controlToAnchorTo, point, relativePoint, offsetX, offsetY, options)

--Hide the custom scrollable context menu and clear internal variables, mouse clicks etc.
function ClearCustomScrollableMenu()
You can basically search & replace the first params of AddCustomMenuItem and AddCustomSubMenuItem with the
LibScrollableMenu's API functions AddCustomScrollableMenuEntry and AddCustomScrollableSubMenuEntry


1.6 Baertram
Fixed main menu entry callbacks not firing anymore

1.5 Baertram (thanks to IsJustaGhost)
Changed hooks and fixed insecure error occurring at housing editor

1.4 Baertram (thanks to Dakjaniels)
Fixed XML resizeToFitDescendents error

1.3 Baertram
Fixed lua error onMouseEnter (narration related)

1.2 IsJustaGhost/Baertram
-Made compatible with API101040
-Many fixes and improvements
-Added features of LibCustomMenu (headers, dividers, checkboxes)
-Added support for UI narration (custom addon function called, either narrating itsself or returning a string to be narrated)

For developers: See Github repositorie's readm file for infos, and check the LSM_test.lua file for example code.

1.1
-API Bump
1.0
-Initial Version
Archived Files (10)
File Name
Version
Size
Uploader
Date
1.9
28kB
Baertram
03/11/24 03:10 AM
1.8
31kB
Baertram
02/26/24 03:42 AM
1.7
27kB
Baertram
01/11/24 06:09 PM
1.6
23kB
Baertram
12/10/23 11:26 AM
1.5
23kB
Baertram
12/09/23 06:05 PM
1.4
22kB
Baertram
11/13/23 02:59 PM
1.3
22kB
Baertram
10/31/23 04:15 AM
1.2
22kB
Baertram
10/30/23 03:56 AM
1.1
7kB
tomstock
03/19/23 02:51 PM
1.0
7kB
01/24/23 03:57 PM


Post A Reply Comment Options
Unread 01/25/23, 02:32 AM  
zelenin
AddOn Author - Click to view AddOns

Forum posts: 7
File comments: 192
Uploads: 12
but ESO UI has ZO_ScrollableComboBox already
Report comment to moderator  
Reply With Quote
Unread 03/04/23, 10:18 AM  
Kyoma
AddOn Author - Click to view AddOns

Forum posts: 125
File comments: 328
Uploads: 10
From what I remember I wrote this as a combination of ZO_ScrollableComboBox and LibCustomMenu so that the scrolling worked with submenus. I had planned to polish the code but due to me leaving the eso/addon scene that never happened.

Edit: Gonna look into the conflict with PixelPerfect (if I can get ESO at a resolution where that works as it should....)
Last edited by Kyoma : 03/04/23 at 10:31 AM.
Report comment to moderator  
Reply With Quote
Unread 03/21/23, 08:05 AM  
Baertram
Super Moderator
 
Baertram's Avatar
ESOUI Super Moderator
AddOn Author - Click to view AddOns

Forum posts: 4912
File comments: 5988
Uploads: 78
Wouldn't it be best to maybe add this directly to LibCustomMenu so there is 1 menu related addon / library only? Less compatibility issues, more benefit to all (imho).
Maybe talk to Votan and show him your code here, if this will work.
Report comment to moderator  
Reply With Quote
Unread 09/22/23, 01:45 PM  
Baertram
Super Moderator
 
Baertram's Avatar
ESOUI Super Moderator
AddOn Author - Click to view AddOns

Forum posts: 4912
File comments: 5988
Uploads: 78
Only working on Update 40 - PTS API 101040

If you have overriden a ZO_ComboBox's :AddMenuItems() function to add the entries new by using ZO_Menu (via ZOs default "AddMenuItem" or via LibCustomMenu using "AddCustomMenuItem" or even submenus via "AddCustomSubMenuItem"):
This won't work anymore on current PTS -> As ZO_ComboBox is a ZO_ScrollableMultiselectComboBox now which does not use ZO_Menu anymore!
-> Your box will be empty then.

If you only want some non-submenu entries in the combobox:
Do not override :AddMenuItems() and just do it the normal way. Your combobox will be scrollable by default now and will work well.

If you still want to use submenus: Instructions how to change your ZO_ComboBox to a scrollable list with submenus (scrollable too!)
Read here please:
https://github.com/Baertram/eso-LibScrollableMenu/tree/PTS40_majorversion_2-IsJustaGhost
readme.md

And/or check the file LSM_test.lua for code example of usage, menus and submenu entries.
Last edited by Baertram : 10/23/23 at 01:41 PM.
Report comment to moderator  
Reply With Quote
Unread 11/26/23, 07:29 AM  
ewscharf

Forum posts: 0
File comments: 7
Uploads: 0
This lib is causing a bug in Housing panel, Purchase menu, when we try to filter items by theme.

Error code: E9F0F69D

Code:
/EsoUI/Ingame/HousingEditor/FurnitureClasses_Shared.lua:650: Attempt to access a private function 'GetMarketProductPricingByPresentation' from insecure code. The callstack became untrusted 28 stack frame(s) from the top.
stack traceback:
/EsoUI/Ingame/HousingEditor/FurnitureClasses_Shared.lua:650: in function 'ZO_HousingMarketProduct:GetMarketProductPricingByPresentation'
	<Locals> self = [table:1]{quality = 3, displayQuality = 3, theme = 11, discountPercent = 0, limitType = 0, formattedName = "Leyawiin Windowbox, Irises", onSale = F, categoryId = 12, sortIndex = 1, isNew = F, subcategoryId = 111, furnitureDataId = 7839, currencyType = 1, costAfterDiscount = 55, displayState = 0, cost = 55, isFree = F, rawName = "Leyawiin Windowbox, Irises", marketProductId = 10545, passesTextFilter = T, icon = "/esoui/art/icons/housing_bad_s...", presentationIndex = 1} </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/HousingFurnitureProducts_Keyboard.lua:174: in function 'ZO_HousingFurnitureProducts_Keyboard:SetupMarketProductFurnitureRow'
	<Locals> self = [table:2]{childlessCategoryTemplate = "ZO_FurnitureBrowserChildless", numSlots = 156, subCategoryTemplate = "ZO_FurnitureBrowserSubCategory...", fireCallbackDepth = 0, numUsedSlots = 95, parentCategoryTemplate = "ZO_FurnitureBrowserCategory"}, rowControl = ud, marketProductFurnitureObject = [table:1], canBePurchased = T, nameColorR = 0.22745099663734, nameColorG = 0.57254904508591, nameColorB = 1, currencyColorR = 1, currencyColorG = 1, currencyColorB = 1, iconDesaturation = 0 </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/HousingFurnitureProducts_Keyboard.lua:139: in function 'setupCallback'
/EsoUI/Libraries/ZO_Templates/ScrollTemplates.lua:2463: in function 'ZO_ScrollList_UpdateScroll'
	<Locals> self = ud, windowHeight = 594, activeControls = [table:3]{}, offset = 0, IS_REAL_NUMBER = F, activeIndex = 1, numActive = 0, allData = [table:4]{}, visibleDataIndices = [table:5]{1 = 1}, mode = 1, firstInViewVisibleIndex = 1, nextCandidateVisibleIndex = 1, currentDataIndex = 1, dataEntry = [table:6]{typeId = 8}, bottomEdge = 594, controlTop = 0, uniformControlHeight = 52, dataType = [table:7]{height = 52, selectable = T}, controlPool = [table:8]{m_NextFree = 29, m_NextControlId = 28}, control = ud </Locals>
/EsoUI/Libraries/ZO_Templates/ScrollTemplates.lua:2219: in function 'ZO_ScrollList_Commit'
	<Locals> self = ud, windowHeight = 594, selectionsEnabled = T, scrollableDistance = -490, foundSelected = F, i = 0 </Locals>
/EsoUI/Libraries/ZO_SortFilterList/ZO_SortFilterList.lua:154: in function 'ZO_SortFilterList:CommitScrollList'
	<Locals> self = [table:9]{automaticallyColorRows = T}, scrollData = [table:4] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:438: in function 'ZO_HousingFurnitureList:ContentsCommitScrollList'
	<Locals> self = [table:2] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:348: in function 'CommitScrollList'
/EsoUI/Libraries/ZO_SortFilterList/ZO_SortFilterList.lua:137: in function 'ZO_SortFilterList:RefreshData'
	<Locals> self = [table:9] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:408: in function 'ZO_HousingFurnitureList:OnCategorySelected'
	<Locals> self = [table:2], data = [table:10]{categoryId = 111, name = "Flowers (2)", isFakedSubcategory = F, pressedIcon = "/esoui/art/icons/icon_missing....", normalIcon = "/esoui/art/icons/icon_missing....", mouseoverIcon = "/esoui/art/icons/icon_missing...."} </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:255: in function 'TreeEntryOnSelected'
	<Locals> control = ud, data = [table:10], selected = T </Locals>
/EsoUI/Libraries/ZO_Tree/ZO_Tree.lua:732: in function 'ZO_TreeNode:OnSelected'
	<Locals> self = [table:11]{childSpacing = -10, openPercentage = 0, selected = F, childrenHeight = 0, open = F, selectSound = "Click_TreeSubcategory", enabled = T, childrenCurrentHeight = 0, childIndent = 60} </Locals>
/EsoUI/Libraries/ZO_Tree/ZO_Tree.lua:441: in function 'ZO_Tree:SelectNode'
	<Locals> self = [table:12]{suspendAnimations = T, defaultSpacing = -10, enabled = T, exclusive = T, defaultIndent = 60, width = 310, openAnimationDurationMS = 300, autoSelectChildOnNodeOpen = F}, treeNode = [table:11], bringParentIntoView = T </Locals>
/EsoUI/Libraries/ZO_Tree/ZO_Tree.lua:103: in function 'ZO_Tree:SelectAnything'
	<Locals> self = [table:12], currentNode = [table:11] </Locals>
/EsoUI/Libraries/ZO_Tree/ZO_Tree.lua:238: in function 'ZO_Tree:Commit'
	<Locals> self = [table:12] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:165: in function 'ZO_HousingBrowserList:BuildCategories'
	<Locals> self = [table:2], currentSelectedData = [table:13]{categoryId = 182, name = "Music Boxes (1)", isFakedSubcategory = F, pressedIcon = "/esoui/art/icons/icon_missing....", normalIcon = "/esoui/art/icons/icon_missing....", mouseoverIcon = "/esoui/art/icons/icon_missing...."}, hasCategory = T, categoryTreeData = [table:14]{rootCategoryName = "market"} </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:403: in function 'ZO_HousingFurnitureList:BuildCategories'
	<Locals> self = [table:2] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:390: in function 'ZO_HousingFurnitureList:UpdateLists'
	<Locals> self = [table:2] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/HousingFurnitureBrowser_Keyboard.lua:107: in function 'ZO_HousingFurnitureBrowser_Keyboard:UpdateProductsPanel'
	<Locals> self = [table:15]{productListDirty = F, retrievableListDirty = F, isInitialized = T, mode = 2, placeableListDirty = F, retrievableListHeadingsDirty = F, retrievableListDistancesDirty = F} </Locals>
/EsoUI/Ingame/HousingEditor/HousingFurnitureBrowser_Base.lua:61: in function 'callback'
/EsoUI/Libraries/Utility/ZO_CallbackObject.lua:132: in function 'ZO_CallbackObjectMixin:FireCallbacks'
	<Locals> self = [table:16]{fireCallbackDepth = 28, retrievableFurnitureLimitFilters = 64, lastPlayerWorldX = 24421, retrievableFurnitureBoundFilters = 0, placementFurnitureLimitFilters = 64, placementFurnitureLocationFilters = 1, placeableTextFilter = "", purchaseFurnitureTheme = 11, lastPlayerHeading = 2.9384787082672, isPlaceableFiltered = F, retrievableTextFilter = "", isMarketFiltered = T, marketProductTextFilter = "", lastPlayerWorldZ = 24924, placementFurnitureTheme = 0, lastPlayerWorldY = 13167, placementFurnitureBoundFilters = 0, isRetrievableFiltered = F}, eventName = "MarketProductsChanged", registry = [table:17]{}, callbackInfoIndex = 1, callbackInfo = [table:18]{4 = F}, callback = /EsoUI/Ingame/HousingEditor/HousingFurnitureBrowser_Base.lua:59, deleted = F </Locals>
/EsoUI/Ingame/HousingEditor/FurnitureManager_Shared.lua:1021: in function 'ZO_SharedFurnitureManager:OnPurchaseFiltersChanged'
	<Locals> self = [table:16] </Locals>
/EsoUI/Ingame/HousingEditor/FurnitureManager_Shared.lua:1027: in function 'ZO_SharedFurnitureManager:SetPurchaseFurnitureTheme'
	<Locals> self = [table:16], theme = 11 </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/HousingFurnitureProducts_Keyboard.lua:80: in function 'OnThemeChanged'
	<Locals> comboBox = [table:19]{m_nextScrollTypeId = 3, currentSelectedItemText = "Imperial", m_enableMultiSelect = F, m_sortOrder = T, m_height = 250, m_isDropdownVisible = T, m_sortsItems = F, horizontalAlignment = 0, m_containerWidth = 200, m_spacing = 4, m_name = "ZO_HousingFurnitureProductsPan...", m_font = "ZoFontWinT1"}, entryText = "Imperial", entry = [table:20]{name = "Imperial", furnitureTheme = 11, m_index = 12, enabled = T} </Locals>
/EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox_Base.lua:237: in function 'ZO_ComboBox_Base:ItemSelectedClickHelper'
	<Locals> self = [table:19], item = [table:20], oldItem = [table:21]{name = "Daedric", furnitureTheme = 13, m_index = 14, enabled = T}, selectionChanged = T </Locals>
(tail call): ?
/EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox.lua:433: in function 'ZO_ComboBox:SelectItem'
	<Locals> self = [table:19], item = [table:20] </Locals>
/EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox.lua:263: in function 'ZO_ComboBox:SetSelected'
	<Locals> self = [table:19], index = 12, item = [table:20] </Locals>
/EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox.lua:496: in function 'ZO_ComboBox_Entry_OnSelected'
	<Locals> control = ud, comboBox = [table:19] </Locals>
ZO_HousingFurnitureProductsPanel_KeyboardTopLevelContentsThemeDropdownDropdownScroll1Row1_MouseUp:4: in function '(main chunk)'
	<Locals> self = ud, button = 1, upInside = T, ctrl = F, alt = F, shift = F, command = F </Locals>
Works fine on Inventory though.
Report comment to moderator  
Reply With Quote
Unread 11/27/23, 03:50 AM  
Baertram
Super Moderator
 
Baertram's Avatar
ESOUI Super Moderator
AddOn Author - Click to view AddOns

Forum posts: 4912
File comments: 5988
Uploads: 78
Hi, thanks for the info but where do you see that its this lib causing it? ZO_combobox was changed during last U40 update by ZOs and maybe it's any addon still hooking into them inproperly.

Could you please tell me the steps to reproduce this error with only this library enabled (no other addons) and then from login/reloadui in simple steps (where to port, what do open by keybind/click, and where to click then) to get to that error message.

Or do we need to enable any particular housing related addons to see this bug? Which one then, and how to configure it + the steps ike descried above to the error then.

Thanks for that additional info.

Originally Posted by ewscharf
This lib is causing a bug in Housing panel, Purchase menu, when we try to filter items by theme.

Error code: E9F0F69D

Code:
/EsoUI/Ingame/HousingEditor/FurnitureClasses_Shared.lua:650: Attempt to access a private function 'GetMarketProductPricingByPresentation' from insecure code. The callstack became untrusted 28 stack frame(s) from the top.
stack traceback:
/EsoUI/Ingame/HousingEditor/FurnitureClasses_Shared.lua:650: in function 'ZO_HousingMarketProduct:GetMarketProductPricingByPresentation'
	<Locals> self = [table:1]{quality = 3, displayQuality = 3, theme = 11, discountPercent = 0, limitType = 0, formattedName = "Leyawiin Windowbox, Irises", onSale = F, categoryId = 12, sortIndex = 1, isNew = F, subcategoryId = 111, furnitureDataId = 7839, currencyType = 1, costAfterDiscount = 55, displayState = 0, cost = 55, isFree = F, rawName = "Leyawiin Windowbox, Irises", marketProductId = 10545, passesTextFilter = T, icon = "/esoui/art/icons/housing_bad_s...", presentationIndex = 1} </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/HousingFurnitureProducts_Keyboard.lua:174: in function 'ZO_HousingFurnitureProducts_Keyboard:SetupMarketProductFurnitureRow'
	<Locals> self = [table:2]{childlessCategoryTemplate = "ZO_FurnitureBrowserChildless", numSlots = 156, subCategoryTemplate = "ZO_FurnitureBrowserSubCategory...", fireCallbackDepth = 0, numUsedSlots = 95, parentCategoryTemplate = "ZO_FurnitureBrowserCategory"}, rowControl = ud, marketProductFurnitureObject = [table:1], canBePurchased = T, nameColorR = 0.22745099663734, nameColorG = 0.57254904508591, nameColorB = 1, currencyColorR = 1, currencyColorG = 1, currencyColorB = 1, iconDesaturation = 0 </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/HousingFurnitureProducts_Keyboard.lua:139: in function 'setupCallback'
/EsoUI/Libraries/ZO_Templates/ScrollTemplates.lua:2463: in function 'ZO_ScrollList_UpdateScroll'
	<Locals> self = ud, windowHeight = 594, activeControls = [table:3]{}, offset = 0, IS_REAL_NUMBER = F, activeIndex = 1, numActive = 0, allData = [table:4]{}, visibleDataIndices = [table:5]{1 = 1}, mode = 1, firstInViewVisibleIndex = 1, nextCandidateVisibleIndex = 1, currentDataIndex = 1, dataEntry = [table:6]{typeId = 8}, bottomEdge = 594, controlTop = 0, uniformControlHeight = 52, dataType = [table:7]{height = 52, selectable = T}, controlPool = [table:8]{m_NextFree = 29, m_NextControlId = 28}, control = ud </Locals>
/EsoUI/Libraries/ZO_Templates/ScrollTemplates.lua:2219: in function 'ZO_ScrollList_Commit'
	<Locals> self = ud, windowHeight = 594, selectionsEnabled = T, scrollableDistance = -490, foundSelected = F, i = 0 </Locals>
/EsoUI/Libraries/ZO_SortFilterList/ZO_SortFilterList.lua:154: in function 'ZO_SortFilterList:CommitScrollList'
	<Locals> self = [table:9]{automaticallyColorRows = T}, scrollData = [table:4] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:438: in function 'ZO_HousingFurnitureList:ContentsCommitScrollList'
	<Locals> self = [table:2] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:348: in function 'CommitScrollList'
/EsoUI/Libraries/ZO_SortFilterList/ZO_SortFilterList.lua:137: in function 'ZO_SortFilterList:RefreshData'
	<Locals> self = [table:9] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:408: in function 'ZO_HousingFurnitureList:OnCategorySelected'
	<Locals> self = [table:2], data = [table:10]{categoryId = 111, name = "Flowers (2)", isFakedSubcategory = F, pressedIcon = "/esoui/art/icons/icon_missing....", normalIcon = "/esoui/art/icons/icon_missing....", mouseoverIcon = "/esoui/art/icons/icon_missing...."} </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:255: in function 'TreeEntryOnSelected'
	<Locals> control = ud, data = [table:10], selected = T </Locals>
/EsoUI/Libraries/ZO_Tree/ZO_Tree.lua:732: in function 'ZO_TreeNode:OnSelected'
	<Locals> self = [table:11]{childSpacing = -10, openPercentage = 0, selected = F, childrenHeight = 0, open = F, selectSound = "Click_TreeSubcategory", enabled = T, childrenCurrentHeight = 0, childIndent = 60} </Locals>
/EsoUI/Libraries/ZO_Tree/ZO_Tree.lua:441: in function 'ZO_Tree:SelectNode'
	<Locals> self = [table:12]{suspendAnimations = T, defaultSpacing = -10, enabled = T, exclusive = T, defaultIndent = 60, width = 310, openAnimationDurationMS = 300, autoSelectChildOnNodeOpen = F}, treeNode = [table:11], bringParentIntoView = T </Locals>
/EsoUI/Libraries/ZO_Tree/ZO_Tree.lua:103: in function 'ZO_Tree:SelectAnything'
	<Locals> self = [table:12], currentNode = [table:11] </Locals>
/EsoUI/Libraries/ZO_Tree/ZO_Tree.lua:238: in function 'ZO_Tree:Commit'
	<Locals> self = [table:12] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:165: in function 'ZO_HousingBrowserList:BuildCategories'
	<Locals> self = [table:2], currentSelectedData = [table:13]{categoryId = 182, name = "Music Boxes (1)", isFakedSubcategory = F, pressedIcon = "/esoui/art/icons/icon_missing....", normalIcon = "/esoui/art/icons/icon_missing....", mouseoverIcon = "/esoui/art/icons/icon_missing...."}, hasCategory = T, categoryTreeData = [table:14]{rootCategoryName = "market"} </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:403: in function 'ZO_HousingFurnitureList:BuildCategories'
	<Locals> self = [table:2] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/FurnitureClasses_Keyboard.lua:390: in function 'ZO_HousingFurnitureList:UpdateLists'
	<Locals> self = [table:2] </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/HousingFurnitureBrowser_Keyboard.lua:107: in function 'ZO_HousingFurnitureBrowser_Keyboard:UpdateProductsPanel'
	<Locals> self = [table:15]{productListDirty = F, retrievableListDirty = F, isInitialized = T, mode = 2, placeableListDirty = F, retrievableListHeadingsDirty = F, retrievableListDistancesDirty = F} </Locals>
/EsoUI/Ingame/HousingEditor/HousingFurnitureBrowser_Base.lua:61: in function 'callback'
/EsoUI/Libraries/Utility/ZO_CallbackObject.lua:132: in function 'ZO_CallbackObjectMixin:FireCallbacks'
	<Locals> self = [table:16]{fireCallbackDepth = 28, retrievableFurnitureLimitFilters = 64, lastPlayerWorldX = 24421, retrievableFurnitureBoundFilters = 0, placementFurnitureLimitFilters = 64, placementFurnitureLocationFilters = 1, placeableTextFilter = "", purchaseFurnitureTheme = 11, lastPlayerHeading = 2.9384787082672, isPlaceableFiltered = F, retrievableTextFilter = "", isMarketFiltered = T, marketProductTextFilter = "", lastPlayerWorldZ = 24924, placementFurnitureTheme = 0, lastPlayerWorldY = 13167, placementFurnitureBoundFilters = 0, isRetrievableFiltered = F}, eventName = "MarketProductsChanged", registry = [table:17]{}, callbackInfoIndex = 1, callbackInfo = [table:18]{4 = F}, callback = /EsoUI/Ingame/HousingEditor/HousingFurnitureBrowser_Base.lua:59, deleted = F </Locals>
/EsoUI/Ingame/HousingEditor/FurnitureManager_Shared.lua:1021: in function 'ZO_SharedFurnitureManager:OnPurchaseFiltersChanged'
	<Locals> self = [table:16] </Locals>
/EsoUI/Ingame/HousingEditor/FurnitureManager_Shared.lua:1027: in function 'ZO_SharedFurnitureManager:SetPurchaseFurnitureTheme'
	<Locals> self = [table:16], theme = 11 </Locals>
/EsoUI/Ingame/HousingEditor/Keyboard/HousingFurnitureProducts_Keyboard.lua:80: in function 'OnThemeChanged'
	<Locals> comboBox = [table:19]{m_nextScrollTypeId = 3, currentSelectedItemText = "Imperial", m_enableMultiSelect = F, m_sortOrder = T, m_height = 250, m_isDropdownVisible = T, m_sortsItems = F, horizontalAlignment = 0, m_containerWidth = 200, m_spacing = 4, m_name = "ZO_HousingFurnitureProductsPan...", m_font = "ZoFontWinT1"}, entryText = "Imperial", entry = [table:20]{name = "Imperial", furnitureTheme = 11, m_index = 12, enabled = T} </Locals>
/EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox_Base.lua:237: in function 'ZO_ComboBox_Base:ItemSelectedClickHelper'
	<Locals> self = [table:19], item = [table:20], oldItem = [table:21]{name = "Daedric", furnitureTheme = 13, m_index = 14, enabled = T}, selectionChanged = T </Locals>
(tail call): ?
/EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox.lua:433: in function 'ZO_ComboBox:SelectItem'
	<Locals> self = [table:19], item = [table:20] </Locals>
/EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox.lua:263: in function 'ZO_ComboBox:SetSelected'
	<Locals> self = [table:19], index = 12, item = [table:20] </Locals>
/EsoUI/Libraries/ZO_ComboBox/ZO_ComboBox.lua:496: in function 'ZO_ComboBox_Entry_OnSelected'
	<Locals> control = ud, comboBox = [table:19] </Locals>
ZO_HousingFurnitureProductsPanel_KeyboardTopLevelContentsThemeDropdownDropdownScroll1Row1_MouseUp:4: in function '(main chunk)'
	<Locals> self = ud, button = 1, upInside = T, ctrl = F, alt = F, shift = F, command = F </Locals>
Works fine on Inventory though.
Last edited by Baertram : 11/27/23 at 03:51 AM.
Report comment to moderator  
Reply With Quote
Unread 11/29/23, 04:27 PM  
ewscharf

Forum posts: 0
File comments: 7
Uploads: 0
Originally Posted by Baertram
Hi, thanks for the info but where do you see that its this lib causing it? ZO_combobox was changed during last U40 update by ZOs and maybe it's any addon still hooking into them inproperly.

Could you please tell me the steps to reproduce this error with only this library enabled (no other addons) and then from login/reloadui in simple steps (where to port, what do open by keybind/click, and where to click then) to get to that error message.

Or do we need to enable any particular housing related addons to see this bug? Which one then, and how to configure it + the steps ike descried above to the error then.

Thanks for that additional info.
Hi o/

I disabled all my addons and left only this one enabled (I even created a new addons folder and started the game again with only LibScrollableMenu there to be loaded).

I tested it in more than 5 houses, from Pilgrim's Rest to Mathiisen Manor. I go into Housing Editor mode (key F5), and open the Housing panel (key R), then I click the Purchase menu. There I can navigate the left menu like usual (Services, Dining, Suite, etc), but if I try to use the dropdown-menu (at right top corner) to select a theme, as soon I chose any theme the UI Error panel will show the error. And the list of items will become messy.

Thanks!

Edit: When we open the Housing panel, we start at "Place" window, where we have a list of our items to use. The dropdown-menu to filter themes is also there, but it works fine. Only in the store window the bug happens.
Last edited by ewscharf : 11/29/23 at 04:40 PM.
Report comment to moderator  
Reply With Quote
Unread 11/30/23, 03:56 AM  
Baertram
Super Moderator
 
Baertram's Avatar
ESOUI Super Moderator
AddOn Author - Click to view AddOns

Forum posts: 4912
File comments: 5988
Uploads: 78
Thanks for the details, that's very appreciated!
We'll have a look how and where that could happen. Guess the lib hooks into some ZO_ function too early then.

Originally Posted by ewscharf
Originally Posted by Baertram
Hi, thanks for the info but where do you see that its this lib causing it? ZO_combobox was changed during last U40 update by ZOs and maybe it's any addon still hooking into them inproperly.

Could you please tell me the steps to reproduce this error with only this library enabled (no other addons) and then from login/reloadui in simple steps (where to port, what do open by keybind/click, and where to click then) to get to that error message.

Or do we need to enable any particular housing related addons to see this bug? Which one then, and how to configure it + the steps ike descried above to the error then.

Thanks for that additional info.
Hi o/

I disabled all my addons and left only this one enabled (I even created a new addons folder and started the game again with only LibScrollableMenu there to be loaded).

I tested it in more than 5 houses, from Pilgrim's Rest to Mathiisen Manor. I go into Housing Editor mode (key F5), and open the Housing panel (key R), then I click the Purchase menu. There I can navigate the left menu like usual (Services, Dining, Suite, etc), but if I try to use the dropdown-menu (at right top corner) to select a theme, as soon I chose any theme the UI Error panel will show the error. And the list of items will become messy.

Thanks!

Edit: When we open the Housing panel, we start at "Place" window, where we have a list of our items to use. The dropdown-menu to filter themes is also there, but it works fine. Only in the store window the bug happens.
Report comment to moderator  
Reply With Quote
Unread 12/01/23, 08:33 AM  
Baertram
Super Moderator
 
Baertram's Avatar
ESOUI Super Moderator
AddOn Author - Click to view AddOns

Forum posts: 4912
File comments: 5988
Uploads: 78
Check your PM here please for a test BETA version, hope it works for you.
Report comment to moderator  
Reply With Quote
Unread 12/01/23, 07:32 PM  
ewscharf

Forum posts: 0
File comments: 7
Uploads: 0
Originally Posted by Baertram
Check your PM here please for a test BETA version, hope it works for you.
It's perfect. Thank you so much!
Report comment to moderator  
Reply With Quote
Unread 12/02/23, 07:53 AM  
Baertram
Super Moderator
 
Baertram's Avatar
ESOUI Super Moderator
AddOn Author - Click to view AddOns

Forum posts: 4912
File comments: 5988
Uploads: 78
Originally Posted by ewscharf
Originally Posted by Baertram
Check your PM here please for a test BETA version, hope it works for you.
It's perfect. Thank you so much!
Thanks for the test. Credits of the fix go to IsJustaGhost
Last edited by Baertram : 12/02/23 at 07:53 AM.
Report comment to moderator  
Reply With Quote
Unread 12/10/23, 04:07 AM  
Smugger21
 
Smugger21's Avatar
AddOn Author - Click to view AddOns

Forum posts: 4
File comments: 23
Uploads: 1
Update causes Advanced Filters to stop working

So I did all the testing I could and finally figured out which addon caused the issue.

This recent update causes the Built-In Advanced Filters menu items to stop working, however the Custom Advanced Filter Plugin I made still works (It sorts based on TTC Prices, I have not uploaded it yet, it is something my wife and I use), some of the other Custom Plugin Filters also stopped working, some still do but none of the Built-In AF filters worked.

Reverting back to version 1.4 of this Lib and it is now working again.

If you need me to send you my custom plugin that still works with the update, let me know.
I guess it seems odd that some of plugins work but Built-In functions of AF do not.

Note that no Error actually occurs, it just fails.

Also another note, if I try to change the filter back to "All" after changing it to something that did not work, and I try to switch to any other normal in-game Filter or Sub-Filter (EG From Weapons to Armor or Even inside Armor > Light to Medium) that when I switch back to the In-Game Filter/Sub-Filter that I had change the AF on, it is back to the last failed filter setting.

So here to be more specific, I have a bunch of Consumables in my Junk, if I switch to the In-Game Sub-Filter under Junk to Consumables, and switch it to "Crafted" it does not work, and then when I switch it back to "All" (which actually fails also) and switch to the All Junk Sub-Filter, and go back to the Consumables Sub-Filter, the AF is set back to "Crafted".

Hope this helps in understanding what is going on...
I have reverted back to 1.4 for now.
Last edited by Smugger21 : 12/10/23 at 04:12 AM.
Report comment to moderator  
Reply With Quote
Unread 12/10/23, 06:33 AM  
Baertram
Super Moderator
 
Baertram's Avatar
ESOUI Super Moderator
AddOn Author - Click to view AddOns

Forum posts: 4912
File comments: 5988
Uploads: 78
Re: Update causes Advanced Filters to stop working

Hi, by not working you mean what exactly? Entries in teh dropdown filterboxes are missing in total? Clicking the entries does nothing?
Any Screenshots to explain more?

The filter dropdown does show the filters, like level filter, for me properly.
Clicking one level range in the submenu does not filter anything then for you?

Did you test to disable ALL other addons AND AF filter dropdown plugins and only run AF alone?

Which other AF plugins do you use and which do not work, and which work?
If you disable your local AF plugin, does it work then?

Thank you

Edit:
Seems that the callbacks of the filters do not work if they are "no submenu". As "Filters" -> 1 to 10 works, but others like "Heal staff" does not.
On it

Originally Posted by Smugger21
So I did all the testing I could and finally figured out which addon caused the issue.

This recent update causes the Built-In Advanced Filters menu items to stop working, however the Custom Advanced Filter Plugin I made still works (It sorts based on TTC Prices, I have not uploaded it yet, it is something my wife and I use), some of the other Custom Plugin Filters also stopped working, some still do but none of the Built-In AF filters worked.

Reverting back to version 1.4 of this Lib and it is now working again.

If you need me to send you my custom plugin that still works with the update, let me know.
I guess it seems odd that some of plugins work but Built-In functions of AF do not.

Note that no Error actually occurs, it just fails.

Also another note, if I try to change the filter back to "All" after changing it to something that did not work, and I try to switch to any other normal in-game Filter or Sub-Filter (EG From Weapons to Armor or Even inside Armor > Light to Medium) that when I switch back to the In-Game Filter/Sub-Filter that I had change the AF on, it is back to the last failed filter setting.

So here to be more specific, I have a bunch of Consumables in my Junk, if I switch to the In-Game Sub-Filter under Junk to Consumables, and switch it to "Crafted" it does not work, and then when I switch it back to "All" (which actually fails also) and switch to the All Junk Sub-Filter, and go back to the Consumables Sub-Filter, the AF is set back to "Crafted".

Hope this helps in understanding what is going on...
I have reverted back to 1.4 for now.
Last edited by Baertram : 12/10/23 at 09:39 AM.
Report comment to moderator  
Reply With Quote
Unread 12/10/23, 10:27 AM  
Baertram
Super Moderator
 
Baertram's Avatar
ESOUI Super Moderator
AddOn Author - Click to view AddOns

Forum posts: 4912
File comments: 5988
Uploads: 78
Think I found out what is happening and was able to fix it.
Last edited by Baertram : 12/10/23 at 11:27 AM.
Report comment to moderator  
Reply With Quote
Unread 12/10/23, 07:12 PM  
Smugger21
 
Smugger21's Avatar
AddOn Author - Click to view AddOns

Forum posts: 4
File comments: 23
Uploads: 1
Re: Re: Update causes Advanced Filters to stop working

Originally Posted by Baertram
Hi, by not working you mean what exactly? Entries in teh dropdown filterboxes are missing in total? Clicking the entries does nothing?
Any Screenshots to explain more?
Sorry, I guess I was not entirely clear, it seems to be that items in the menu when clicked on are not having their event/function fired off.
And when I woke up I just realized that the menu items that didn't work were on the main menu and things that did work were in Sub-Menus.


Originally Posted by Baertram
The filter dropdown does show the filters, like level filter, for me properly.
Clicking one level range in the submenu does not filter anything then for you?
It is displayed, it just does not fire the event it is supposed to I guess

Originally Posted by Baertram
Edit:
Seems that the callbacks of the filters do not work if they are "no submenu". As "Filters" -> 1 to 10 works, but others like "Heal staff" does not.
On it
LOL I just seen this edit as I was replying and yup, that is what seems to be the issue.

Originally Posted by Baertram
Think I found out what is happening and was able to fix it.
I see you put out an update, I will check to see if it is fixed now.
EDIT: Yup, seems to be good, everything seems to be working correctly again with this update!

Thank You.
Last edited by Smugger21 : 12/10/23 at 07:30 PM.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: