11.5. Resizing Menus to Fit Their Contents
Problem
You want to adjust the width of a menu to accommodate the widest menu item.
Solution
Create and invoke a
custom adjustWidth( )
method.
Discussion
Both combo boxes and list boxes default to a width of 100 pixels, and
they do not automatically resize to fit their contents when you
populate them. Therefore, the text of menu items wider than 100
pixels is cut off. Although the menu components offer no documented
means of adjusting the width to fit the contents, there are several
undocumented properties you can use to create a custom method that
sizes the menus appropriately. Menu components (list boxes and combo
boxes) are subclasses of FSelectableListClass.
Therefore, if you add a custom adjustWidth( )
method to FSelectableListClass, it is
accessible to both list boxes and combo boxes.
Furthermore, all objects derived from
FSelectableListClass have three undocumented
properties that are valuable in calculating the necessary width to
accommodate all the menu items:
-
labels An array of string values displayed in the menu when the menu is populated from the Parameters panel at authoring time.
-
dataprovider A reference to a
DataProviderobject that is created when the menu is populated at runtime by thesetDataProvider( )method. It has anitemsproperty that is an array of objects withlabelproperties (yielding the needed string values).-
textstyle A reference to the
TextFormatobject used to format the menu items.
You can use these properties ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access