It is beyond the scope of this chapter to discuss resizing of widget interfaces in general; see Widget Sizing for a discussion of widget sizing issues. This section describes some things you will need to know in order to make your custom iTool widget interface resize properly.
If you want users to be able to resize the custom iTool interface you are creating, you must set the TLB_SIZE_EVENTS keyword when creating the top-level widget base that holds your interface. With this keyword set, when the user resizes the top-level base, a WIDGET_BASE event is generated, reporting the new width and height of the base widget.
The technique used by the standard iTool widget interface to handle resize events for the top-level base involves storing the current size of the base widget in the widget's state structure. The state structure is available to widget event handling and callback routines in the user value of the first child widget of the top-level base.
The following code, from the event handling routine in the
example2_wdtool.pro interface definition (developed in Example: a Custom iTool Interface), uses the value stored in the
basesize field of the state structure, along with the new size of the base widget, to calculate the change in the size of the base. The changes in the size are then passed as arguments to the EXAMPLE2_WDTOOL_RESIZE routine, which handles the actual resizing of the interface elements.
; The top-level base was resized 'WIDGET_BASE': BEGIN ; Compute the size change of the base relative to ; its cached former size. WIDGET_CONTROL, event.top, TLB_GET_SIZE = newSize deltaW = newSize - (*pState).basesize deltaH = newSize - (*pState).basesize example2_wdtool_resize, pState, deltaW, deltaH END
Writing a resizing routine for your custom iTool user interface may be the most complicated part of the task. Each interface is different, and resize events must be handled based on the layout and desired behavior of the interface. Aside from the techniques discussed in Widget Sizing, keep the following in mind when writing your resizing routine: