There are numerous ways to supply help and feedback to users of a widget application without the need to display a help file in an external window. The following techniques can augment, if not necessarily replace, a more complete online help file.
Tooltips
Tooltips are short text strings that appear when the mouse cursor is positioned over a button or draw widget for a few seconds. Often a tooltip is enough to remind a user of the function of a button, eliminating the need for the user to consult more extensive documentation.
Tooltips are created by specifying a text string as the value of the TOOLTIP keyword to the WIDGET_BUTTON function:
DoneButton = WIDGET_BUTTON(base, VALUE='Done', $
TOOLTIP='Click here to close the application')
Note: Draw widgets can also display tooltips.
Status Lines
You can give users feedback about the status of an operation or the function of an interface element by updating a status line included in your widget interface. Status lines are generally located at the bottom of the interface, and can be updated as the user moves the mouse cursor over interface elements or as the status of the application changes.
The following example demonstrates how a status line can be updated as the mouse cursor moves over a set of buttons. Similar code could update the value of the label widget as other events occur. To view the results, paste the code into an IDL editor window and save it as label_update.pro, then compile and run.
PRO label_update_event, ev
IF (TAG_NAMES(ev, /STRUCTURE) EQ 'WIDGET_TRACKING') THEN BEGIN
WIDGET_CONTROL, ev.TOP, GET_UVALUE=label
WIDGET_CONTROL, ev.ID, GET_VALUE=val, GET_UVALUE=uval
WIDGET_CONTROL, label, SET_VALUE=uval
WIDGET_CONTROL, label, SET_VALUE=uval
ENDIF
IF (TAG_NAMES(ev, /STRUCTURE) EQ 'WIDGET_BUTTON') THEN BEGIN
WIDGET_CONTROL, ev.ID, GET_VALUE=val
IF (val EQ 'Button 2') THEN WIDGET_CONTROL, ev.TOP, /DESTROY
ENDIF
END
PRO label_update
base=WIDGET_BASE(/COLUMN, XSIZE=200)
b1 = WIDGET_BUTTON(base, VALUE='Button 1', $
UVALUE='Button One does nothing', /TRACKING_EVENTS)
b2 = WIDGET_BUTTON(base, VALUE='Button 2', $
UVALUE='Button Two closes the application', /TRACKING_EVENTS)
label = WIDGET_LABEL(base, XSIZE=190, /SUNKEN_FRAME)
WIDGET_CONTROL, base, SET_UVALUE=label
WIDGET_CONTROL, base, /REALIZE
XMANAGER, 'label_update', base
END
Text Widgets
To display larger amounts of text than will fit conveniently in a status line, you can include a text widget in your application’s interface. The process of updating the text widget’s value depending on user actions is similar to the process described in the status line example, above.
To display larger blocks of text that would not fit conveniently within the body of your application’s interface, consider using the XDISPLAYFILE procedure.