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 DataProvider object that is created when the menu is populated at runtime by the setDataProvider( ) method. It has an items property that is an array of objects with label properties (yielding the needed string values).

textstyle

A reference to the TextFormat object used to format the menu items.

You can use these properties ...

Get Actionscript Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.