# Catalyst Source-Widgets Directory On-Line Help

This page was created by the IDL library routine `mk_html_help`. For more information on this routine, refer to the IDL Online Help Navigator or type:

         ? mk_html_help

at the IDL command line prompt.

Last modified: Sun Oct 26 20:43:12 2008.

# List of Routines

- BASEWIDGET
- BASEWIDGET::ADD
- BASEWIDGET::CLEANUP
- BASEWIDGET::DRAW
- BASEWIDGET::GETPROPERTY
- BASEWIDGET::INIT
- BASEWIDGET::SETPROPERTY
- BUTTONWIDGET
- BUTTONWIDGET::ADD
- BUTTONWIDGET::CLEANUP
- BUTTONWIDGET::DRAW
- BUTTONWIDGET::GETPROPERTY
- BUTTONWIDGET::INIT
- BUTTONWIDGET::SETPROPERTY
- CATGRAPHICSWINDOW::ADD
- CATGRAPHICSWINDOW::CLEANUP
- CATGRAPHICSWINDOW::DRAWWIDGETEVENTHANDLER
- CATGRAPHICSWINDOW::EVENT_HANDLER
- CATGRAPHICSWINDOW::GETPROPERTY
- CATGRAPHICSWINDOW::INIT
- CATGRAPHICSWINDOW::SAVEAS
- CATGRAPHICSWINDOW::SETPROPERTY
- CATGRAPHICSWINDOW::SETWINDOW
- CATGRAPHICSWINDOW__DEFINE
- CATIMAGE::CONTROLPANEL
- CAT_TRACKBALL
- COMBOBOXWIDGET::ADD
- COMBOBOXWIDGET::CLEANUP
- COMBOBOXWIDGET::GETPROPERTY
- COMBOBOXWIDGET::INIT
- COMBOBOXWIDGET::SETPROPERTY
- COMBOBOXWIDGET__DEFINE
- CONTEXTMENUBASE::ADD
- CONTEXTMENUBASE::GETPROPERTY
- CONTEXTMENUBASE::INIT
- CONTEXTMENUBASE::SETPROPERTY
- CONTEXTMENUBASE__DEFINE
- CT_STRETCH::CLEANUP
- CT_STRETCH::CONTROLPANEL
- CT_STRETCH::CONTROLPANEL_EVENTS
- CT_STRETCH::DRAW
- CT_STRETCH::EVENTHANDLER
- CT_STRETCH::GETPROPERTY
- CT_STRETCH::INIT
- CT_STRETCH::RESET
- CT_STRETCH::SETPROPERTY
- CT_STRETCH__DEFINE
- CW_HISTOSTRETCH::CLEANUP
- CW_HISTOSTRETCH::DRAW
- CW_HISTOSTRETCH::DRAWLINES
- CW_HISTOSTRETCH::DRAWPLOT
- CW_HISTOSTRETCH::EVENTHANDLER
- CW_HISTOSTRETCH::GETPROPERTY
- CW_HISTOSTRETCH::INIT
- CW_HISTOSTRETCH::MESSAGEHANDLER
- CW_HISTOSTRETCH::NOTIFY_REALIZE
- CW_HISTOSTRETCH::RESET
- CW_HISTOSTRETCH::SETPROPERTY
- CW_HISTOSTRETCH__DEFINE
- DRAWBUTTONWIDGET
- DRAWBUTTONWIDGET::ADD
- DRAWBUTTONWIDGET::CLEANUP
- DRAWBUTTONWIDGET::DRAW
- DRAWBUTTONWIDGET::EVENTHANDLER
- DRAWBUTTONWIDGET::GETPROPERTY
- DRAWBUTTONWIDGET::INIT
- DRAWBUTTONWIDGET::SETPROPERTY
- DRAWWIDGET
- DRAWWIDGET::ADD
- DRAWWIDGET::APPLYCOLORS
- DRAWWIDGET::APPLYCOORDS
- DRAWWIDGET::CLEANUP
- DRAWWIDGET::CONTROLPANELEVENTS
- DRAWWIDGET::COPY
- DRAWWIDGET::DRAW
- DRAWWIDGET::GETPROPERTY
- DRAWWIDGET::INIT
- DRAWWIDGET::MESSAGEHANDLER
- DRAWWIDGET::NOTIFY_REALIZE
- DRAWWIDGET::OUTPUT
- DRAWWIDGET::REFRESH
- DRAWWIDGET::RESIZE
- DRAWWIDGET::SELECTOBJECTS
- DRAWWIDGET::SETPROPERTY
- DRAWWIDGET::SETWINDOW
- DRAWWIDGET::SET_WINDOW
- DROPLISTWIDGET
- DROPLISTWIDGET::CLEANUP
- DROPLISTWIDGET::EVENTHANDLER
- DROPLISTWIDGET::GETPROPERTY
- DROPLISTWIDGET::INIT
- DROPLISTWIDGET::RESIZE
- DROPLISTWIDGET::SETPROPERTY
- FIELDWIDGET::CLEANUP
- FIELDWIDGET::EVENT_HANDLER
- FIELDWIDGET::GETPROPERTY
- FIELDWIDGET::INIT
- FIELDWIDGET::MOVETAB
- FIELDWIDGET::RESIZE
- FIELDWIDGET::RETURNVALUE
- FIELDWIDGET::SETPROPERTY
- FIELDWIDGET::VALIDATE
- FIELDWIDGET__DEFINE
- IMAGESTRIP::CLEANUP
- IMAGESTRIP::DRAW
- IMAGESTRIP::EVENT_HANDLER
- IMAGESTRIP::GETPROPERTY
- IMAGESTRIP::INIT
- IMAGESTRIP::MESSAGEHANDLER
- IMAGESTRIP::SETPROPERTY
- IMAGESTRIP__DEFINE
- LABELWIDGET
- LABELWIDGET::ADD
- LABELWIDGET::CLEANUP
- LABELWIDGET::GETPROPERTY
- LABELWIDGET::INIT
- LABELWIDGET::SETPROPERTY
- LISTWIDGET
- LISTWIDGET::CLEANUP
- LISTWIDGET::EVENTHANDLER
- LISTWIDGET::GETPROPERTY
- LISTWIDGET::INIT
- LISTWIDGET::NOTIFY_REALIZE
- LISTWIDGET::RESIZE
- LISTWIDGET::SETPROPERTY
- MENUBARWIDGET
- MENUBARWIDGET::ADD
- MENUBARWIDGET::INIT
- MENUBARWIDGET::SETPROPERTY
- ODRAWWIDGET
- ODRAWWIDGET::ADD
- ODRAWWIDGET::CLEANUP
- ODRAWWIDGET::COPY
- ODRAWWIDGET::DRAW
- ODRAWWIDGET::GETPROPERTY
- ODRAWWIDGET::INIT
- ODRAWWIDGET::MESSAGEHANDLER
- ODRAWWIDGET::OUTPUT
- ODRAWWIDGET::PRINT
- ODRAWWIDGET::RESIZE
- PIXMAPWIDGET
- PIXMAPWIDGET::ADD
- PIXMAPWIDGET::CLEANUP
- PIXMAPWIDGET::CONTROLPANEL
- PIXMAPWIDGET::COPY
- PIXMAPWIDGET::DRAW
- PIXMAPWIDGET::EVENT_HANDLER
- PIXMAPWIDGET::GETPROPERTY
- PIXMAPWIDGET::INIT
- PIXMAPWIDGET::MESSAGEHANDLER
- PIXMAPWIDGET::NOTIFY_REALIZE
- PIXMAPWIDGET::REFRESH
- PIXMAPWIDGET::RESIZE
- PIXMAPWIDGET::SETPROPERTY
- PIXMAPWIDGET::SETWINDOW
- PIXMAPWIDGET::UNSETWINDOW
- PROPERTYPANEL::CLEANUP
- PROPERTYPANEL::DISPLAY_SLIDER_BAR
- PROPERTYPANEL::DRAW_DASHED_BAR
- PROPERTYPANEL::EVENT_HANDLER
- PROPERTYPANEL::GETPROPERTY
- PROPERTYPANEL::INIT
- PROPERTYPANEL::SETPROPERTY
- PROPERTYPANEL__DEFINE
- PROPERTYSHEETWIDGET::ADD
- PROPERTYSHEETWIDGET::CLEANUP
- PROPERTYSHEETWIDGET::CONTROLPANEL
- PROPERTYSHEETWIDGET::DRAW
- PROPERTYSHEETWIDGET::EVENT_HANDLER
- PROPERTYSHEETWIDGET::GETPROPERTY
- PROPERTYSHEETWIDGET::INIT
- PROPERTYSHEETWIDGET::SETPROPERTY
- PROPERTYSHEETWIDGET__DEFINE
- SELECTABLEDRAWWIDGET
- SELECTABLEDRAWWIDGET::CLEANUP
- SELECTABLEDRAWWIDGET::EVENTHANDLER
- SELECTABLEDRAWWIDGET::GETPROPERTY
- SELECTABLEDRAWWIDGET::INIT
- SELECTABLEDRAWWIDGET::SETPROPERTY
- SLIDERWIDGET
- SLIDERWIDGET::ADD
- SLIDERWIDGET::CLEANUP
- SLIDERWIDGET::GETPROPERTY
- SLIDERWIDGET::INIT
- SLIDERWIDGET::SETPROPERTY
- SPINNER::CLEANUP
- SPINNER::CONTROLPANEL
- SPINNER::CONTROLPANELEVENTS
- SPINNER::EVENT_HANDLER
- SPINNER::GETPROPERTY
- SPINNER::INIT
- SPINNER::SENDEVENT
- SPINNER::SETPROPERTY
- SPINNER__DEFINE
- STATUSBAR
- STATUSBAR::CLEANUP
- STATUSBAR::CONTROLPANEL
- STATUSBAR::EVENTTRACKING
- STATUSBAR::EVENT_HANDLER
- STATUSBAR::GETPROPERTY
- STATUSBAR::INIT
- STATUSBAR::NOTIFY_REALIZE
- STATUSBAR::RESIZE
- STATUSBAR::SETPROPERTY
- TABWIDGET::ADD
- TABWIDGET::CLEANUP
- TABWIDGET::GETPROPERTY
- TABWIDGET::INIT
- TABWIDGET::SETPROPERTY
- TABWIDGET__DEFINE
- TEXTWIDGET
- TEXTWIDGET::ADD
- TEXTWIDGET::CLEANUP
- TEXTWIDGET::GETPROPERTY
- TEXTWIDGET::INIT
- TEXTWIDGET::SETPROPERTY
- TOPLEVELBASE
- TOPLEVELBASE::CLEANUP
- TOPLEVELBASE::DRAW
- TOPLEVELBASE::GETPROPERTY
- TOPLEVELBASE::INIT
- TOPLEVELBASE::POSITION
- TOPLEVELBASE::REALIZE
- TOPLEVELBASE::SETPROPERTY
- TREEWIDGET::ADD
- TREEWIDGET::CLEANUP
- TREEWIDGET::GETPROPERTY
- TREEWIDGET::INIT
- TREEWIDGET::SETPROPERTY
- TREEWIDGET__DEFINE
- VIEWCONTENTS::EVENT_HANDLER
- VIEWCONTENTS::INIT
- VIEWCONTENTS__DEFINE
- WIDGETATOM
- WIDGETATOM::CLEANUP
- WIDGETATOM::DRAW
- WIDGETATOM::EVENTHANDLER
- WIDGETATOM::GETID
- WIDGETATOM::GETPROPERTY
- WIDGETATOM::GET_UVALUE
- WIDGETATOM::INIT
- WIDGETATOM::KILL_NOTIFY
- WIDGETATOM::NOTIFY_REALIZE
- WIDGETATOM::SEND_EVENT
- WIDGETATOM::SETPROPERTY
- WIDGETATOM::SET_UVALUE

# Routine Descriptions

## BASEWIDGET

[Next Routine] [List of Routines]

     NAME:
           BASEWIDGET

     PURPOSE:

           The purpose of this routine is to implement a base widget as an object. If you wish
           to create a top-level base widget object, use the TOPLEVELBASE object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           baseWidget = Obj_New("baseWidget", parentObjectID)

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           IDL_CONTAINER

     CLASS_STRUCTURE:

        class = { BASEWIDGET, $           ; The BASEWIDGET object class name.
                  INHERITS WidgetAtom, $  ; Subclassed from WIDGETATOM.
                  _Map: 0L $              ; A flag that indicates whether this base is mapped or not.
                }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 28 June 2002.
           Added TITLE keyword in SetProperty and GetProperty methods, 23 March 2005. DWF.
           Added TOOLBAR keyword in INIT method. 26 September 2005. DWF.
           Made a change in ADD method to keep the basewidget from adding itself as a parent
              twice to the object being added. 16 July 2007. DWF.

(See C:\IDL\Catalyst\source\widgets\basewidget__define.pro)

## BASEWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BASEWIDGET::ADD

     PURPOSE:

           This method adds an object widget to the base object widget. The
           added object widget must be subclassed from the WIDGETATOM object.

     SYNTAX:

           self -> Add, object

     ARGUMENTS:

           object: The object to add to the container. The object must be
              subclassed from the WIDGETATOM object. (Required)

     KEYWORDS:

           _EXTRA: Any keyword appropriate for superclass ADD methods.

(See C:\IDL\Catalyst\source\widgets\basewidget__define.pro)

## BASEWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BASEWIDGET::CLEANUP

     PURPOSE:

           This is the BASEWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the  superclass CLEANUP methods.

(See C:\IDL\Catalyst\source\widgets\basewidget__define.pro)

## BASEWIDGET::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BASEWIDGET::DRAW

     PURPOSE:

           This method realizes the BaseWidget object if it has not already been realized.

     SYNTAX:

           self -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA: Any keyword appropriate for the supercalss Draw methods.

(See C:\IDL\Catalyst\source\widgets\basewidget__define.pro)

## BASEWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BASEWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to obtain the BaseWidget object's properties

     SYNTAX:

           aBaseWidget -> GetProperty, Map=ismapped

     ARGUMENTS:

           None.

     KEYWORDS:

           CONTEXT_EVENTS: Returns a 1 if context events are on, a 0 otherwise.

           MAP:            Returns a 0 or 1 to indicate if the current base widget hierarchy is
                           mapped (1) or not (0).

           TITLE:          The title of the base widget. Applies only to base widgets
                           that are children of tab widgets.

           _EXTRA:         Any keywords appropriate for the superclass GetProperty methods.

(See C:\IDL\Catalyst\source\widgets\basewidget__define.pro)

## BASEWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BASEWIDGET::INIT

     PURPOSE:

           This is the BASEWIDGET object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

           theParent:         An object reference to a WIDGETATOM-subclassed object.
                              This is the same as using the PARENT keyword.

     KEYWORDS:

           ALIGN_BOTTOM:      Set this keyword to align the base widget with the bottom of the parent base.

           ALIGN_CENTER:      Set this keyword to align the base widget with the center of the parent base.

           ALIGN_LEFT:        Set this keyword to align the base widget with the left of the parent base.

           ALIGN_RIGHT:       Set this keyword to align the base widget with the right of the parent base.

           ALIGN_TOP:         Set this keyword to align the base widget with the top of the parent base.

           BASE_ALIGN_BOTTOM: Set this keyword to align the children of this base to the bottom of the base widget.

           BASE_ALIGN_CENTER: Set this keyword to align the children of this base to the center of the base widget.

           BASE_ALIGN_LEFT:   Set this keyword to align the children of this base to the left of the base widget.

           BASE_ALIGN_RIGHT:  Set this keyword to align the children of this base to the right of the base widget.

           BASE_ALIGN_TOP:    Set this keyword to align the children of this base to the top of the base widget.

           COLUMN:            Arrange the children of this base into this many columns.

           CONTEXT_EVENTS:    Set this keyword to turn context events on for this widget object.

           CONTEXT_MENU:      Set this keyword to create a base widget that can be used to hold
                              context-sensitive menu items.

           EXCLUSIVE:         Set this keyword to make an exclusive button base.

           FRAME:             Create a frame this many pixels wide around base.

           GRID_LAYOUT:       Set this keyword to lay children out in equally-spaced grid.

           KBRD_FOCUS_EVENTS: Set this keyworld to enable keyboard focus events.

           MAP:               Set this keyword to map (1) or unmap (0) the base. Mapped by default.

           NONEXCLUSIVE:      Set this keyword to make an non-exclusive button base.

           PARENT:            An object reference to a WIDGETATOM-subclassed object.

           ROW:               Arrange children of this base into this many rows.

           SCR_XSIZE:         Set the screen X size of the base to this many pixels. (Use discouraged.)

           SCR_YSIZE:         Set the screen Y size of the base to this many pixels. (Use discouraged.)

           SCROLL:            Set this keyword to add scroll bars to the base widget.

           SPACE:             Set this keyword to the number of pixels between children in the base.
                              Ignored for exclusive and non-exclusive bases.

           TITLE:             Set this keyword to a string that will be the title for this base widget.
                              A title becomes the tab value if the base widget is added to a tab widget.
                              A title only makes sense in this context.

           TOOLBAR:           Setting this keyword allows the base to have a slightly different appearance
                              on Motif platforms. The keyword is ignored on Windows.

           UNITS:             The units for measurments. The default is 0 for pixels. Other values are
                              1 for inches, and 2 for centimeters.

           X_SCROLL_SIZE:     The X size (pixels) of the scrollable window area.

           XOFFSET:           The horizontal space (pixels) from upper left corner of the display.

           XPAD:              The amount of horizontal space (pixels) to add to edges of children.

           XSIZE:             The X size of the widget.

           Y_SCROLL_SIZE:     The Y size (pixels) of the scrollable window area

           YPAD:              The amount of vertical space (pixels) to add to edges of children.

           YOFFSET:           The vertical space (pixels) from upper left corner of the display.

           YSIZE:             The Y size of the widget.

           _EXTRA:            Any keyword appropriate for the superclass INIT methods.

(See C:\IDL\Catalyst\source\widgets\basewidget__define.pro)

## BASEWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BASEWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the BaseWidget object's properties

     SYNTAX:

           aBaseWidget -> SetProperty, Map=1

     ARGUMENTS:

           None.

     KEYWORDS:

           CONTEXT_EVENTS:    Set to 1 to turn context events on for the base widget.

           KBRD_FOCUS_EVENTS: Set to 1 to turn keyboard focus events on for the base widget.

           MAP:               Set to 1 to map a base widget hierarchy. Set to 0 to unmap.

           TITLE:             Sets the title of the base widget. Applies only to base widgets
                              that are children of tab widgets.

           _EXTRA:            Any keywords appropriate for the superclass SetProperty methods.

(See C:\IDL\Catalyst\source\widgets\basewidget__define.pro)

## BUTTONWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BUTTONWIDGET

     PURPOSE:

           The purpose of this routine is to implement a button widget as an object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           buttonWidget = Obj_New("buttonWidget", theParent)

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

        class = { ButtonWidget, $        ; The BUTTONWIDGET object class definition.
                  _menu:0B, $            ; A flag that indicates this is a menu button.
                  INHERITS WidgetAtom $  ; Inherits WIDGETATOM properties.
                 }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 28 June 2002.

(See C:\IDL\Catalyst\source\widgets\buttonwidget__define.pro)

## BUTTONWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BUTTONWIDGET::ADD

     PURPOSE:

           This method overrides the superclass Add methods to make sure only button widgets are
           added to menu buttons.

     SYNTAX:

           thisButtonObj -> Add, thatButtonObj

     ARGUMENTS:

           object: The object to add to the container. Only objects subclassed from BUTTONWIDGET
                   can be added, and only if the current object has a menu flag set for it.

     KEYWORDS:

           _EXTRA: Any keyword appropriate for the superclass ADD methods.

(See C:\IDL\Catalyst\source\widgets\buttonwidget__define.pro)

## BUTTONWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BUTTONWIDGET::CLEANUP

     PURPOSE:

           This is the BUTTONWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\buttonwidget__define.pro)

## BUTTONWIDGET::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BUTTONWIDGET::DRAW

     PURPOSE:

           A dummy DRAW method. All keywords are passed to the WIDGETATOM::DRAW superclass.

     SYNTAX:

           buttonObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA: Any keyword appropriate for the WIDGETATOM::DRAW method.

(See C:\IDL\Catalyst\source\widgets\buttonwidget__define.pro)

## BUTTONWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BUTTONWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to get the object's properties.

     SYNTAX:

           buttonObject -> GetProperty, VALUE=buttonValue

     ARGUMENTS:

           None.

     KEYWORDS:

           BUTTON_SET:     This keyword will return 1 if the button is set, or 0 otherwise.

           DYNAMIC_RESIZE: This keyword will be set to 1 if the button currently will resize dynamically.
                           It is set to 0 otherwise.

           TOOLTIP:        Returns the current tooltip associated with this button.

           VALUE:          The current value of the button widget.

           _REF_EXTRA:     Any keyword appropriate for the GETPROPERTY method of superclass objects.

(See C:\IDL\Catalyst\source\widgets\buttonwidget__define.pro)

## BUTTONWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BUTTONWIDGET::INIT

     PURPOSE:

           This is the BUTTONWIDGET object class initialization method.

     ARGUMENTS:

           parent:         The parent object reference.

     KEYWORDS:

           ACCELERATOR:    Set this keyword to a string that defines an accelerator key for the
                           button. See the documentation for WIDGET_BUTTON for details. Accelerator
                           keys can only be assigned at initialization of the widget.

           ALIGN_CENTER:   Align the button with the center of it's parent base.

           ALIGN_LEFT:     Align the button with the left of it's parent base.

           ALIGN_RIGHT:    Align the button with the right of it's parent base.

           BITMAP:         Set this keyword to specify that the button value is a color bitmap.

           CHECKED_MENU:   Set this keyword to enable a check mark to be placed next to a button
                           that is used as a menu item.

           DYNAMIC_RESIZE: Set this keyword to specify a button that is dynamically resized.

           FONT:           The name of the font to use for button text.

           FRAME:          Create a frame this many pixels wide around base.

           MENU:           Set this keyword to make this button a menu button.

           NO_RELEASE:     Set this keyword enable only SELECT events for exclusive and non-exclusive
                           buttons. The keyword has no effect on regular button widgets.

           SCR_XSIZE:      Set the screen X size of the base to this many pixels. (Use discouraged.)

           SCR_YSIZE:      Set the screen Y size of the base to this many pixels. (Use discouraged.)

           SEPARATOR:      Set this keyword to add a separator line above the button.

           TOOLTIP:        The tooltip associated with this button.

           UNITS:          The units for measurments. The default is 0 for pixels. Other values are
                           1 for inches, and 2 for centimeters.

           VALUE:          The initial value of the button. Text in most cases, but a bitmap if the BITMAP
                           keyword is set.

           X_BITMAP_EXTRA: When creating a bitmap button that is not of a "byte-aligned" size (in other words,
                           does not have a dimension that is a multiple of 8), this keyword specifieds how
                           many bits of the supplied bitmap must be ignored (within the end byte). For example,
                           to create a 10 by 8 bitmap, you must supply a 2 by 8 array of bytes and ignore the
                           bottom 6 bits. Therefore, you would specify X_BITMAP_EXTRA=6.

           XOFFSET:        The horizontal space (pixels) from upper left corner of the parent bullitin-board base

           XSIZE:          The X size of the widget. (Use discouraged.)

           YOFFSET:        The vertical space (pixels) from upper left corner of the parent bullitin-board base

           YSIZE:          The Y size of the widget. (Use discouraged.)

           _EXTRA: Any extra keywords are passed along to the WIDGETATOM superclass object.

(See C:\IDL\Catalyst\source\widgets\buttonwidget__define.pro)

## BUTTONWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BUTTONWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the object's properties.

     SYNTAX:

           buttonObject -> SetProperty, VALUE=buttonValue

     ARGUMENTS:

           None.

     KEYWORDS:

           BITMAP:         Set this keyword if the VALUE is a bitmap, rather than text.

           DYNAMIC_RESIZE: This keyword will be set to 1 if the button currently will resize dynamically.
                           It is set to 0 otherwise.

           INPUT_FOCUS:    Set this keyword to make this button have the current keyboard focus.

           MENU:           Set this keyword to turn this into a button capably

           VALUE:          Set this keyword to the current value of the button widget.

           _EXTRA:         Any keyword appropriate for the GETPROPERTY method of superclass objects.

(See C:\IDL\Catalyst\source\widgets\buttonwidget__define.pro)

## CATGRAPHICSWINDOW::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CatGraphicsWindow::ADD

     PURPOSE:

           This method adds the object to the draw widget of the graphics window. To
           be displayed in the graphics window, the added object will require a DRAW method.

     SYNTAX:

           aGraphicsWindow -> Add, theObject

     ARGUMENTS:

         theObject:     The object to be added to this object's draw widget object. Must be either
                        a CATDATAATOM (direct graphics) with a DRAW method or a CATOBJECTVIEW
                        (object graphics) object. If a CATOBJECTVIEW object, the object will be
                        expected to handle all draw widget events. Button events and expose events
                        are turned on by default.

     KEYWORDS:

         _EXTRA:        Extra keywords for the TOPLEVELBASE::ADD method or the object graphics
                        oDrawWidget::SetProperty method.

(See C:\IDL\Catalyst\source\widgets\catgraphicswindow__define.pro)

## CATGRAPHICSWINDOW::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CatGraphicsWindow::CLEANUP

     PURPOSE:

           This is the CatGraphicsWindow object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\catgraphicswindow__define.pro)

## CATGRAPHICSWINDOW::DRAWWIDGETEVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            CatGraphicsWindow::DRAWWIDGETEVENTHANDLER

     PURPOSE:

            This method is the event handler for an events being generated by the
            draw widget.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event:    The event structure as described in the IDL help files.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\catgraphicswindow__define.pro)

## CATGRAPHICSWINDOW::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            CatGraphicsWindow::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the CatGraphicsWindow interface. It
            exists purely to handle resize events which are passed to the
            child object.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event:    The event structure as described in the IDL help files.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\catgraphicswindow__define.pro)

## CATGRAPHICSWINDOW::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CatGraphicsWindow::GETPROPERTY

     PURPOSE:

           This method enables the getting of the CatGraphicsWindow object class
           properties.

     SYNTAX:

           aCatGraphicsWindow -> GetProperty

     ARGUMENTS:

         None.

     KEYWORDS:

         DRAWID:     The draw widget object.

         WINDOWID:   The window index number of the draw widget (direct graphics) or the
                     IDLgrWindow object (object graphics).

         _EXTRA:     Any keywords appropriate for the "DrawWidget::SetProperty" method.

(See C:\IDL\Catalyst\source\widgets\catgraphicswindow__define.pro)

## CATGRAPHICSWINDOW::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CatGraphicsWindow::INIT

     PURPOSE:

           This is the CatGraphicsWindow object class initialization method.

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         parent:          The parent object of this object.

     KEYWORDS:

        BACKGROUND_COLOR: Set this to the name of a background color. Used only when the
                          keyword ERASE_WINDOW is set. Set to "BLACK" by default.

         ERASE_WINDOW:    Set this keyword to 1 to have the draw widget erase before drawing. Set
                          to 0 to skip the erasing.

         OBJECT_GRAPHICS: Set this keyword to make the draw widget an ODRAWWIDGET instead of a DRAWWIDGET object.

         OUTPUT_FILENAME: The base name for the output filename. This will be given the proper extension
                          by the program.

         TITLE:           The title of the top-level base widget.

         XSIZE:           The X size of the enclosed draw widget in pixels.

         YSIZE:           The Y size of the enclosed draw widget in pixels.

         _EXTRA:          Any keywords appropriate for TopLevelBase::INIT method.

(See C:\IDL\Catalyst\source\widgets\catgraphicswindow__define.pro)

## CATGRAPHICSWINDOW::SAVEAS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CatGraphicsWindow::SAVEAS

     PURPOSE:

           This method allows the draw widget to save its contents in hardcopy. It is an
           event handler method.

     SYNTAX:

           Called by a widget event occurring.

     ARGUMENTS:

         event:      The Save As... button event structure.

     KEYWORDS:

         None.

(See C:\IDL\Catalyst\source\widgets\catgraphicswindow__define.pro)

## CATGRAPHICSWINDOW::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CatGraphicsWindow::SETPROPERTY

     PURPOSE:

           This method enables the setting of the CatGraphicsWindow object class
           properties.

     SYNTAX:

           aCatGraphicsWindow -> SetProperty, XSIZE=500, YSIZE=300

     ARGUMENTS:

         None.

     KEYWORDS:

         BACKGROUND:   The name of the background color. Normally, this keyword will require ERASE_WINDOW=1, too.

         ERASE_WINDOW: Set this keyword to 1 to have the draw widget erase before drawing. Set
                       to 0 to skip the erasing.

         _EXTRA:       Any keywords appropriate for the  TopLevelBase SetProperty" method.

(See C:\IDL\Catalyst\source\widgets\catgraphicswindow__define.pro)

## CATGRAPHICSWINDOW::SETWINDOW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CatGraphicsWindow::SETWINDOW

     PURPOSE:

           This method sets the window index number of the draw widget to be the
           current graphics window.

     SYNTAX:

           thisWindow -> SetWindow

     ARGUMENTS:

           None.

     KEYWORDS:

           None

(See C:\IDL\Catalyst\source\widgets\catgraphicswindow__define.pro)

## CATGRAPHICSWINDOW__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSWINDOW__DEFINE

     PURPOSE:

           The purpose of this routine is to implement a draw widget inside a top-level base widget.
           Objects with DRAW methods can be added to the CatGraphicsWindow object and their graphics
           will be displayed in the window.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           aGraphicsWindow = Obj_New("CatGraphicsWindow")

     SUPERCLASSES:

           TOPLEVELBASE
           BASEWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER

     CLASS_STRUCTURE:

       class = {CatGraphicsWindow, _draw:OBJ_NEW (), INHERITS TopLevelBase}

     MODIFICATION_HISTORY:

           Written by: David Fanning, 6 July 2003.

(See C:\IDL\Catalyst\source\widgets\catgraphicswindow__define.pro)

## CATIMAGE::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CatImage::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the CATIMAGE object. A
           control panel is a graphical user interface for setting object
           properties. If you create a control panel, the events are typically
           sent to the EVENTHANDLER method.

     SYNTAX:

           theObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window (i.e., a TOPLEVELBASE object).

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CatControlPanel::INIT method.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## CAT_TRACKBALL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
       CAT_TRACKBALL

     PURPOSE:
       This object translates widget events for draw widgets into
           transformations that emulate a virtual trackball (for transforming
           object graphics in three dimensions).

     CATEGORY:
       Object Graphics.

     CALLING SEQUENCE:
       To initially create:
           oTrackball = OBJ_NEW('Cat_Trackball', Center, Radius)

       To update the trackball state based on a widget event:
           oCat_Trackball->Update, sEvent

       To re-initialize the trackball state:
           oCat_Trackball->Reset, Center, Radius

       To destroy:
           OBJ_DESTROY, oCat_Trackball

     INPUTS:
       CAT_TRACKBALL::INIT:
       Center: A two-dimensional vector, [x,y], representing the requested
           center (measured in device units) of the trackball.
           Radius: The requested radius (measured in device units) of the
           trackball.

       CAT_TRACKBALL::UPDATE:
            sEvent: The widget event structure.  The event type indicates
           how the trackball state should be updated.

       CAT_TRACKBALL::RESET:
       Center: A two-dimensional vector, [x,y], representing the requested
           center (measured in device units) of the trackball.
           Radius: The requested radius (measured in device units) of the
           trackball.

     KEYWORD PARAMETERS:
       CAT_TRACKBALL::INIT:
       AXIS:       Set this keyword to indicate the axis about which
               rotations are to be constrained if the CONSTRAIN
               keyword is set to a nonzer value.  Valid values
               include:
                   0 = X-Axis
                   1 = Y-Axis
                   2 = Z-Axis (default)
       CONSTRAIN:  Set this keyword to a nonzero value to indicate that
               the trackball transformations are to be constrained
               about a given axis (as specified by the AXIS
               keyword).  The default is zero (no constraints).
       MOUSE:      Set this keyword to a bitmask to indicate which
               mouse button to honor for trackball events.  The
               least significant bit represents the leftmost
               button, the next highest bit represents the middle
               button, and the next highest bit represents the
               right button.  The default is 1b, for the left
               mouse button.

       CAT_TRACKBALL::UPDATE:
       MOUSE:      Set this keyword to a bitmask to indicate which
               mouse button to honor for trackball events.  The
               least significant bit represents the leftmost
               button, the next highest bit represents the middle
               button, and the next highest bit represents the
               right button.  The default is 1b, for the left
               mouse button.
       TRANSFORM:  Set this keyword to a named variable that upon
               return will contain a floating point 4x4 array
               if a transformations matrix is calculated as
               a result of the widget event.
       TRANSLATE:  Set this keyword to indicate that the trackball
               movement should be constrained to x and y translation
               rather than rotation about an axis.

       CAT_TRACKBALL::RESET:
       AXIS:       Set this keyword to indicate the axis about which
               rotations are to be constrained if the CONSTRAIN
               keyword is set to a nonzer value.  Valid values
               include:
                   0 = X-Axis
                   1 = Y-Axis
                   2 = Z-Axis (default)
       CONSTRAIN:  Set this keyword to a nonzero value to indicate that
               the trackball transformations are to be constrained
               about a given axis (as specified by the AXIS
               keyword).  The default is zero (no constraints).
       MOUSE:      Set this keyword to a bitmask to indicate which
               mouse button to honor for trackball events.  The
               least significant bit represents the leftmost
               button, the next highest bit represents the middle
               button, and the next highest bit represents the
               right button.  The default is 1b, for the left
               mouse button.

     OUTPUTS:
       CAT_TRACKBALL::UPDATE:
       This function returns a 1 if a transformation matrix is calculated
       as a result of the widget event, or 0 otherwise.

     EXAMPLE:
       Create a trackball centered on a 512x512 pixel drawable area, and
       a view containing the model to be manipulated:
           xdim = 512
           ydim = 512
           wBase = WIDGET_BASE()
           wDraw = WIDGET_DRAW(wBase, XSIZE=xdim, YSIZE=ydim, $
                               GRAPHICS_LEVEL=2, /BUTTON_EVENTS, $
                               /MOTION_EVENTS, /EXPOSE_EVENTS, RETAIN=0 )
           WIDGET_CONTROL, wBase, /REALIZE
           WIDGET_CONTROL, wDraw, GET_VALUE=oWindow

           oCat_Trackball = OBJ_NEW('Cat_Trackball', [xdim/2.,ydim/2.], xdim/2.)
           oView = OBJ_NEW('IDLgrView')
           oModel = OBJ_NEW('IDLgrModel')
           oView->Add, oModel

           XMANAGER, 'TrackEx', wBase

       In the widget event handler, handle trackball updates.
       As the trackball transformation changes, update the transformation
       for a model object (instance of IDLgrModel), and redraw the view:

       PRO TrackEx_Event, sEvent
           ...
           bHaveXform = oCat_Trackball->Update( sEvent, TRANSFORM=TrackXform )
           IF (bHaveXform) THEN BEGIN
               oModel->GetProperty, TRANSFORM=ModelXform
               oModel->SetProperty, TRANSFORM=ModelXform # TrackXform
               oWindow->Draw, oView
           ENDIF
           ...
       END

     MODIFICATION HISTORY:
       Written by: DD, December 1996
       Modified by David Fanning, Aug 9, 2003 to work with Catalyst System.
          Required modification to UPDATE method to allow events from objects.

(See C:\IDL\Catalyst\source\widgets\cat_trackball__define.pro)

## COMBOBOXWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           COMBOBOXWIDGET::ADD

     PURPOSE:

           This method overrides the superclass Add method to prevent addition of
           other widget objects to text objects.

     SYNTAX:

           textObject -> Add, object

     ARGUMENTS:

           object: The object to add to the container. Only objects that are NOT subclassed
                   from WIDGETATOM objects can be added.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\comboboxwidget__define.pro)

## COMBOBOXWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           COMBOBOXWIDGET::CLEANUP

     PURPOSE:

           This is the COMBOBOXWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\comboboxwidget__define.pro)

## COMBOBOXWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           COMBOBOXWIDGET::GETPROPERTY

     PURPOSE:

           This method enables the getting of the COMBOBOXWIDGET object class
           properties.

     SYNTAX:

           aComboBoxWidget -> GetProperty, TEXT=theText

     ARGUMENTS:

         None.

     KEYWORDS:

         DYNAMIC_RESIZE: Returns a 1 if dynamic resizing is on for this widget, and a 0 otherwise.

         NUMBER:         Returns the number of elements in the combobox widget's selection list.

         TEXT:           Returns the current text in the text field of the combobox widget.

         VALUE:          Returns a string or string array containing the combobox widget's current selection list.

         _REF_EXTRA:     Any keywords appropriate for the WIDGETATOM::GetProperty method.

(See C:\IDL\Catalyst\source\widgets\comboboxwidget__define.pro)

## COMBOBOXWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           COMBOBOXWIDGET::INIT

     PURPOSE:

           This is the COMBOBOXWIDGET object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         parent          The parent object reference for this object widget.

     KEYWORDS:

         DYNAMIC_RESIZE: Set this keyword to enable dynamic resizing for this widget.

         EDITABLE:       Set this keyword to create an editable combobox.

         FONT:           Set this variable to the name of the font to use for the ComboBox elements.

         SCR_XSIZE:      Set the screen X size of the base to this many pixels. (Use discouraged.)

         SCR_YSIZE:      Set the screen Y size of the base to this many pixels. (Use discouraged.)

         SELECTION:      Set this keyword to the index of an item in the VALUE list to be the
                         current ComboBox selection.

         UNITS:          Set to 0 (the default) to specify sizes in pixels. 1 - inches, 2 - centimeters.

         VALUE:          Set this variable to a string, or array of strings, containing the ComboBox selections.

         XOFFSET:        The X offset of the widget, in UNITS.

         XSIZE:          The desired X size of the widget, in UNITS.

         YOFFSET:        The Y offset of the widget, in UNITS.

         YSIZE:          The desired Y size of the widget, in UNITS.

         _EXTRA:         Any keywords appropriate for the WIDGETATOM::INIT method.

(See C:\IDL\Catalyst\source\widgets\comboboxwidget__define.pro)

## COMBOBOXWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           COMBOBOXWIDGET::SETPROPERTY

     PURPOSE:

           This method enables the setting of the COMBOBOXWIDGET object class
           properties.

     SYNTAX:

           aComboBoxWidget -> SetProperty, DELETE=5

     ARGUMENTS:

         None.

     KEYWORDS:

         ADD:            Set this keyword to a string variable of an item to add to the ComboBox list of items.
                         By default, the item is added to the end of the list, unless INDEX is specified.

         DELETE:         Set this keyword to the index of an item to be deleted from the ComboBox list of items.

         DYNAMIC_RESIZE: Set this keyword to enable dynamic resizing for this widget.

         INDEX:          Set this keyword to the index where addtional items should be ADDed to the list.

         SELECTION:      Set this keyword to the index of an item to be the current ComboBox selection.

         VALUE:          Set this variable to a string, or array of strings, containing the ComboBox selections.

         _EXTRA:         Any keywords appropriate for the WIDGETATOM::SetProperty method.

(See C:\IDL\Catalyst\source\widgets\comboboxwidget__define.pro)

## COMBOBOXWIDGET__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           COMBOBOXWIDGET__DEFINE

     PURPOSE:

           The purpose of this routine is to implement a combobox widget as an object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           aComboBoxWidget = Obj_New("COMBOBOXWIDGET", parent)

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { COMBOBOXWIDGET, $      ; ComboBox widget object class
                 INHERITS WIDGETATOM $  ; Inherits WidgetAtom object class.
               }

     MODIFICATION_HISTORY:

           Written by: David Fanning, 20 April 2003.

(See C:\IDL\Catalyst\source\widgets\comboboxwidget__define.pro)

## CONTEXTMENUBASE::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTEXTMENUBASE::ADD

     PURPOSE:

           This method is where you can screen what kinds of objects are
           added to this object's hierarchy. The method is not always needed.
           If you do create it, be CERTAIN to call the superclass ADD method
           or your program will not work correctly.

     SYNTAX:

           theObject -> Add, object

     ARGUMENTS:

         object:     The object to be added to this one.

     KEYWORDS:

         _EXTRA:     Any keywords appropriate for the superclass Add method.

(See C:\IDL\Catalyst\source\widgets\contextmenubase__define.pro)

## CONTEXTMENUBASE::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTEXTMENUBASE::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain CONTEXTMENUBASE properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         _REF_EXTRA:     Any keywords appropriate for the superclass GetProperty method.

(See C:\IDL\Catalyst\source\widgets\contextmenubase__define.pro)

## CONTEXTMENUBASE::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTEXTMENUBASE::INIT

     PURPOSE:

           This is the CONTEXTMENUBASE object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

           theParent:         An object reference to a WIDGETATOM-subclassed object.
                              This is the same as using the PARENT keyword.

     KEYWORDS:

           ALIGN_BOTTOM:      Set this keyword to align the base widget with the bottom of the parent base.

           ALIGN_CENTER:      Set this keyword to align the base widget with the center of the parent base.

           ALIGN_LEFT:        Set this keyword to align the base widget with the left of the parent base.

           ALIGN_RIGHT:       Set this keyword to align the base widget with the right of the parent base.

           ALIGN_TOP:         Set this keyword to align the base widget with the top of the parent base.

           BASE_ALIGN_BOTTOM: Set this keyword to align the children of this base to the bottom of the base widget.

           BASE_ALIGN_CENTER: Set this keyword to align the children of this base to the center of the base widget.

           BASE_ALIGN_LEFT:   Set this keyword to align the children of this base to the left of the base widget.

           BASE_ALIGN_RIGHT:  Set this keyword to align the children of this base to the right of the base widget.

           BASE_ALIGN_TOP:    Set this keyword to align the children of this base to the top of the base widget.

           COLUMN:            Arrange the children of this base into this many columns.

           EXCLUSIVE:         Set this keyword to make an exclusive button base.

           FRAME:             Create a frame this many pixels wide around base.

           GRID_LAYOUT:       Set this keyword to lay children out in equally-spaced grid.

           KBRD_FOCUS_EVENTS: Set this keyworld to enable keyboard focus events.

           MAP:               Set this keyword to map (1) or unmap (0) the base. Mapped by default.

           NONEXCLUSIVE:      Set this keyword to make an non-exclusive button base.

           PARENT:            An object reference to a WIDGETATOM-subclassed object.

           ROW:               Arrange children of this base into this many rows.

           SCR_XSIZE:         Set the screen X size of the base to this many pixels. (Use discouraged.)

           SCR_YSIZE:         Set the screen Y size of the base to this many pixels. (Use discouraged.)

           SCROLL:            Set this keyword to add scroll bars to the base widget.

           SPACE:             Set this keyword to the number of pixels between children in the base.
                              Ignored for exclusive and non-exclusive bases.

           TITLE:             Set this keyword to a string that will be the title for this base widget.
                              A title becomes the tab value if the base widget is added to a tab widget.
                              A title only makes sense in this context.

           UNITS:             The units for measurments. The default is 0 for pixels. Other values are
                              1 for inches, and 2 for centimeters.

           X_SCROLL_SIZE:     The X size (pixels) of the scrollable window area.

           XOFFSET:           The horizontal space (pixels) from upper left corner of the display.

           XPAD:              The amount of horizontal space (pixels) to add to edges of children.

           XSIZE:             The X size of the widget.

           Y_SCROLL_SIZE:     The Y size (pixels) of the scrollable window area

           YPAD:              The amount of vertical space (pixels) to add to edges of children.

           YOFFSET:           The vertical space (pixels) from upper left corner of the display.

           YSIZE:             The Y size of the widget.

           _EXTRA:            Any keyword appropriate for the superclass INIT methods.

(See C:\IDL\Catalyst\source\widgets\contextmenubase__define.pro)

## CONTEXTMENUBASE::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTEXTMENUBASE::SETPROPERTY

     PURPOSE:

           This method allows the user to set the CONTEXTMENUBASE object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         _EXTRA:     Any keywords appropriate for the superclass SetProperty method.

(See C:\IDL\Catalyst\source\widgets\contextmenubase__define.pro)

## CONTEXTMENUBASE__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTEXTMENUBASE__DEFINE

     PURPOSE:

           The purpose of this routine is to provide a starting template
           for object creation.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("CONTEXTMENUBASE")

     BASEWIDGETES:

           WIDGETBASE
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { CONTEXTMENUBASE, $
                 INHERITS BASEWIDGET $
               }

     MESSAGES:

       None.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, April 17, 2003.

(See C:\IDL\Catalyst\source\widgets\contextmenubase__define.pro)

## CT_STRETCH::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CT_STRETCH::CLEANUP

     PURPOSE:

           This is the CT_STRETCH object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\ct_stretch__define.pro)

## CT_STRETCH::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CT_STRETCH::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the CT_STRETCH object. A
           control panel is a graphical user interface for setting object
           properties. If you create a control panel, the events are typically
           sent to the EVENTHANDLER method.

     SYNTAX:

           theObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window (i.e., a TOPLEVELBASE object).

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CatControlPanel::INIT method.

(See C:\IDL\Catalyst\source\widgets\ct_stretch__define.pro)

## CT_STRETCH::CONTROLPANEL_EVENTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CT_STRETCH::CONTROLPANEL_EVENTS

     PURPOSE:

           This method handles events from the control panel.

     SYNTAX:

           Called automatically when an event is generated.

     ARGUMENTS:

         event:        The event structure.

     KEYWORDS:

         None.

(See C:\IDL\Catalyst\source\widgets\ct_stretch__define.pro)

## CT_STRETCH::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CT_STRETCH::DRAW

     PURPOSE:

           This method draws the image histogram and image threshold lines in the draw widget.

     SYNTAX:

           ct_Stretch -> Draw

     ARGUMENTS:

         None.

     KEYWORDS:

         _EXTRA:  Any keywords appropriate for the superclass Add method.

(See C:\IDL\Catalyst\source\widgets\ct_stretch__define.pro)

## CT_STRETCH::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CT_STRETCH::EVENTHANDLER

     PURPOSE:

           This is the event handler method for the compound widget object.
           All internal events are handled here.

     SYNTAX:

           Called by the Catalyst system when an event for one of the compound
           object's widgets is generated.

     ARGUMENTS:

         event:    The event object from the system.

     KEYWORDS:

         None.

(See C:\IDL\Catalyst\source\widgets\ct_stretch__define.pro)

## CT_STRETCH::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CT_STRETCH::GETPROPERTY

     PURPOSE:

           This method enables the getting of the CT_STRETCH properties.

     SYNTAX:

           ct_Stretch -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         C_BG:          The name of the background color for the histogram plot. "Charcoal" by default.

         C_BORDER:      The name of the  color for the histogram plot. "Wheat" by default.

         C_CENTHRESH:   The name of the center theshold color for the histogram plot. "Sky Blue" by default.

         C_MAXTHRESH:   The name of the maximum theshold color for the histogram plot. "Green" by default.

         C_MINTHRESH:   The name of the minimum theshold color for the histogram plot. "Yellow" by default.

         COLORTABLE:    A (standard) color table index number.

         COLORTOOL:     A ColorTool object.

         FORMAT:        A format specification for formatting the MIN/MAX annotations.

         MAXTHRESH:     Set this keyword to the maximum threshold value.

         MINTHRESH:     Set this keyword to the minimum threshold value.

         RANGE:         The data range of the color table.

         XSIZE:         The X size of the histostretch draw widget.

         YSIZE:         The Y size of the histostretch draw widget.

         _REF_EXTRA:    Any keywords appropriate for the superclass GetProperty" method.

(See C:\IDL\Catalyst\source\widgets\ct_stretch__define.pro)

## CT_STRETCH::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CT_STRETCH::INIT

     PURPOSE:

           This is the CT_STRETCH object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         parent:        The parent object widget for this compound widget. Must be a BASEWIDGET.

     KEYWORDS:

         C_BG:          The name of the background color for the histogram plot. "Charcoal" by default.

         C_BORDER:      The name of the  color for the histogram plot. "Wheat" by default.

         C_CENTHRESH:   The name of the center theshold color for the histogram plot. "Sky Blue" by default.

         C_MAXTHRESH:   The name of the maximum theshold color for the histogram plot. "Green" by default.

         C_MINTHRESH:   The name of the minimum theshold color for the histogram plot. "Yellow" by default.

         COLORTABLE:    The color table index number. This keyword is ignored if the COLORTOOL keyword is used.

         COLORTOOL:     A ColorTool object can be passed into the program with this keyword. If it is, this
                        object is used as the color object for the internal image and the COLORTABLE keyword
                        is ignored. Also, the original R, G, and B vectors will be obtained from this object.

         FORMAT:        A format specification for formatting the MIN/MAX annotations. By default, "(F8.2)".

         FRAME:         Set this keyword to put a frame around the compound widget.

         MAXTHRESH:     Set this keyword to the maximum threshold value. Set to the maximum
                        value of the image data by default.

         MINTHRESH:     Set this keyword to the minimum threshold value. Set to the minimum
                        value of the image data by default.

         RANGE:         A two-element array specifying the minimum and maximum range of the color bar.
                        By default, [0, 255]. If the default range is used, the FORMAT keyword is set to '(I3)'.

         XSIZE:         The X size of the compound widget in pixels. By default, 50 pixels. (The minimum size
                        allowed is also 50 pixels.)

         YSIZE:         The Y size of the compound widget in pixels. By default, 300 pixels.

         _EXTRA:        Any keywords appropriate for the superclass INIT method.

(See C:\IDL\Catalyst\source\widgets\ct_stretch__define.pro)

## CT_STRETCH::RESET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CT_STRETCH::RESET

     PURPOSE:

           This method resets the histogram GUI, based on the display image current in the image object.

     SYNTAX:

           ct_Stretch -> DrawPlot

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\ct_stretch__define.pro)

## CT_STRETCH::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CT_STRETCH::SETPROPERTY

     PURPOSE:

           This method enables the setting of the CT_STRETCH properties.

     SYNTAX:

           ct_Stretch -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         C_BG:          The name of the background color for the histogram plot. "Charcoal" by default.

         C_BORDER:      The name of the  color for the histogram plot. "Wheat" by default.

         C_CENTHRESH:   The name of the center theshold color for the histogram plot. "Sky Blue" by default.

         C_MAXTHRESH:   The name of the maximum theshold color for the histogram plot. "Green" by default.

         C_MINTHRESH:   The name of the minimum theshold color for the histogram plot. "Yellow" by default.

         COLORTABLE:    A (standard) color table index number.

         COLORTOOL:     A ColorTool object.

         DRAW:          Set this keyword if you wish to call the DRAW method when all properties have been set.

         FORMAT:        A format specification for formatting the MIN/MAX annotations.

         MAXTHRESH:     Set this keyword to the maximum threshold value.

         MINTHRESH:     Set this keyword to the minimum threshold value.

         RANGE:         The data range of the color table.

         XSIZE:         The X size of the histostretch draw widget.

         YSIZE:         The Y size of the histostretch draw widget.

         _EXTRA:        Any keywords appropriate for the superclass SetProperty" method.

(See C:\IDL\Catalyst\source\widgets\ct_stretch__define.pro)

## CT_STRETCH__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CT_STRETCH__DEFINE

     PURPOSE:

           The purpose of this routine is to implement a colortable stretch
           widget for images. Essentially, it allows the use to window/level
           an image with respect to its display colors. No image data is changed.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           tlb = Obj_New("TOPLEVELBASE")
           stretch = Obj_New('CT_STRETCH', tlb, Range=[0, 255])
           tlb -> Draw

     SUPERCLASSES:

           BASEWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { CT_STRETCH, $
                 r: BytArr(256), $               ; The original red color vector.
                 g: BytArr(256), $               ; The original green color vector.
                 b: BytArr(256), $               ; The original blue color vector.
                 c_bg: "", $                     ; The name of the background color.
                 c_border: "", $                 ; The name of the border color.
                 c_centhresh: "", $              ; The name of the center threshold color.
                 c_maxthresh: "", $              ; The name of the maximum threshold color.
                 c_minthresh: "", $              ; The name of the minimum threshold color.
                 cenThresh: 0.0, $               ; The center of the threshold range.
                 closeto: 0.0, $                 ; A delta for establishing if you are "close" to a line.
                 colors: Obj_New(), $            ; A colortool object for image colors.
                 coords: Obj_New(), $            ; A coordinate object for the colorbar.
                 drawID: Obj_New(), $            ; The draw widget object.
                 format: "", $                   ; The string text format.
                 image: Obj_New(), $             ; The internal image that is displayed.
                 lineToMove: "", $               ; A string identifying which line we should move. MIN, MAX, CENTER.
                 maxThresh: 0.0, $               ; The maximum threshold.
                 minThresh: 0.0, $               ; The minimum threshold.
                 pixmapID: Obj_New(), $          ; The pixmap widget object.
                 minTextID: Obj_New(), $         ; The minimum Text Widget.
                 maxTextID: Obj_New(), $         ; The maximum Text Widget.
                 range: FltArr(2), $             ; The range of the color table.
                 INHERITS BASEWIDGET $           ; Inherits base widget capability.
               }

     MESSAGES:

           A message with a title of 'CT_STRETCH_CHANGE is sent whenever there is a change in
           a histogram threshold line. The image object passed into the INIT method is automatically
           registered to receive these messages. The DATA passed with the message contains the
           minumum and maximum threshold values, like this:

             DATA={maxThresh:self.maxThresh, minThresh:self.minThresh}

     MODIFICATION_HISTORY:

           Written by: David Fanning, 20 January 2004.
           Removed RETAIN=1 keyword on PIXMAPWIDGET to allow display on UNIX machines. 4 Jan 2008. DWF.

(See C:\IDL\Catalyst\source\widgets\ct_stretch__define.pro)

## CW_HISTOSTRETCH::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::CLEANUP

     PURPOSE:

           This is the CW_HISTOSTRETCH object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::DRAW

     PURPOSE:

           This method draws the image histogram and image threshold lines in the draw widget.

     SYNTAX:

           histoStretch -> Draw

     ARGUMENTS:

         None.

     KEYWORDS:

         _EXTRA:  Any keywords appropriate for the superclass Add method.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH::DRAWLINES

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::DRAWLINES

     PURPOSE:

           This method draws the image threshold lines on the histogram plot. It also
           updates the threshold value widgets in the interface.

     SYNTAX:

           histoStretch -> DrawLines

     ARGUMENTS:

         None.

     KEYWORDS:

         None.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH::DRAWPLOT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::DRAWPLOT

     PURPOSE:

           This method draws the image histogram plot, both in the display window
           and in a pixmap window for faster copying as the cursor moves the threshold
           lines.

     SYNTAX:

           histoStretch -> DrawPlot

     ARGUMENTS:

         None.

     KEYWORDS:

         None.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::EVENTHANDLER

     PURPOSE:

           This is the event handler method for the compound widget object.
           All internal events are handled here.

     SYNTAX:

           Called by the Catalyst system when an event for one of the compound
           object's widgets is generated.

     ARGUMENTS:

         event:    The event object from the system.

     KEYWORDS:

         None.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::GETPROPERTY

     PURPOSE:

           This method enables the getting of the CW_HISTOSTRETCH properties.

     SYNTAX:

           histoStretch -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         _REF_EXTRA:    Any keywords appropriate for the superclass GetProperty" method.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::INIT

     PURPOSE:

           This is the CW_HISTOSTRETCH object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         parent:        The parent object widget for this compound widget. A BASEWIDGET.

         image:         The image object that will be controlled by this compound widget object.
                        Data for the histogram will be obtained via the image object's GETDATA
                        method. The MESSAGEHANDLER method of th image object will be called when
                        the user causes the histogram threshold values to change.

     KEYWORDS:

         C_AXES:        The name of the axes color for the histogram plot. "Wheat" by default.

         C_BG:          The name of the background color for the histogram plot. "Charcoal" by default.

         C_CENTHRESH:   The name of the center theshold color for the histogram plot. "Sky Blue" by default.

         C_DATA:        The name of the data color for the histogram plot. "White" by default.

         C_MAXTHRESH:   The name of the maximum theshold color for the histogram plot. "Green" by default.

         C_MINTHRESH:   The name of the minimum theshold color for the histogram plot. "Yellow" by default.

         FORMAT:        A format specification for formatting the histogram annotations.

         FRAME:         Set this keyword to put a frame around the compound widget.

         MAXTHRESH:     Set this keyword to the maximum threshold value. Set to the maximum
                        value of the image data by default.

         MINTHRESH:     Set this keyword to the minimum threshold value. Set to the minimum
                        value of the image data by default.

         NBINS:         The number of bins in the histogram. Set to 100 by default.

         _EXTRA:        Any keywords appropriate for the superclass INIT method.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH::MESSAGEHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::MESSAGEHANDLER

     PURPOSE:

           This method responds to "messages" sent from other objects. It is called
           automatically by other objects. To receive messages, it is necessary to
           "register" with the messaging object.

     SYNTAX:

           None. Called by other objects.

     ARGUMENTS:

           TITLE:  The message title. This is the "name" of the message indicated when
                   the object registered for messages with the messaging object.

     KEYWORDS:

           DATA:   Information from the SENDER that may be relevant in processing the message.
                   Typically, an anonymous structure variable, although it could be anything at all.

           SENDER: An output keyword. This is the object reference of the object that is sending
                   the message.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH::NOTIFY_REALIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::NOTIFY_REALIZE

     PURPOSE:

           When the compound object widget is realized, it should draw the histogram plot in its
           display window.

     SYNTAX:

           self -> Notify_Realize, object

     ARGUMENTS:

           object:    The object that was realized (often the self object).

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH::RESET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::RESET

     PURPOSE:

           This method resets the histogram GUI, based on the display image current in the image object.

     SYNTAX:

           histoStretch -> DrawPlot

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH::SETPROPERTY

     PURPOSE:

           This method enables the setting of the CW_HISTOSTRETCH properties.

     SYNTAX:

           histoStretch -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         C_AXES:        The name of the axes color for the histogram plot. "Wheat" by default.

         C_BG:          The name of the background color for the histogram plot. "Charcoal" by default.

         C_CENTHRESH:   The name of the center theshold color for the histogram plot. "Sky Blue" by default.

         C_DATA:        The name of the data color for the histogram plot. "White" by default.

         C_MAXTHRESH:   The name of the maximum theshold color for the histogram plot. "Green" by default.

         C_MINTHRESH:   The name of the minimum theshold color for the histogram plot. "Yellow" by default.

         XSIZE:         The X size of the histostretch draw widget.

         YSIZE:         The Y size of the histostretch draw widget.

         _EXTRA:        Any keywords appropriate for the superclass SetProperty" method.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## CW_HISTOSTRETCH__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CW_HISTOSTRETCH__DEFINE

     PURPOSE:

           The purpose of this routine is to implement a histogram stretch interactive
           widget for images.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           tlb = Obj_New("TOPLEVELBASE")
           stretch = Obj_New('CW_HISTOSTRETCH', tlb, imageObject)

     SUPERCLASSES:

           BASEWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { CW_HISTOSTRETCH, $
                 image: Obj_New(), $             ; The image object we are interacting with.
                 drawID: Obj_New(), $            ; The draw widget object.
                 pixmapID: Obj_New(), $          ; The pixmap widget object.
                 minThresh: 0.0, $               ; The minimum threshold.
                 maxThresh: 0.0, $               ; The maximum threshold.
                 cenThresh: 0.0, $               ; The center of the threshold range.
                 minTextID: Obj_New(), $         ; The minimum Text Widget.
                 maxTextID: Obj_New(), $         ; The maximum Text Widget.
                 cenTextID: Obj_New(), $         ; The center Text Widget.
                 format: "", $                   ; The string text format.
                 colors: Obj_New(), $            ; A colortool object.
                 coords: Obj_New(), $            ; A coordinates object.
                 xdata: Ptr_New(), $             ; The X data for the histogram plot.
                 histoplot: Ptr_New(), $         ; The histogram plot data itself.
                 closeto: 0.0, $                 ; A delta for establishing if you are "close" to a line.
                 lineToMove: "", $               ; A string identifying which line we should move. MIN, MAX, CENTER.
                 range: FltArr(2), $             ; The range of the histogram plot.
                 INHERITS BASEWIDGET $           ; Inherits base widget capability.
               }

     MESSAGES:

           A message with a title of 'HISTOSTRETCH_CHANGE is sent whenever there is a change in
           a histogram threshold line. The image object passed into the INIT method is automatically
           registered to receive these messages. The DATA passed with the message contains the
           minumum and maximum threshold values, like this:

             DATA={maxThresh:self.maxThresh, minThresh:self.minThresh}

     MODIFICATION_HISTORY:

           Written by: David Fanning, July 17, 2003.

(See C:\IDL\Catalyst\source\widgets\cw_histostretch__define.pro)

## DRAWBUTTONWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWBUTTONWIDGET

     PURPOSE:

           The purpose of this routine is to construct a button widget from a draw widget.
           The button is constucted using the system colors of the user's computer, so it
           could look differently on each individual's computer.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object compound widgets.

     SYNTAX:

           buttonWidget = Obj_New("DrawButtonWidget", theParent)

     SUPERCLASSES:

           DRAWWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     EVENT_STURCTURE:

       event  = { DRAWBUTTONWIDGET_EVENT, $
                    ID:Obj_New(), $            ; The widget object that caused the event.
                    TOP: Obj_New(), $          ; The object at the top of the object hierarchy.
                    HANDLER:Obj_New(), $       ; The event handler object.
                    EVENT_NAME: "", $          ; The name of the event. (DRAWBUTTONWIDGET_EVENT)
                    NAME: "", $                ; The name of the DrawButtonWidget object.
                    SELECT:0L $                ; Always set to 1 for button events.
                }

     CLASS_STRUCTURE:

       class = { DRAWBUTTONWIDGET, $
                 colors: Obj_New(), $         ; A SystemColors object for drawing colors.
                 event_handler:Obj_New(), $   ; The real event handler object(s) for the DROPLISTWIDGET.
                 event_method_real: "", $     ; The event method assigned by the user to this object widget.
                 fontname: "", $              ; The name of a true-type font to use for button text.
                 fontsize: 0.0, $             ; The font size of button text.
                 fonttype: 0L, $              ; The type of font you want (e.g, !P.Font).
                 offcenter: 0L, $             ; An offset from center of widget.
                 pixmap: Obj_New(), $         ; The pixmap for buffering output.
                 selected: 0L, $              ; A flag that indicates if the button has a selected (1) or unselected (0) appearance.
                 sensitive: 0L, $             ; A flag that indicates if the button is sensitive (1) or insensitive (0).
                 xsize: 0L, $                 ; The X size of the widget.
                 ysize: 0L, $                 ; The Y size of the widget.
                 value: "", $                 ; The button value (text).
                 INHERITS DrawWidget $
               }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 21 January 2004.
           Added NORELEASE keyword to INIT and SETPROPERTY methods. 10 May 2004. DWF.

(See C:\IDL\Catalyst\source\widgets\drawbuttonwidget__define.pro)

## DRAWBUTTONWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWBUTTONWIDGET::ADD

     PURPOSE:

           This method is a dummy ADD method that ensures nothing can be added to this object.
           This object is meant to be a terminal object.

     SYNTAX:

           Not used.

     ARGUMENTS:

           object: The object to add to the container.

     KEYWORDS:

           _EXTRA: Any keyword appropriate for the superclass ADD methods.

(See C:\IDL\Catalyst\source\widgets\drawbuttonwidget__define.pro)

## DRAWBUTTONWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWBUTTONWIDGET::CLEANUP

     PURPOSE:

           This is the DRAWBUTTONWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\drawbuttonwidget__define.pro)

## DRAWBUTTONWIDGET::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWBUTTONWIDGET::DRAW

     PURPOSE:

           Draws the button appearance in the draw widget. Superclass DRAW methods are NOT called,
           since this is a terminal draw event.

     SYNTAX:

           buttonObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA: Any keyword appropriate for the WIDGETATOM::DRAW method.

(See C:\IDL\Catalyst\source\widgets\drawbuttonwidget__define.pro)

## DRAWBUTTONWIDGET::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWBUTTONWIDGET::EVENTHANDLER

     PURPOSE:

           This is the event handler method of the object. The purpose is to send an event to the
           real event handler on a button UP event that is within the confines of the button.
           A DRAWBUTTONWIDGET event is sent to the parent object's event handler.

     SYNTAX:

           widgetObject -> EventHandler, event, object

     ARGUMENTS:

           EVENT:  The event created by the droplist widget.

           OBJECT: The object reference of the widget object causing the event.

(See C:\IDL\Catalyst\source\widgets\drawbuttonwidget__define.pro)

## DRAWBUTTONWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWBUTTONWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to get the object's properties.

     SYNTAX:

           buttonObject -> GetProperty, VALUE=buttonValue

     ARGUMENTS:

           None.

     KEYWORDS:

           FONTNAME:       The name of the font to used for button text.

           FONTSIZE:       The size of the font. .

           FONTTYPE:       The type of font used for button text. (-1 Hershey, 0 Hardware, 1 True-Type)..

           OFFCENTER:      The number of pixels in Y direction that text is offset.

           SELECTED:       Set if the button has a selected appearance.

           SENSITIVE:      Set if the button is sensitive.

           VALUE:          The text value of the button.

           _REF_EXTRA:     Any keyword appropriate for the GETPROPERTY method of superclass objects.

(See C:\IDL\Catalyst\source\widgets\drawbuttonwidget__define.pro)

## DRAWBUTTONWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWBUTTONWIDGET::INIT

     PURPOSE:

           This is the BUTTONWIDGET object class initialization method.

     ARGUMENTS:

           parent:        The parent object reference.

     KEYWORDS:

           FONTNAME:       The name of the font to use for button text. Default is "". Only valid if FONTTYPE=1.

           FONTSIZE:       The size of the font. Not valid with FONTTYPE=0. Default is 1.0.

           FONTTYPE:       The type of font to use. (-1 Hershey, 0 Hardware, 1 True-Type). Default is 0.

           NORELEASE:      If this keyword is set, the button will assume a SELECTED appearance upon
                           selection.

           OFFCENTER:      The number of pixels in Y direction that text should be offset. Default is 5.

           SELECTED:       Set this keyword to give the button a selected appearance.

           SENSITIVE:      Set this keyword to make the button sensitive (1) or insensitive (0). Default is 1.

           UNITS:          The units for measurments. The default is 0 for pixels. Other values are
                           1 for inches, and 2 for centimeters.

           VALUE:          The initial text value of the button.

           XOFFSET:        The horizontal space (pixels) from upper left corner of the parent bullitin-board base.

           XSIZE:          The X size of the button.

           YOFFSET:        The vertical space (pixels) from upper left corner of the parent bullitin-board base.

           YSIZE:          The Y size of the button.

           _EXTRA:         Any extra keywords are passed along to the DRAWWIDGET superclass object.

(See C:\IDL\Catalyst\source\widgets\drawbuttonwidget__define.pro)

## DRAWBUTTONWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWBUTTONWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the object's properties.

     SYNTAX:

           buttonObject -> SetProperty, VALUE=buttonValue

     ARGUMENTS:

           None.

     KEYWORDS:

           DRAW:           Set this keyword if you wish to draw the button after properties have been set.

           FONTNAME:       The name of the font to use for button text. Only valid if FONTTYPE=1.

           FONTSIZE:       The size of the font. Not valid with FONTTYPE=0.

           FONTTYPE:       The type of font to use. (-1 Hershey, 0 Hardware, 1 True-Type).

           NORELEASE:      If this keyword is set, the button will assume a SELECTED appearance upon
                           selection.

           OFFCENTER:      The number of pixels in Y direction that text should be offset.

           SELECTED:       Set this keyword to give the button a selected appearance.

           SENSITIVE:      Set this keyword to make the button sensitive (1) or insensitive (0).

           VALUE:          The initial text value of the button.

           _EXTRA:         Any keyword appropriate for the SETPROPERTY method of superclass objects.

(See C:\IDL\Catalyst\source\widgets\drawbuttonwidget__define.pro)

## DRAWWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET

     PURPOSE:

           The purpose of this routine is to implement a draw widget as an object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           drawWidget = Obj_New("DrawWidget", theParent)

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     MESSAGES:

           RESIZEDDRAWWIDGET:  If the XSIZE or YSIZE keywords are used with the SETPROPERTY method, a
                               RESIZEDRAWWIDGET message is sent to registered users (often a pixmap).
                               The DATA passed with the message is a two-element array containing the
                               new X and Y size of the draw widget canvas.

           DRAWWIDGETREALIZED: When the Draw Widget is realized a DRAWWIDGETREALIZED message is sent to
                               registered users.

           DRAWWIDGET_DRAW:    When the Draw Widget draws itself a DRAWWIDGET_DRAW message is sent to
                               registered users. If it is available, the REQUESTER of the DRAW is sent
                               with the message as the DATA of the message.

     CLASS_STRUCTURE:

       class = { DrawWidget,          $
                 _coords    : OBJ_NEW(), $   ; A CATCOORD object of some type.
                 _colors    : OBJ_NEW(), $   ; A COLORTOOL object for setting up color tables.
                 _drawBase   : OBJ_NEW (), $ ; A top-level base widget object, if required.
                 _noDraw     : 0B, $         ; Flag that, if set, inhibits draw method calls.
                 _videoRAM   : 0L, $         ; amount of video memory consumed by the widget
                 _psconfig   : OBJ_NEW(), $  ; A PostScript configuration object.
                 _eraseWindow: 0B, $         ; A flag that indicates the window should be erased before drawing.
                 _refreshbuffer: OBJ_NEW(), $; The identifier of a PIXMAPWIDGET that can carry out window refresh.
                 INHERITS WidgetAtom $       ; INHERITS WIDGETATOM capabilities.
                 }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 28 June 2002.
           Added a RESIZEDRAWWIDGET message in SetProperty method. 7 December 2004. DWF.
           I made the default background for draw widget's white to facilitate PostScript
             output. Default annotation colors are not black. 11 Dec 2004. DWF.
           Added refresh buffer capability along with REFRESH method. 23 January 2005. DWF.
           Changed the INITIALCOLOR back to "black". Tired of fighting it... 5 July 2005. DWF.
           Fixed a problem that occurred when setting XSIZE, but not YSIZE. 29 Aug 2005. DWF.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::ADD

     PURPOSE:

           This method adds an object to the DrawWidget object container. The DrawWidget
           object's DRAW method is called automatically, unless adviced otherwise.

     SYNTAX:

           thisDrawObj -> Add, object

     ARGUMENTS:

           object:      The object to add to the draw widget container.

     KEYWORDS:

           DRAW:        If this keyword is set, the DRAW method is called as soon as the object has
                        been added to the DrawWidget object container.

           SETWINDOW:   Set this keyword, if you wish to add this draw widget as the display window
                        for the object being added.

           USE_COLORS:  If this keyword is set, replace the COLORTOOL object (if any) in the object
                        being added, with the one associated with this DrawWidget object.

           USE_COORDS:  If this keyword is set, replace the CATCOORD object (if any) in the object
                        being added, with the one associated with this DrawWidget object.

           _EXTRA:      Any keyword appropriate for the superclass ADD methods.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::APPLYCOLORS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::APPLYCOLORS

     PURPOSE:

           This method sets up the colors for the data object if they exist. For this
           reason, sub-classes *MUST* call this method at the *START* of their draw methods.

     SYNTAX:

           self -> ApplyColors

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::APPLYCOORDS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::APPLYCOORDS

     PURPOSE:

           This method sets up the coordinates for the data object if they exist. For this
           reason, sub-classes *MUST* call this method at the *START* of their draw methods.

     SYNTAX:

           self -> ApplyCoords

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::CLEANUP

     PURPOSE:

           This is the DRAWWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the  superclass CLEANUP methods.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::CONTROLPANELEVENTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            DrawWidget::CONTROLPANELEVENTS

     PURPOSE:

            This method is the event handler for the DrawWidget object's ControlPanel.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::COPY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::COPY

     PURPOSE:

           This method copies the contents of the draw widget to the current graphics window using
           the DEVICE COPY method. The DEVICE COPY command looks like this:

           DEVICE, COPY=[origin[0], origin[1], extent[0], extent[1], destination[0], destination[1], drawWindowID]

           If the IMAGE keyword is used, the window contents are stored in an image variable
           and the window contents are *not* copied into the current graphics window.

     SYNTAX:

           thisDrawObj -> Copy

     ARGUMENTS:

           None.

     KEYWORDS:

           DESINATION: A two-element array specifying the device coordinates of the lower-left
                       corner of the copied region in the destination window. By default: [0,0].

           EXTENT:     A two-element array specifying the number of columns and rows to copy.
                       If missing, the entire draw widget window is copied.

           IMAGE:      Set this keyword to a named IDL variable that returns a copy of the draw
                       widget contents as an image. (Output). If this keyword is used, the draw
                       widget contents are stored here, rather than copied to the current graphics
                       window.

           ORIGIN:     A two-element array specifying the device coordinates of the lower-left
                       corner of region in the draw widget window to be copied. By default: [0,0].

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::DRAW

     PURPOSE:

           This method draws the contents of the draw widget object's container in the draw widget window.
           It does this by calling the DRAW methods of any objects found in its container object.
    ;
     SYNTAX:

           thisDrawObj -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           BACKGROUND_COLOR: Set this keyword to the name of the background color. Used
                             only when erasing window contents. On 8-bit displays, this
                             will load a color in !P.BACKGROUND. The color "BLACK" by default.

           ERASE_WINDOW:     Set this keyword to erase the window before drawing contents.

           HOURGLASS:        Set this keyword to enable the hourglass cursor for the draw operation.

           REQUESTER:        This optional keyword is set to the object that requests a DRAW of the
                             DrawWidget. This is helpful sometimes when DRAWWIDGET_DRAW messages
                             are received by other objects. The object reference is passed on as
                             the DATA in the DRAWWIDGET_DRAW message.

           TARGET_WINDOW:    Normally the draw widget draws into its own window. But, sometimes you
                             want the draw widget to draw somewhere else. Setting this keyword to
                             another DRAWWIDGET or PIXMAPWIDGET object reference allows graphics
                             to be drawn there.

           TARGETS:          Typically, calling the DRAW method of a DrawWidget will call the DRAW
                             method of any objects in its container. However, if the TARGETS keyword
                             is set to an object reference (or array of object references), only these
                             objects will be drawn. This would allow you, for example, to re-draw only
                             a single image object in a window with several image objects.

           _EXTRA:           Any extra keywords appropriate for superclass DRAW methods.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to obtain the DrawWidget object's properties

     SYNTAX:

           aDrawWidget -> GetProperty, WINDOW_ID=wid

     ARGUMENTS:

           None.

     KEYWORDS:

           BUTTON_EVENTS:    Returns a 1 if button events are on for the draw widget. Returns 0 otherwise.

           COLOR_OBJECT:     The COLORTOOL object associated with this draw widget.

           CONTEXT_EVENTS:   Returns a 1 if context events are on, a 0 otherwise.

           COORD_OBJECT:     The CATCOORD object associated with this draw widget.

           ERASE_WINDOW:     Returns a 1 if the ERASE_WINDOW keyword is set. Returns 0 otherwise.

           EXPOSE_EVENTS:    Returns a 1 if expose events are on for the draw widget. Returns 0 otherwise.

           INITIAL_COLOR:    The name of the initial color for the draw widget.

           KEYBOARD_EVENTS:  Returns a 1 if keyboard events are on for the draw widget. Returns 0 otherwise.

           MOTION_EVENTS:    Returns a 1 if motion events are on for the draw widget. Returns 0 otherwise.

           NO_DRAW:          Returns a 1 if drawing is turned off for the draw widget. Returns 0 otherwise.

           REFRESHBUFFER:    An object reference to a PIXMAPWIDGET object that can serve to refresh the
                             draw widget display.

           TOOLTIP:          The tooltip associated with this widget object. Null string if no tooltip.

           VIEWPORT_EVENTS:  Returns a 1 if scroll events are on for the draw widget. Returns 0 otherwise.

           WHEEL_EVENTS:     Returns a 1 if wheel events are on for the draw widget. Returns 0 otherwise.

           WINDOWID:         The window index number of the draw widget.

           _REF_EXTRA:       Any keywords appropriate for the superclass GetProperty methods.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::INIT

     PURPOSE:

           This is the DRAWWIDGET object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

           theParent - An object reference to a WIDGETATOM-subclassed object.
               This is the same as using the PARENT keyword.

     KEYWORDS:

           APP_SCROLL:      A memory-saving way of scrolling draw widgets. See WIDGET_DRAW documentation.

           BUTTON_EVENTS:   Set this keyword to enable widget button events in the draw widget.

           COLOR_OBJECT:    Use this keyword to load a COLORTOOL object for setting up colors
                            for data display.

           CONTEXT_EVENTS:  Set this keyword to turn context events on for this widget object..

           COORD_OBJECT:    Use this keyword to load a CATCOORD object for setting up
                            the data coordinate system for data display.

           ERASE_WINDOW:    Set this keyword to cause the draw widget to execute an ERASE before drawing.

           EXPOSE_EVENTS:   Set this keyword to enable widget expose events in the draw widget.

           FRAME:           Create a frame this many pixels wide around the widget.

           IGNORE_ACCELERATORS: Set this keyword to specify what WIDGET_BUTTON accelerators are to be
                            ignored when this draw widget has keyboard focus. Setting IGNORE_ACCELERATORS
                            allows a defined list of accelerators to be processed by the draw widget instead
                            of by the conflicting accelerated button. Valid values are:

                                 A string or string array containing any value that is legal for the
                                 ACCELERATOR keyword for BUTTONWIDGET, or

                                 1 -- Indicating that all accelerators should be ignored.

                            Ordinarily, accelerators are processed before keyboard events reach the
                            widget that has the keyboard focus. Setting IGNORE_ACCELERATORS allows a
                            defined list of accelerators to be processed by the draw widget instead of
                            by associated buttons or menu items. Once the draw widget loses focus, all
                            specified accelerators are automatically re-enabled.

           INITIAL_COLOR:   The name of the initial color for the draw widget. Used when realized and
                            if the draw widget is set up to erase before display (i.e., ERASE_WINDOW=1).

           KEYBOARD_EVENTS: Set this keyword to enable keyboard events for this widget. Setting
                            the value to 1 will enable "normal" keys. Setting the value to 2 will enable
                            modifier keys. See the IDL documenation for WIDGET_DRAW for details.

           MOTION_EVENTS:   Set this keyword to enable widget motion events in the draw widget.

           NODRAW:          Set this keyword to prohibit re-drawing via the DRAW method.

           PARENT:          An object reference to a WIDGETATOM-subclassed object.

           REFRESHBUFFER:   An object reference to a PIXMAPWIDGET object that can serve to refresh the
                            draw widget display. The draw widget takes no parental interest in this object
                            and doesn't destroy it when the draw widget is destroyed. The refresh buffer is
                            accessed via the REFRESH method. If no buffer is present, the REFRESH method
                            simply calls the DRAW method for the object.

           RETAIN:          Set this keyword to determine how backing store is handled. See IDL WIDGET_DRAW
                            documentation for details. Set to 1 by default for Windows machines and to 2 otherwise.

           SCR_XSIZE:       Set the screen X size of the base to this many pixels. (Use discouraged.)

           SCR_YSIZE:       Set the screen Y size of the base to this many pixels. (Use discouraged.)

           SCROLL:          Set this keyword to add scroll bars to the draw widget.

           TOOLTIP:         Set this keyword to a string that will be displayed if the cursor hovers
                            over the draw widget.

           UNITS:           The units for measurments. The default is 0 for pixels. Other values are
                            1 for inches, and 2 for centimeters.

           VIEWPORT_EVENTS: Set this keyword to enable widget viewport scroll events in the draw widget.

           WHEEL_EVENTS:    Set this keyword to enable wheel events in the draw widget.

           X_SCROLL_SIZE:   The X size (pixels) of the scrollable window area.

           XOFFSET:         The horizontal space (pixels) from upper left corner of the display.

           XSIZE:           The X size of the widget. (300 pixels by default.)

           Y_SCROLL_SIZE:   The Y size (pixels) of the scrollable window area

           YOFFSET:         The vertical space (pixels) from upper left corner of the display.

           YSIZE:           The Y size of the widget. (300 pixels by default.)

           _EXTRA:          Any keyword appropriate for the superclass INIT methods.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::MESSAGEHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::MESSAGEHANDLER

     PURPOSE:

           This method receives notification of a message call from another object's SENDMESSAGE
           method.

     SYNTAX:

           thisObject -> MessageHandler, title, SENDER=sender, MESSAGE=message

     ARGUMENTS:

           TITLE:   The title of the message.

     KEYWORDS:

           DATA:    A keyword that contains any information the sender wishes to pass
                    with the message. It can be empty.

           SENDER:  The object that generated the message

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::NOTIFY_REALIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::NOTIFY_REALIZE

     PURPOSE:

           At realization, the draw widget draws it's contents.

     SYNTAX:

           self -> Notify_Realize, object

     ARGUMENTS:

           OBJECT: The object that was realized (often the self object).

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::OUTPUT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::Output

     PURPOSE:

           This method will create graphic output files of the draw widget contents. The default
           is to create JPEG output files unless other output is selected via keywords.

     SYNTAX:

           drawWidget -> Output

     ARGUMENTS:

           None.

     KEYWORDS:

          BMP:        Set this keyword to create a BMP output file.

          JPEG:       Set this keyword to create a JPEG output file.

          FILENAME:   Set this keyword to the name of the output file. If the filename
                      is specified without a file extension, the appropriate file
                      extension will be added to the filename, based on the type of
                      the file.

          NODIALOG:   Set this keyword if you want to write the file directly,
                      without giving the user a chance to change the filename.

          PNG:        Set this keyword to create a PNG output file.

          POSTSCRIPT: Set this keyword to create a PostScript output file.

          TIFF:       Set this keyword to create a TIFF output file.

          TYPE        Can be set to the type of file to write. Use this instead of
                      setting BMP, JPEG,PNG, or TIFF keywords: TYPE='JPEG'. The
                      primary purpose of this is to make event handlers easier to write.

          _EXTRA:     Any keywords appropriate for the WRITE_*** routines.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::REFRESH

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::REFRESH

     PURPOSE:

           This method refreshs the draw widget from a refresh buffer, if available.
           If not available, the method simply calls the DRAW method of the object.
    ;
     SYNTAX:

           thisDrawObj -> Refresh

     ARGUMENTS:

           None.

     KEYWORDS:

           REQUESTER:        This optional keyword is set to the object that requests a DRAW of the
                             DrawWidget. This is helpful sometimes when DRAWWIDGET_DRAW messages
                             are received by other objects. The object reference is passed on as
                             the DATA in the DRAWWIDGET_DRAW message.

           TARGET_WINDOW:    Normally the draw widget draws into its own window. But, sometimes you
                             want the draw widget to draw somewhere else. Setting this keyword to
                             another DRAWWIDGET or PIXMAPWIDGET object reference allows graphics
                             to be drawn there.

           _EXTRA:           Any extra keywords appropriate for the DRAW method.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::RESIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::RESIZE

     PURPOSE:

           This method resizes the canvas area of the draw widget.
    ;
     SYNTAX:

           thisDrawObj -> Resize, xsize, ysize

     ARGUMENTS:

           XSIZE:    The new X size of the canvas area of the draw widget, in pixels.

           YSIZE:    The new Y size of the canvas area of the draw widget, in pixels.

     KEYWORDS:

           DRAW:     Set this keyword to call the draw method when the draw widget
                     resizing is completed.

           SCREEN:   Normally, the XSIZE and YSIZE keywords apply to the draw widget canvas.
                     If the SCREEN keyword is set, the keywords apply to the screen coordinates
                     of the draw widget. (It's actual size on the display. Usually about 6 pixels
                     larger than the canvas.)

           VIEWPORT: Normally, the XSIZE and YSIZE keywords apply to the draw widget canvas.
                     If the VIEWPORT keyword is set, the keywords apply to the viewport size
                     of the draw widget.

           _EXTRA:   Any extra keywords appropriate for the DRAW method.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::SELECTOBJECTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::SELECTOBJECTS

     PURPOSE:

           This method searches through the object hierarchy, rooted at the draw widget,
           for selectable objects. Valid objects are returned in an object array.

     SYNTAX:

           selectableObjects = drawObj->SelectObjects()

     ARGUMENTS:

           X:      The X location of the selection in the draw widget window.
           Y:      The Y location of the selection in the draw widget window.

     KEYWORDS:

           COUNT:  Returns the number of valid objects found.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the DrawWidget object's properties

     SYNTAX:

           aDrawWidget -> SetProperty, BUTTON_EVENTS=1

     ARGUMENTS:

           None.

     KEYWORDS:

           BUTTON_EVENTS:    Turns draw widget button events on if set to 1. Events off if set to 0.

           COLOR_OBJECT:     Use this keyword to load a COLORTOOL object for setting up colors
                             for data display.

           CONTEXT_EVENTS:   Set to 1 to turn context events on for the base widget.

           COORD_OBJECT:     Use this keyword to load a CATCOORD object for setting up
                             the data coordinate system for data display.

           ERASE_WINDOW:     Set this keyword to cause the draw widget to execute an ERASE before drawing.

           EXPOSE_EVENTS:    Turns draw widget expose events on if set to 1. Events off if set to 0.

           IGNORE_ACCELERATORS: Set this keyword to specify what WIDGET_BUTTON accelerators are to be
                            ignored when this draw widget has keyboard focus. Setting IGNORE_ACCELERATORS
                            allows a defined list of accelerators to be processed by the draw widget instead
                            of by the conflicting accelerated button. Valid values are:

                                 A string or string array containing any value that is legal for the
                                 ACCELERATOR keyword for BUTTONWIDGET, or

                                 1 -- Indicating that all accelerators should be ignored.

                            Ordinarily, accelerators are processed before keyboard events reach the
                            widget that has the keyboard focus. Setting IGNORE_ACCELERATORS allows a
                            defined list of accelerators to be processed by the draw widget instead of
                            by associated buttons or menu items. Once the draw widget loses focus, all
                            specified accelerators are automatically re-enabled.
           INITIAL_COLOR:    The name of the initial color for the draw widget. Used when realized and
                             if the draw widget is set up to erase before display (i.e., ERASE_WINDOW=1).
                             By default, set to "WHITE" to facilitate output to PostScript.

           INPUT_FOCUS:      Set this keyword to configure the draw widget to receive keyboard focus.

           KEYBOARD_EVENTS:  Turns draw widget keyboard events on.

           MOTION_EVENTS:    Turns draw widget motion events on if set to 1. Events off if set to 0.

           NO_DRAW:          Prevents drawing of contents if set to 1. Allows drawing if set to 0.

           REFRESHBUFFER:    An object reference to a PIXMAPWIDGET object that can serve to refresh the
                             draw widget display. The draw widget takes no parental interest in this object
                             and doesn't destroy it when the draw widget is destroyed.

           SCREEN:           Normally, the XSIZE and YSIZE keywords apply to the draw widget canvas.
                             If the SCREEN keyword is set, the keywords apply to the screen coordinates
                             of the draw widget. (It's actual size on the display. Usually about 6 pixels
                             larger than the canvas.)

           SET_DRAW_VIEW:    A two-element array that defines the current position of the viewport in UNITS
                             relative to the lower-left corner of the draw widget.

           TOOLTIP:          A short string that will be displayed if the cursor hovers over this widget.

           VIEWPORT_EVENTS:  Turns draw widget viewport events on if set to 1. Events off if set to 0.

           VIEWPORT_SIZE:    Normally, the XSIZE and YSIZE keywords apply to the draw widget canvas.
                             If the VIEWPORT_SIZE keyword is set, the keywords apply to the viewport size
                             of the draw widget.

           XSIZE:            The new X size of the canvas area of the draw widget, in pixels.

           YSIZE:            The new Y size of the canvas area of the draw widget, in pixels.

           _EXTRA:           Any keywords appropriate for the superclass SetProperty methods.

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::SETWINDOW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::SETWINDOW

     PURPOSE:

           This method sets the window index number of the draw widget to be the
           current graphics window.

     SYNTAX:

           thisDrawObj -> SetWindow

     ARGUMENTS:

           None.

     KEYWORDS:

           None

(See C:\IDL\Catalyst\source\widgets\drawwidget__define.pro)

## DRAWWIDGET::SET_WINDOW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DRAWWIDGET::SET_WINDOW

     PURPOSE:

           This method simply overwrites the DRAWWIDGET Set_Window method to do nothing.

     SYNTAX:

           thisDrawObj -> Set_Window

     ARGUMENTS:

           None.

     KEYWORDS:

           None

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## DROPLISTWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DROPLISTWIDGET

     PURPOSE:

           The purpose of this routine is to implement a droplist widget in an object
           structure. This routine is a compound widget in order to give the droplist
           more functionality than the current IDL droplist widget. In particular, it
           is much easier to keep track of the current value of the droplist in this
           implementation.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Compound object widgets.

     SYNTAX:

           aDroplist = Obj_New("DROPLISTWIDGET", parent, VALUE=['pig', 'cow', coyote'], INDEX=2)

     SUPERCLASSES:

           BASEWIDGET
           WIDGETATOM
           ATOM
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { DROPLISTWIDGET, $                ; The DROPLISTWIDGET object class definition.
                    _droplistID:0L, $             ; The droplist widget identifier.
                    _event_handler:Obj_New(), $   ; The assigned event handler object for the DROPLISTWIDGET.
                    _event_method_real: "", $     ; The event method assigned by the user to this object widget.
                    _index:0L, $                  ; The index number of the current selecton.
                    _title: "", $                 ; The droplist title.
                    _selection:Ptr_New(), $       ; The current droplist selection.
                    _value: Ptr_New(), $          ; The values or selections on the droplist.
                    INHERITS BASEWIDGET $
                }

     EVENT_STRUCTURE:

           This is the event structure sent to the parent widget object.

       event  = { DROPLISTWIDGET_EVENT, $
                    ID:Obj_New(), $            ; The widget object that caused the event.
                    TOP: Obj_New(), $          ; The object at the top of the object hierarchy.
                    HANDLER:Obj_New(), $       ; The event handler object.
                    EVENT_NAME: "", $          ; The name of the event, DROPLISTWIDGET_EVENT.
                    NAME: "", $                ; The name of the object.
                    INDEX:0L, $                ; The index number of the current selection.
                    SELECTION:Ptr_New() $      ; The current droplist selection (i.e., value[index]).
          }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 23 July 2002.

(See C:\IDL\Catalyst\source\widgets\droplistwidget__define.pro)

## DROPLISTWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DROPLISTWIDGET::CLEANUP

     PURPOSE:

           This is the DROPLISTWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the  superclass CLEANUP methods.

(See C:\IDL\Catalyst\source\widgets\droplistwidget__define.pro)

## DROPLISTWIDGET::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DROPLISTWIDGET::EVENTHANDLER

     PURPOSE:

           This is the event handler method of the object. The purpose is to set the
           object's current selection and index number. A DROPLISTWIDGET event is
           sent to the parent object's event handler.

     SYNTAX:

           widgetObject -> EventHandler, event

     ARGUMENTS:

           EVENT:  The event created by the droplist widget.

(See C:\IDL\Catalyst\source\widgets\droplistwidget__define.pro)

## DROPLISTWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DROPLISTWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to obtain the DroplistWidget object's properties

     SYNTAX:

           aDroplistWidget -> GetProperty, Selection=currentSelection

     ARGUMENTS:

           None.

     KEYWORDS:

           EVENT_OBJECTS:   Normally, the EVENT_OBJECTS are obtained in the CATATOM object, but the
                            DROPLISTWIDGET is compound object, so we have to intercept the process
                            and get the event object that will *eventually* receive the DROPLISTWIDGET event.

           DYNAMIC_RESIZE : Returns a 1 if the droplist is configued for dynamic resizing. Otherwise, 0.

           INDEX:           Returns the index number of the current selection.

           NUMBER:          Returns the number of selections available in the droplist.

           SELECTION:       Returns the current selection in the droplist values.

           VALUES:          Returns the current possible values or selections in the droplist.

           _REF_EXTRA:      Any keywords appropriate for the superclass GetProperty methods.

(See C:\IDL\Catalyst\source\widgets\droplistwidget__define.pro)

## DROPLISTWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DROPLISTWIDGET::INIT

     PURPOSE:

           This is the DROPLISTWIDGET object class initialization method

     SYNTAX:

           aDropList = Obj_New('DROPLISTWIDGET')

     ARGUMENTS:

           theParent:     An object reference to a WIDGETATOM-subclassed object.
                          This is the same as using the PARENT keyword.

     KEYWORDS:

           DYNAMIC_RESIZE: Set this keyword to enable dynamic resizing of the droplist.

           FONT:           Set this keyword to the name of a font to use on the droplist.

           FORMAT:         Set this keyword to a format for processing the "values" of the
                           droplist. For example, VALUES=[4, 5], FORMAT='(F4.2)'.

           FRAME:          Set this keyword to create a frame this many pixels wide around the droplist.

           INDEX:          The index of the value that should be the current droplist selection.

           PARENT:         An object reference to a WIDGETATOM-subclassed object.

           LABEL_SIZE:     The scr_xsize of the "label" to the left of the droplist.

           SCR_XSIZE:      Set the screen X size of the base to this many pixels. (Use discouraged.)

           SCR_YSIZE:      Set the screen Y size of the base to this many pixels. (Use discouraged.)

           SPACES:         A one- or two-element array that indicates how many blank spaces to
                           insert around the "values" of the droplist. The first element is the
                           before-value spacing, the secound element is the after-value spacing.
                           A single value adds the same spacing both before and after the value.

           TITLE:          A string that is the "title" of the droplist.

           UNITS:          The units for measurments. The default is 0 for pixels. Other values are
                           1 for inches, and 2 for centimeters.

           VALUE:          A vector of possible selections for the droplist. May be any data type.

           XSIZE:          The X size of the widget.

           YSIZE:          The Y size of the widget.

           _EXTRA:         Any keyword appropriate for the superclass INIT methods.

(See C:\IDL\Catalyst\source\widgets\droplistwidget__define.pro)

## DROPLISTWIDGET::RESIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DROPLISTWIDGET::RESIZE

     PURPOSE:

           This method is used to dynamically resize the droplist.

     SYNTAX:

           aDroplistWidget -> Resize, newsize

     ARGUMENTS:

           newSize:      The new size of the droplist. If the variable newSize is
                         not provided, the new size is set by the parent widget's
                         X screen size. This makes it possible to have the droplist
                         sized to fit it's parent base widget.

     KEYWORDS:

           PARENT_SIZE:  Returns the SCR_XSIZE of the parent widget. (Output keyword)

(See C:\IDL\Catalyst\source\widgets\droplistwidget__define.pro)

## DROPLISTWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           DROPLISTWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the DroplistWidget object's properties

     SYNTAX:

           aDroplistWidget -> SetProperty, Map=1

     ARGUMENTS:

           None.

     KEYWORDS:

           DYNAMIC_RESIZE : Set this keyword to 1 to turn dynamic resizing on. To 0 to turn it off..

           EVENT_OBJECTS:   Normally, the EVENT_OBJECTS are set by the CATATOM object, but the
                            LISTWIDGET is compound object, so we have to intercept the process
                            and set the event object that will *eventually* receive the LISTWIDGET event.

           INDEX:           Set the current droplist selection to this index number.

           SELECTION:       Set the current droplist selection to this selection. (An alternative
                            to using the INDEX keyword.)

           SPACES:          A one- or two-element array that indicates how many blank spaces to
                            insert around the "values" of the droplist. The first element is the
                            before-value spacing, the secound element is the after-value spacing.
                            A single value adds the same spacing both before and after the value.

           VALUE:           A vector of possible selections for the droplist. May be any data type.

           _EXTRA:          Any keywords appropriate for the superclass SetProperty methods.

(See C:\IDL\Catalyst\source\widgets\droplistwidget__define.pro)

## FIELDWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FIELDWIDGET::CLEANUP

     PURPOSE:

           This is the FIELDWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\fieldwidget__define.pro)

## FIELDWIDGET::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            FIELDWIDGET::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the FIELDWIDGET object.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\fieldwidget__define.pro)

## FIELDWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FIELDWIDGET::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain FIELDWIDGET properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

       CR_EVENTS:          Indicates if carriage return events are passed to the parent.

       DATATYPE:           The type of data displayed in the widget.

       DECIMAL:            The number of digits to the right of the decimal in floating number.

       DIGITS:             The number of digits permitted in integer numbers.

       FOCUS_EVENTS:       Indicates if keyboard focus events are passed to the parent.

       LABELSIZE:          The X screen size of the label widget.

       TEXTSIZE:           The X screen size of the text widget.

       VALUE:              The current value of the compound widget.

       XSIZE:              The X size of the Text Widget.

         _REF_EXTRA:       Any keywords appropriate for the superclass GetProperty method.

(See C:\IDL\Catalyst\source\widgets\fieldwidget__define.pro)

## FIELDWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FIELDWIDGET::INIT

     PURPOSE:

           This is the FIELDWIDGET object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

       COLUMN:             Set this keyword to have the Label Widget above the Text Widget.

       CR_EVENTS:          Set this keyword if you only want Carriage Return events to be returned.

       DECIMAL:            Set this keyword to the number of digits to the right of the decimal
                           point in FLOATVALUE and DOUBLEVALUE numbers.

       DIGITS:             Set this keyword to the number of digits permitted in INTERGERVALUE and LONGVALUE numbers.

       FIELDFONT:          The font name for the text in the Text Widget.

       FOCUS_EVENTS:       Set this keyword if you want text events when the keyboard focus is
                           moved out of the text widget.

       FRAME:              Set this keyword to put a frame around the compound widget.

       LABEL_LEFT:         Set this keyword to align the label to the left of the label.

       LABEL_RIGHT:        Set this keyword to align the label to the right of the label.

       LABELFONT:          The font name for the text in the Label Widget.

       LABELSIZE:          The X screen size of the Label Widget.

       NOEDIT:             Set this keyword to make the text widget non-editable.

       POSITIVE:           Set this keyword if you want only positive numbers allowed.

       ROW:                Set this keyword to have the Label beside the Text Widget. (The default.)

       SCR_XSIZE:          The X screen size of the compound widget.

       SCR_YSIZE:          The Y screen size of the compound widget.

       TITLE:              The text to go on the Label Widget.

       VALUE:              The "value" of the compound widget.

       XSIZE:              The X size of the text widget in the usual character units

        _EXTRA:            Any keywords appropriate for the superclass INIT method.

(See C:\IDL\Catalyst\source\widgets\fieldwidget__define.pro)

## FIELDWIDGET::MOVETAB

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FIELDWIDGET::MOVETAB

     PURPOSE:

           This method moves the focus to the next Inputwidget.

     SYNTAX:

           theObject -> MoveTab

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\fieldwidget__define.pro)

## FIELDWIDGET::RESIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FIELDWIDGET::RESIZE

     PURPOSE:

           This method resizes the widget by making the text widget fit the new size.

     SYNTAX:

           theobject -> Resize, newsize

     ARGUMENTS:

           newsize:          The new size of the compound text widget.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\fieldwidget__define.pro)

## FIELDWIDGET::RETURNVALUE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FIELDWIDGET::RETURNVALUE

     PURPOSE:

           This method takes a string and turns it into a number,depending upon the current data
           type of the compound widget. For numbers, if the input value is a null string, then
           an undefined variable is returned.

     SYNTAX:

           A private method.

     ARGUMENTS:

           inputValue:       A string value that is to be turned into a number.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\fieldwidget__define.pro)

## FIELDWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FIELDWIDGET::SETPROPERTY

     PURPOSE:

           This method allows the user to set the FIELDWIDGET object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

       CR_EVENTS:          Set this keyword if you want Carriage Return events to be returned.

       DECIMAL:            Set this keyword to the number of digits to the right of the decimal
                           point in FLOATVALUE and DOUBLEVALUE numbers.

       DIGITS:             Set this keyword to the number of digits permitted in INTERGERVALUE and LONGVALUE numbers.

       FIELDFONT:          The font name for the text in the Text Widget.

       FOCUS_EVENTS:       Set this keyword if you only want text events when the keyboard focus is
                           moved in or out of the text widget.

       INPUT_FOCUS:        Set this keyword to set input focus to/from the text widget.

       LABELSIZE:          The X screen size of the Label Widget.

       POSITIVE:           Set this keyword if you want only positive numbers allowed.

       SCR_XSIZE:          The X screen size of the compound widget.

       SCR_YSIZE:          The Y screen size of the compound widget.

       SELECT:             Set this keyword to select the text in the Text Widget.

       TABNEXT:            The inputwidget object to receive focus upon tabbing.

       TEXTSIZE:           The X screen size of the Text Widget.

       TITLE:              The text to go on the Label Widget.

       VALUE:              The "value" of the compound widget.

       XSIZE:              The X size of the Text Widget.

         _EXTRA:           Any keywords appropriate for the superclass SetProperty method.

(See C:\IDL\Catalyst\source\widgets\fieldwidget__define.pro)

## FIELDWIDGET::VALIDATE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FIELDWIDGET::VALIDATE

     PURPOSE:

           This function eliminates illegal characters from a string that represents
           a number. The return value is a properly formatted string that can be turned into
           an INT, LONG, FLOAT, or DOUBLE value.

     SYNTAX:

           This is a private method.

     NOTES:

          + 43B
          - 45B
          . 46B
          0 - 9 48B -57B
          'eEdD' [101B, 69B, 100B, 68B]

     ARGUMENTS:

           value:          The input value to validate.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\fieldwidget__define.pro)

## FIELDWIDGET__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FIELDWIDGET__DEFINE

     PURPOSE:

           The purpose of this routine is to create an object widget similar to FSC_FIELD
           (which is itself similar to CW_FIELD).

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("FIELDWIDGET")

     SUPERCLASSES:

           BASEWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { FIELDWIDGET, $
                 _event_handler: Obj_New(), $ ; The real event handler object or objects for this compound object.
                 _event_method_real: "", $    ; The event method assigned by the user to this object widget.
                 cr_events: 0L, $             ; A flag meaning send carriage return events.
                 datatype: "" , $             ; The type of data to be returned from the text widget.
                 decimal: 0, $                ; The number of decimals points in FLOAT and DOUBLE numbers.
                 digits: 0, $                 ; The number of digits in INT and LONG numbers.
                 focus: 0L, $                 ; A flag to indicate focus events should be returned.
                 gentype: "", $               ; The "general" type of data: INTEGER, UNSIGNED, FLOAT, or STRING.
                 labelID: Obj_New(), $        ; The label widget ID.
                 tabnext: Obj_New(), $        ; The identifier of a widget to receive the cursor focus if a TAB character is detected.
                 textID: Obj_New(), $         ; The text widget ID.
                 theText: "", $               ; The actual text in the text widget.
                 theValue: Ptr_New(), $       ; The actual "value" of the text in the text widget. :-)
                 positive: 0, $               ; A flag meaning only positive numbers allowed.
                 undefined: Ptr_New(), $      ; The undefined data type.
                 INHERITS BASEWIDGET $
               }

     MESSAGES:

       None.

     EVENTS:

       All events are handled internally unless the keywords CR_EVENTS or FOCUS_EVENTS are used.
       If the CR_EVENTS keyword is used, the event structure returned to your Event Handler routine
       is defined like this:

           {ID:Obj_New(), TOP:Obj_New(), HANDLER:Obj_New(), NAME:self._name, $
             EVENT_NAME:'FIELD_CARRIAGE_RETURN_EVENT', VALUE:Ptr_New(), TYPE:""}

       If the FOCUS_EVENTS keyword is use, the event structure returned to your Event Handler routine
       is defined like this, where ENTER is 0 if focus leaves the text widget and is 1 if focus enters
       the text widget:

           {ID:Obj_New(), TOP:Obj_New(), HANDLER:Obj_New(), NAME:self._name, $
             EVENT_NAME:'FIELD_CARRIAGE_RETURN_EVENT', VALUE:Ptr_New(), TYPE:"", ENTER:0}

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 18 July 2004.

(See C:\IDL\Catalyst\source\widgets\fieldwidget__define.pro)

## IMAGESTRIP::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMAGESTRIP::CLEANUP

     PURPOSE:

           This is the IMAGESTRIP object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\imagestrip__define.pro)

## IMAGESTRIP::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMAGESTRIP::DRAW

     PURPOSE:

           This method draws all the images in the ImageContainer object. It is assumed
           that the ImageContainer object contains CatImage or ImageFrame objects that
           can have their output size and starting coordinates set by the SetProperty
           method.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\imagestrip__define.pro)

## IMAGESTRIP::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            IMAGESTRIP::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the IMAGESTRIP object.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\imagestrip__define.pro)

## IMAGESTRIP::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMAGESTRIP::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain IMAGESTRIP properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         ANNOTATECOLOR:    The name of the annotation color for this object. Image frame
                           dividers are drawn in this color.

         COLOR_OBJECT:     A ColorTool object for the draw widget object. Use this if you
                           want the draw widget to manage colors for the images.

         DRAWOBJECT:       The object reference of the draw widget object.

         IMAGECONTAINER:   The image container object containing CATIMAGE or IMAGEFRAME objects.

         FRAMES:           The number of image "frames" to display in the frame window. Note, this
                           is the number of visible images, not the total number of images in the
                           container.

         START_FRAME:      The initial frame to put on the left side of the visible images. By default, 0.

         XSIZE:            The output image X size. Each image frame with have this X size.

         YSIZE:            The output image Y size. Each image frame with have this Y size.

         _REF_EXTRA:       Any keywords appropriate for the superclass GetProperty method.

(See C:\IDL\Catalyst\source\widgets\imagestrip__define.pro)

## IMAGESTRIP::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMAGESTRIP::INIT

     PURPOSE:

           This is the IMAGESTRIP object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         ANNOTATECOLOR:    The name of the annotation color for this object. Image frame
                           dividers are drawn in this color. By default, "sky blue".

         COLOR_OBJECT:     A ColorTool object for the draw widget object. Use this if you
                           want the draw widget to manage colors for the images.

         IMAGECONTAINER:   The image container object containing CATIMAGE or IMAGEFRAME objects.

         FRAMES:           The number of image "frames" to display in the frame window. Note, this
                           is the number of visible images, not the total number of images in the
                           container.

         START_FRAME:      The initial frame to put on the left side of the visible images. By default, 0.

         UNITS:            The units for measurments. The default is 0 for pixels. Other values are
                           1 for inches, and 2 for centimeters.

         XSIZE:            The output image X size. Each image frame with have this X size.

         YSIZE:            The output image Y size. Each image frame with have this Y size.

     KEYWORDS:

         _EXTRA:           Any keywords appropriate for the superclass INIT method.

(See C:\IDL\Catalyst\source\widgets\imagestrip__define.pro)

## IMAGESTRIP::MESSAGEHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMAGESTRIP::MESSAGEHANDLER

     PURPOSE:

           This method receives notification of a message call from another object's SENDMESSAGE
           method.

     SYNTAX:

           thisObject -> MessageHandler, title, SENDER=sender, MESSAGE=message

     ARGUMENTS:

           TITLE:   The title of the message.

     KEYWORDS:

           DATA:    A keyword that contains any information the sender wishes to pass
                    with the message. It can be empty.

           SENDER:  The object that generated the message

(See C:\IDL\Catalyst\source\widgets\imagestrip__define.pro)

## IMAGESTRIP::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMAGESTRIP::SETPROPERTY

     PURPOSE:

           This method allows the user to set the IMAGESTRIP object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         ANNOTATECOLOR:    The name of the annotation color for this object. Image frame
                           dividers are drawn in this color.

         COLOR_OBJECT:     A ColorTool object for the draw widget object. Use this if you
                           want the draw widget to manage colors for the images.

         IMAGECONTAINER:   The image container object containing CATIMAGE or IMAGEFRAME objects.

         FRAMES:           The number of image "frames" to display in the frame window. Note, this
                           is the number of visible images, not the total number of images in the
                           container.

         START_FRAME:      The initial frame to put on the left side of the visible images. By default, 0.

         XSIZE:            The output image X size. Each image frame with have this X size.

         YSIZE:            The output image Y size. Each image frame with have this Y size.

     KEYWORDS:

         _EXTRA:     Any keywords appropriate for the superclass SetProperty method.

(See C:\IDL\Catalyst\source\widgets\imagestrip__define.pro)

## IMAGESTRIP__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMAGESTRIP__DEFINE

     PURPOSE:

           The purpose of this routine is to allow a sequence of images to exist in
           a rwo or strip of images. The object is a compound widget object and is
           a subclassed BASEWIDGET. Buttons at either end of the image strip draw widget
           allow the strip to be "moved" one image at a time. If you hold the buttons down
           and touch the space bar, images can be move very rapidly. See the text program at
           the end of this file for an example.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("IMAGESTRIP")

     SUPERCLASSES:

           BASEWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { IMAGESTRIP, $
                 imageContainer: Obj_New(), $           ; An ImageContainer object.
                 l_buttonID: Obj_New(), $               ; The left button identifier.
                 r_buttonID: Obj_New(), $               ; The right button identifier.
                 start_frame: 0L, $                     ; The starting frame on the left.
                 drawID: Obj_New(), $                   ; Draw widget for image display. (X size is xsize*frames, Y size is ysize.)
                 pixmap: Obj_New(), $                   ; A pixmap for buffering image display.
                 xsize: 0L, $                           ; Image X size.
                 ysize: 0L, $                           ; Image Y size.
                 frames: 0L, $                          ; The number of frames in the strip.
                 annotateColor: "", $                   ; The annotation color.
                 _event_handler:Obj_New(), $            ; The real event handler object(s) for the IMAGESTRIP.
                 _event_method_real: "", $              ; The event method assigned by the user to this object widget.
                 INHERITS BASEWIDGET $
               }

     EVENT_STRUCTURE:

       This is the event structure sent from the IMAGESTRIP when someone clicks the mouse
       inside the image strip window..

       event  = { IMAGESTRIP_EVENT, $
                    ID:Obj_New(), $            ; The widget object that caused the event.
                    TOP: Obj_New(), $          ; The object at the top of the object hierarchy.
                    HANDLER:Obj_New(), $       ; The event handler object.
                    EVENT_NAME: "", $          ; The name of the event, IMAGESTRIP_EVENT.
                    NAME: "", $                ; The name of the object.
                    SELECTION:Obj_New() $      ; The selected image object in the ImageContainer.
                    BUTTON_DOWN: ""            ; The button clicked DOWN in draw widget. "LEFT", "MIDDLE", or "RIGHT".
                }

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 21 February 2004.
           Added BUTTON_DOWN field in IMAGESSTRIP_EVENT. 20 Dec 2004. DWF.

(See C:\IDL\Catalyst\source\widgets\imagestrip__define.pro)

## LABELWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LABELWIDGET

     PURPOSE:

           The purpose of this routine is to implement a label widget as an object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           labelWidget = Obj_New("LabelWidget", parent)

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = {LABELWIDGET, INHERITS WidgetAtom }

     MODIFICATION_HISTORY:

           Written by: David Burridge, 15th July 2002.

(See C:\IDL\Catalyst\source\widgets\labelwidget__define.pro)

## LABELWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LABELWIDGET::ADD

     PURPOSE:

           This method overrides the superclass Add method to prevent addition of
           other widget objects to label objects.

     SYNTAX:

           labelObject -> Add, object

     ARGUMENTS:

           object: The object to add to the container. Only objects that are NOT subclassed
                   from WIDGETATOM objects can be added.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\labelwidget__define.pro)

## LABELWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LABELWIDGET::CLEANUP

     PURPOSE:

           This is the LABELWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the "WidgetAtom::Cleanup" method.

(See C:\IDL\Catalyst\source\widgets\labelwidget__define.pro)

## LABELWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LABELWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to get the object's properties.

     SYNTAX:

           labelObject -> GetProperty, VALUE=labelValue

     ARGUMENTS:

           None.

     KEYWORDS:

           VALUE:       The current value of the slider widget.

           _REF_EXTRA:  Any keyword appropriate for the "WidgetAtom::GetProperty" object method.

(See C:\IDL\Catalyst\source\widgets\labelwidget__define.pro)

## LABELWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LABELWIDGET::INIT

     PURPOSE:

           This is the LABELWIDGET object class initialization method.

     ARGUMENTS:

           theParent - The parent object reference. This is the same as using the PARENT keyword.

     KEYWORDS:

           ALIGN_CENTER:    Set this keyword to center-align text on the widget.

           ALIGN_LEFT:      Set this keyword to left-align text on the widget.

           ALIGN_RIGHT:     Set this keyword to right-align text on the widget.

           DYNAMIC_RESIZE:  Set this keyword to enable dynamic resizing of the widget.

           FONT:            The name of a font to be used by the widget.

           FRAME:           Create a frame this many pixels wide around base.

           PARENT:          An object reference to a container object.

           SCR_XSIZE:       Set the screen X size of the widget to this many pixels. (Use discouraged.)

           SCR_YSIZE:       Set the screen Y size of the widget to this many pixels. (Use discouraged.)

           SUNKEN_FRAME:    Set this keyword to obtain a 3D look for the lable.

           UNITS:           The units for measurments. The default is 0 for pixels. Other values are
                            1 for inches, and 2 for centimeters.

           VALUE:           The text to be placed on the label widget.

           XOFFSET:         The horizontal space (pixels) from upper left corner of the parent.

           XSIZE:           The X size of the widget.

           YOFFSET:         The vertical space (pixels) from upper left corner of the parent.

           YSIZE:           The Y size of the widget.

           _EXTRA:          Any keyword appropriate for the "WidgetAtom::Init" method.

(See C:\IDL\Catalyst\source\widgets\labelwidget__define.pro)

## LABELWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LABELWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the object's properties.

     SYNTAX:

           labelObject -> SetProperty, VALUE='Test'

     ARGUMENTS:

           None.

     KEYWORDS:

           VALUE:          The value of the label widget.

           DYNAMIC_RESIZE: Set this keyword to make the label size itself for its contents

           _EXTRA:         Any keyword appropriate for the "WidgetAtom::SetProperty" object method.

(See C:\IDL\Catalyst\source\widgets\labelwidget__define.pro)

## LISTWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LISTWIDGET

     PURPOSE:

           The purpose of this routine is to implement a list widget in an object
           structure. This routine is a compound widget in order to give the list
           more functionality than the current IDL list widget.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Compound object widgets.

     SYNTAX:

           aList = Obj_New("LISTWIDGET", theParent, VALUE=['pig', 'cow', coyote'], INDEX=2)

     SUPERCLASSES:

           BASEWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

          class = { LISTWIDGET, $                ; The LISTWIDGET object class definition.
                    _clicks: 0L, $               ; The number of clicks required to generate events.
                    _index: Ptr_New(), $         ; A pointer to the index or indices of the selections.
                    _listID:0L, $                ; The list widget identifier.
                    _listtitle: Obj_New(), $     ; The title object.
                    _listbutton: Obj_New(), $    ; The button object.
                    _multiple: 0L, $             ; A flag that indicates this list widget generates multiple selections.
                    _selection: Ptr_New(), $     ; A pointer to the selections.
                    _value: Ptr_New(), $         ; The values or selections on the list.
                    _event_handler: Obj_New(), $ ; The real (assigned) event handler object for this compound object.
                    _event_method_real: "", $    ; The event method assigned by the user to this object widget.
                    INHERITS BASEWIDGET $
                  }

     EVENT_STRUCTURE:

       This is the event structure sent from the LISTWIDGET to the event handler object.

          event = { LISTWIDGET_EVENT, $
                    ID:Obj_New(), $            ; The widget object that caused the event.
                    TOP: Obj_New(), $          ; The object at the top of the object hierarchy.
                    HANDLER:Obj_New(), $       ; The event handler object.
                    EVENT_NAME: "", $          ; The name of the event, LISTWIDGET_EVENT.
                    NAME: "", $                ; The name of the object.
                    CLICKS: 0L, $              ; The number of clicks for selection. 1 or 2.
                    INDEX: Ptr_New(), $        ; The index (or indices) of the current selection.
                    NUM_SELECTED: 0L, $        ; The number of elements in the selection pointer.
                    SELECTION:Ptr_New() $      ; The current list selection (i.e., value[index]).
                  }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 25 March 2003.
           Fixed a problem with the EventHandler when using context sensitive menus with ListWidget. DWF. 15 May 2004.

(See C:\IDL\Catalyst\source\widgets\listwidget__define.pro)

## LISTWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LISTWIDGET::CLEANUP

     PURPOSE:

           This is the LISTWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the  superclass CLEANUP methods.

(See C:\IDL\Catalyst\source\widgets\listwidget__define.pro)

## LISTWIDGET::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LISTWIDGET::EVENTHANDLER

     PURPOSE:

           This is the event handler method of the object. The purpose is to set the
           object's current selection and index number. A LISTWIDGET event is
           sent to the parent object's event handler.

     SYNTAX:

           widgetObject ->EventHandler, event

     ARGUMENTS:

           EVENT:  The event created by the list widget.

(See C:\IDL\Catalyst\source\widgets\listwidget__define.pro)

## LISTWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LISTWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to obtain the ListWidget object's properties

     SYNTAX:

           aListWidget -> GetProperty, Selection=currentSelection

     ARGUMENTS:

           None.

     KEYWORDS:

           CONTEXT_EVENTS:  Returns a 1 if context events are on, a 0 otherwise.

           EVENT_OBJECT:    Normally, the EVENT_OBJECT is obtained in the ATOM object, but the
                            LISTWIDGET is compound object, so we have to intercept the process
                            and get the event object that will *eventually* receive the LISTWIDGET event.

           INDEX:           The index number or numbers of the current selection.

           MULTIPLE:        Returns a 1 is this is a multiple-selection list, 0 otherwise.

           NUMBER:          Returns the number of selections available in the list.

           NUM_SELECTED:    Returns the number of selections in the SELECTION.

           SELECTION:       Returns the current selection or selections in the list values.

           TOP:             Returns the index number of the list item current at the top
                            of the visible portion of the list.

           VALUE:           Returns the current possible values or selections in the list.

           VISIBLE:         Returns the number of list items visible at the current time.

           XSIZE:           The size of the list widget
           _REF_EXTRA:      Any keywords appropriate for the superclass GetProperty methods.

(See C:\IDL\Catalyst\source\widgets\listwidget__define.pro)

## LISTWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LISTWIDGET::INIT

     PURPOSE:

           This is the LISTWIDGET object class initialization method

     SYNTAX:

           alist = Obj_New('LISTWIDGET')

     ARGUMENTS:

           theParent:     An object reference to a WIDGETATOM-subclassed object.
                          This is the same as using the PARENT keyword.

     KEYWORDS:

           CONTEXT_EVENTS:    Set this keyword to turn context events on for this widget object..

           FONT:           Set this keyword to the name of a font to use on the list.

           FORMAT:         Set this keyword to a format for processing the "values" of the
                           list. For example, VALUES=[4, 5], FORMAT='(F4.2)'.

           FRAME:          Set this keyword to create a frame this many pixels wide around the list.

           MULTIPLE:       Set this keyword if you want to make multiple selections in the list. If
                           this keyword is set, a button is placed at the bottom of the list widget

           MULTI_TITLE:    The text on the MULTI_BUTTON widget. It will be "Apply" by default.

           NO_MULTI_BUTTON: Set this keyword if you are making a MULTIPLE selection and do not want
                           an APPLY button at the bottom of the list.

           PARENT:         An object reference to a WIDGETATOM-subclassed object.

           SCR_XSIZE:      Set the screen X size of the base to this many pixels. (Use discouraged.)

           SCR_YSIZE:      Set the screen Y size of the base to this many pixels. (Use discouraged.)

           SPACES:         A one- or two-element array that indicates how many blank spaces to
                           insert around the "values" of the list. The first element is the
                           before-value spacing, the secound element is the after-value spacing.
                           A single value adds the same spacing both before and after the value.

           TITLE:          A string that is the "title" of the list. If absent, no Title Label
                           appears above the list.

           UNITS:          The units for measurments. The default is 0 for pixels. Other values are
                           1 for inches, and 2 for centimeters.

           VALUE:          A vector of possible selections for the list. May be any data type.

           XSIZE:          The X size of the widget.

           YSIZE:          The Y size of the widget.

           _EXTRA:         Any keyword appropriate for the superclass INIT methods.

(See C:\IDL\Catalyst\source\widgets\listwidget__define.pro)

## LISTWIDGET::NOTIFY_REALIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LISTWIDGET::NOTIFY_REALIZE

     PURPOSE:

           This method is used to make sure all the components of the list compound widget object
           are the same size when they are realized

     SYNTAX:

           Called automatically when widget hierarchy is realized.

(See C:\IDL\Catalyst\source\widgets\listwidget__define.pro)

## LISTWIDGET::RESIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LISTWIDGET::RESIZE

     PURPOSE:

           This method is used to dynamically resize the list.

     SYNTAX:

           aListWidget -> Resize, newsize

     ARGUMENTS:

           newSize:      The new size of the list. If the variable newSize is
                         not provided, the new size is set by the parent widget's
                         X screen size. This makes it possible to have the list
                         sized to fit it's parent base widget.

     KEYWORDS:

           PARENT_SIZE:  Returns the SCR_XSIZE of the parent widget. (Output keyword)

(See C:\IDL\Catalyst\source\widgets\listwidget__define.pro)

## LISTWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           LISTWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the ListWidget object's properties

     SYNTAX:

           aListWidget -> SetProperty, Map=1

     ARGUMENTS:

           None.

     KEYWORDS:

           CONTEXT_EVENTS:    Set to 1 to turn context events on for the base widget.

           EVENT_OBJECTS: Normally, the EVENT_OBJECTS keyword is set by the ATOM object, but the
                     LISTWIDGET is compound object, so we have to intercept the process
                     and set the event object(s) that will *eventually* receive the LISTWIDGET event.

           FORMAT:   Set this keyword to a format for processing the "values" of the
                     list. For example, VALUES=[4, 5], FORMAT='(F4.2)'. Only used if VALUE is set.

           SELECT:   A scalar or vector of indices into the list items that will highlight or
                     select these items in the list.

           SPACES:   A one- or two-element array that indicates how many blank spaces to
                     insert around the "values" of the list. The first element is the
                     before-value spacing, the secound element is the after-value spacing.
                     A single value adds the same spacing both before and after the value.
                     Only used if VALUE is set.

           TOPVALUE: Set this keyword to an integer that specified the index of the item
                     at the top of the list in the list widget.

           VALUE:   A vector of possible selections for the list. May be any data type.

           XSIZE:   The size of the list widget in character units.

           YSIZE:   The size of the list widget in terms of items in the list.

           _EXTRA:  Any keywords appropriate for the superclass SetProperty methods.

(See C:\IDL\Catalyst\source\widgets\listwidget__define.pro)

## MENUBARWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MENUBARWIDGET

     PURPOSE:

           The purpose of this routine is to wrap a top-level base menubar widget identifier
           up in a widget object. This object should never be defined by the user. Rather, it
           is defined automatically when a TOPLEVELBASE object is created.

     AUTHOR:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           None. This is called automatically from the TOPLEVELBASE INIT method.

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

        class = { MENUBARWIDGET, $       ; The MENUBARWIDGET object class name.
                  INHERITS WidgetAtom $  ; Subclassed from WIDGETATOM.
                }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 28 June 2002.

(See C:\IDL\Catalyst\source\widgets\menubarwidget__define.pro)

## MENUBARWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MENUBARWIDGET::ADD

     PURPOSE:

           This method adds an object widget to the menubase object widget. The
           added object widget must be subclassed from the BUTTONWIDGET object.

     SYNTAX:

           self -> Add, object

     ARGUMENTS:

           object: The object to add to the container. The object must be
              subclassed from the BUTTONWIDGET object. (Required)

     KEYWORDS:

           _EXTRA: Any keyword appropriate for superclass ADD methods.

(See C:\IDL\Catalyst\source\widgets\menubarwidget__define.pro)

## MENUBARWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MENUBARWIDGET::INIT

     PURPOSE:

           This is the MENUBARWIDGET object class initialization method.

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

           ID: The menubar identifier obtained from the MBAR keyword in the creation of a
               TOPLEVELBASE object.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\menubarwidget__define.pro)

## MENUBARWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MENUBARWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the object's properties. It is really only a wrapper to
           the WIDGETATOM SETPROPERTY method written to prevent XSIZE and YSIZE keywords being
           used as these are invalid for menu widgets.

     SYNTAX:

           self -> SetProperty, UVALUE=theValue

     ARGUMENTS:

           None.

     KEYWORDS:

           XSIZE:  This keyword is ignored by the MENUBARWIDGET object.

           YSIZE:  This keyword is ignored by the MENUBARWIDGET object.

           _EXTRA: Any keyword appropriate for WIDGETATOM::SETPROPERTY methods.

(See C:\IDL\Catalyst\source\widgets\menubarwidget__define.pro)

## ODRAWWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET

     PURPOSE:

           The purpose of this routine is to implement an object graphics draw widget as an object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           oDrawWidget = Obj_New("ODrawWidget", theParent)

     SUPERCLASSES:

           DRAWWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { ODRAWWIDGET, $
                 INHERITS DrawWidget }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 28 June 2003.
           Fixed a problem involving getting the graphics tree in GetProperty method. 19 July 2004. DWF.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## ODRAWWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET::ADD

     PURPOSE:

           This method adds an IDLgrView or IDLgrScene object to the ODrawWidget container.
           Unlike direct graphics DrawWidget objects, ODrawWidgets do NOT draw all of the
           objects in their container. In fact, only ONE object can be added to the container.
           Subsequent ADD method calls will replace the IDLgrView object with another.

           While the draw widget is adding the object, it will also regester for any
           SETPROPERTY_CHANGE messages.

     SYNTAX:

           thisDrawObj -> Add, viewObject

     ARGUMENTS:

           viewObject:    The IDLgrView or IDLgrScene object to add to the draw widget container.

     KEYWORDS:

           EXCLUSIVE:     This keyword is used only if HANDLE_EVENTS is also set. If EXCLUSIVE
                          is set the EXCLUSIVE_EVENT_OBJECT property is set instead of the
                          EVENT_OBJECT property.

           HANDLE_EVENTS: If this keyword is set, the object that is being added will set the
                          EVENT_OBJECT property of the oDrawWidget, and all subsequent
                          draw widget events will be sent to the EVENT_HANDLER method of the
                          object being added.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## ODRAWWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET::CLEANUP

     PURPOSE:

           This is the DRAWWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## ODRAWWIDGET::COPY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET::COPY

     PURPOSE:

           This method copies the contents of the draw widget to an image variable.

     RETURN_VALUE:

           image:     A (3, winXsize, winYsize) or (4, winXsize, winYsize) array (depending
                      upon whether an alpha channel is present or not) image.

     SYNTAX:

           image = oDrawWidget -> Copy()

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## ODRAWWIDGET::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET::DRAW

     PURPOSE:

           This method draws the contents of the draw widget object's container in the draw widget window.
           It does this by calling the DRAW methods of any objects found in its container object.
    ;
     SYNTAX:

           thisDrawObj -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           HOURGLASS:        Set this keyword to enable the hourglass cursor for the draw operation.

           _EXTRA:           Any extra keywords appropriate for superclass DRAW methods.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## ODRAWWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to obtain the DrawWidget object's properties

     SYNTAX:

           aDrawWidget -> GetProperty, RESOLUTION=resolution

     ARGUMENTS:

           None.

     KEYWORDS:

           GRAPHICS_TREE:     Set this keyword to an named variable to retrieve the IDLgrView or
                              IDLgrScene object contained in the draw widget.

           RESOLUTION:        The pixel resolution [xres, yres] of the window measured in centimeters per pixel.

           SCREEN_DIMENSIONS: A two-element array of the form [height, width] specifying the dimensions
                              of the display device in pixel or device coordinates.

           WINDOWOBJECT:      The window object associated with the the draw widget.

           VIEWOBJECT:        Set this keyword to return the CATOBJECTVIEW object contained in the
                              oDrawWidget container.

           ZBUFFER_DATA:      Set this keyword to a named variable that will contain a floating array
                              representing the z-buffer currently in the window. The returned array
                              will have dimensions of [winXsize, winYsize].

           _REF_EXTRA:        Any keywords appropriate for the superclass GetProperty methods.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## ODRAWWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET::INIT

     PURPOSE:

           This is the ODRAWWIDGET object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

           theParent:      An object reference to a WIDGETATOM-subclassed object.

     KEYWORDS:

           APP_SCROLL:      The "application scroll" keyword. See Widget_Draw documentation for details.

           BUTTON_EVENTS:   Set this keyword to enable widget button events in the draw widget.

           COLOR_MODEL:     Set this keyword to 1 to use INDEXED color for associated IDLgrWindow.
                            Set to 0 (the default) for RBG color model.

           EXPOSE_EVENTS:   Set this keyword to enable widget expose events in the draw widget.

           FRAME:           Create a frame this many pixels wide around the widget.

           GRAPHICS_TREE:   Set this keyword to an IDLgrView or IDLgrScene object to be displayed
                            in the draw widget.

           KEYBOARD_EVENTS: Set this keyword to enable keyboard events for this widget. Setting
                            the value to 1 will enable "normal" keys. Setting the value to 2 will enable
                            modifier keys. See the IDL documenation for WIDGET_DRAW for details.

           MOTION_EVENTS:   Set this keyword to enable widget motion events in the draw widget.

           NODRAW:          Set this keyword to prohibit re-drawing via the DRAW method.

           PARENT:          An object reference to a WIDGETATOM-subclassed object.

           RENDERER:        Set this keyword to 1 to use IDL software OpenGL library. Set to 0
                            (the default) to use hardware OpenGL rendering (if available).

           RETAIN:          Set this keyword to determine how backing store is handled. See IDL WIDGET_DRAW
                            documentation for details. Set to 1 by default for Windows machines and to 2 otherwise.

           SCR_XSIZE:       Set the screen X size of the base to this many pixels. (Use discouraged.)

           SCR_YSIZE:       Set the screen Y size of the base to this many pixels. (Use discouraged.)

           SCROLL:          Set this keyword to add scroll bars to the draw widget.

           UNITS:           The units for measurments. The default is 0 for pixels. Other values are
                            1 for inches, and 2 for centimeters.

           VIEWPORT_EVENTS: Set this keyword to enable widget viewport scroll events in the draw widget

           X_SCROLL_SIZE:   The X size (pixels) of the scrollable window area.

           XOFFSET:         The horizontal space (pixels) from upper left corner of the display.

           XSIZE:           The X size of the widget. (300 pixels by default.)

           Y_SCROLL_SIZE:   The Y size (pixels) of the scrollable window area

           YOFFSET:         The vertical space (pixels) from upper left corner of the display.

           YSIZE:           The Y size of the widget. (300 pixels by default.)

           _EXTRA:          Any keyword appropriate for the superclass INIT methods.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## ODRAWWIDGET::MESSAGEHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET::MESSAGEHANDLER

     PURPOSE:

           This method responds to "messages" sent from other objects. It is called
           automatically by other objects. To receive messages, it is necessary to
           "register" with the messaging object.

     SYNTAX:

           None. Called by other objects.

     ARGUMENTS:

           TITLE:  The message title. This is the "name" of the message indicated when
                   the object registered for messages with the messaging object.

     KEYWORDS:

           DATA:   Information from the SENDER that may be relevant in processing the message.
                   Typically, an anonymous structure variable, although it could be anything at all.

           SENDER: An output keyword. This is the object reference of the object that is sending
                   the message.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## ODRAWWIDGET::OUTPUT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET::Output

     PURPOSE:

           This method will create graphic output files of the draw widget contents. The default
           is to create JPEG output files unless other output is selected via keywords.

     SYNTAX:

           drawWidget -> Output

     ARGUMENTS:

           None.

     KEYWORDS:

          BMP:        Set this keyword to create BMP output file.

          JPEG:       Set this keyword to create JPEG output file.

          FILENAME:   Set this keyword to the name of the output file.

          NODIALOG:   Set this keyword if you want to write the file directly,
                      without giving the user a chance to change the filename.

          PNG:        Set this keyword to create PNG output file.

          TIFF:       Set this keyword to create TIFF output file.

          POSTSCRIPT: Set this keyword to create encapsulated PostScript output file.

          _EXTRA:     Any keywords appropriate for the WRITE_*** routines.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## ODRAWWIDGET::PRINT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET::PRINT

     PURPOSE:

           This method will send the contents of the draw widget to the default printer.

     SYNTAX:

           drawWidget -> Print

     ARGUMENTS:

           None.

     KEYWORDS:

          LANDSCAPE:  Set this keyword to 1 to select landscape output. The default in portrait output.

          VECTOR:     Set this keyword to draw using vector output. The output is not guaranteed to be
                      correct, but this may be a faster option.

          _EXTRA:     Any keywords appropriate for the IDLgrPrinter object.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## ODRAWWIDGET::RESIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ODRAWWIDGET::RESIZE

     PURPOSE:

           This method resizes the canvas area of the draw widget.
    ;
     SYNTAX:

           thisDrawObj -> Resize, xsize, ysize

     ARGUMENTS:

           XSIZE:  The new X size of the canvas area of the draw widget, in pixels.

           YSIZE:  The new Y size of the canvas area of the draw widget, in pixels.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\odrawwidget__define.pro)

## PIXMAPWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET

     PURPOSE:

           The purpose of this routine is to implement a pixmap window as a
           widget object.

           Putting this widget into a hierarchy will cause the display generated
           by drawing the child widgets to be buffered through the pixmap to the
           target window. For this reason, invoking the DRAW method on the pixmap
           simply does a copy to the target window (or current window, if the target
           window is undefined). If you wish to simple draw the child widgets on the
           pixmap without affecting the target window, use the REFRESH method.

           The pixmap actually exists in an unmapped TopLevelBaseWidget. This is
           super convenient, because if you need to see the pixmap for debugging
           purposes, all you need to is set the MAP=1 keyword on its SetProperty
           method. To make the pixmap disappear again, set MAP=0.

     AUTHOR:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           pixmapWidget = Obj_New("PixmapWidget", theParent)

     SUPERCLASSES:

           TOPLEVELBASE
           BASEWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { PixmapWidget, $
                 _backgroundColor: "", $     ; The name of the background color.
                 _drawWidget: 0L, $          ; The Widget ID of the draw widget.
                 _keep: 0B, $                ; To conserve pixmap memory, KEEP=1 retains the pixmap, KEEP=0 does not.
                 _isReady: 0B, $             ; A flag to show if the window needs updating before copy.
                 _noDraw: 0B, $              ; A flag to inhibit drawing operation.
                 _snapshot: OBJ_NEW(), $     ; For KEEP=0, a snapshot of the required pixmap
                 _targetWindow: OBJ_NEW(), $ ; A window object that is to be the target of the pixmap.
                 _xsize: 0L,  $              ; The X size of the pixmap window.
                 _ysize: 0L,  $              ; The Y size of the pixmap window.
                 INHERITS TOPLEVELBASE }

     NOTES:

           Note that unless the PIXMAPWIDGET is a child of another widget, that
           the user will be responsible for destroying the PIXMAPWIDGET. Failure to
           do this will result in memory leakage. In other words, if the PIXMAPWIDGET
           exists in its own unmapped TOPLEVELBASE, it will NOT be automatically destroyed
           when the program that uses it is destroyed. This must be done *explicitly*.

     MODIFICATION_HISTORY:

           Written by: David Burridge, 13th July 2002.
           Small change to SetProperty and GetProperty methods to get READY status. 28 Oct 2004. DWF.
           Added response to RESIZEDRAWWIDGET message in MessageHandler method. 7 Dec 2004. DWF.
           I made the default BACKGROUND_COLOR for pixmaps white to facilitate PostScript
              output and conform to draw widgets. 12 Dec 2004. DWF
           Removed the "overlay" capability, which we were not using. 23 January 2005. DWF.
           Changed the BACKGROUND_COLOR back to "black". Tired of fighting it... 5 July 2005. DWF.
           Renamed the former RETAIN keyword to KEEP, so that RETAIN can be used in its normal
              IDL window definition. 21 August 2006. DWF.
           Changed BACKGROUND_COLOR to BACKGROUNDCOLOR to remain consistent with GET/SET methods. And
              removed DRAW_COLOR keyword, which was used for overlays. 21 August 2006. DWF.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::ADD

     PURPOSE:

           This method adds an object to the PixmapWidget object container.

     SYNTAX:

           pixmapObj -> Add, object

     ARGUMENTS:

           object:  The object to add to the container.

     KEYWORDS:

          DRAW:     Set this keyword to cause the pixmap to be re-drawn as soon as the
                    object has been added.

          _EXTRA:   Any keyword appropriate for the superclass ADD methods.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::CLEANUP

     PURPOSE:

           This is the PIXMAPWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the PIXMAPWIDGET object. A
           control panel is a graphical user interface for setting object
           properties. If you create a control panel, the events are typically
           sent to the EVENTHANDLER method.

     SYNTAX:

           theObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window (i.e., a TOPLEVELBASE object).

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CatControlPanel::INIT method.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::COPY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::COPY

     PURPOSE:

           This method copies the contents of the draw widget to the current graphics window using
           the DEVICE COPY method. The DEVICE COPY command looks like this:

           DEVICE, COPY=[origin[0], origin[1], extent[0], extent[1], destination[0], destination[1], self._windowID]

           If the IMAGE keyword is used, the window contents are stored in an image variable
           and the window contents are *not* copied into the current graphics window.

     SYNTAX:

           pixmapObj -> Copy

     ARGUMENTS:

           None.

     KEYWORDS:

           ERASE_WINDOW: Set this keyword to erase the window before drawing contents.

           DESINATION:   A two-element array specifying the device coordinates of the lower-left
                         corner of the copied region in the destination window. By default: [0,0].

           EXTENT:       A two-element array specifying the number of columns and rows to copy.
                         If missing, the entire draw widget window is copied.

           IMAGE:        Set this keyword to a named IDL variable that returns a copy of the draw
                         widget contents as an image. (Output). If this keyword is used, the draw
                         widget contents are stored here, rather than copied to the current graphics
                         window.

           ORDER:        Set this keyword to affect the order of image transfer when the COPY is
                         to an image rather than to a display. Applies only if the IMAGE keyword is used.

           ORIGIN:       A two-element array specifying the device coordinates of the lower-left
                         corner of region in the draw widget window to be copied. By default: [0,0].

           HOURGLASS:    Turn the cursor into an hourglass for the processing.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::DRAW

     PURPOSE:

           This method copies the contents of the pixmap widget object into the current window.
           IF the REFRESH keyword is specified or the contents have changed, the contents are
           regenerated before the copy.

     SYNTAX:

           pixmapObj -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           REFRESH:        Set this keyword to force the pixmap to refresh it's contents.

           ERASE_WINDOW:   Set this keyword to erase the target window before drawing contents.

           HOURGLASS:      Set this keyword to enable the hourglass cursor for the draw operation.

           _EXTRA:         Any extra keywords appropriate for the "WidgetAtom::Draw" method.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            PIXMAPWIDGET::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the PIXMAPWIDGET object. It will typically
            be used to respond to events from widget objects created in the CONTROLPANEL
            method.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to obtain the PixmapWidget object's properties

     SYNTAX:

           pixmapObject -> GetProperty, XSIZE=xsize, YSIZE=ysize

     ARGUMENTS:

           None.

     KEYWORDS:

         BACKGROUNDCOLOR: The background color of the pixmap window.

         KEEP:            The "keep" status of the pixmap.

         NO_DRAW:         The flag to determine if the pixmap ignores draw invocations.

         READY:           A flag to show if the window needs updating before copy.

         RETAIN:          The RETAIN status of the window.

         WINDOWID:        The window index number of the draw widget used as the pixmap. If
                          the draw widget doesn't exist when the keyword is invoked (e.g, KEEP=0)
                          then a -1 is returned.

         XSIZE:           The width of the pixmap window canvas.

         YSIZE:           The height of the pixmap window canvas.

         _REF_EXTRA:      Any keywords appropriate for the  superclass GetProperty methods.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::INIT

     PURPOSE:

           This is the PIXMAPWIDGET object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         theParent: An object reference to a WIDGETATOM-subclassed object.
                    This is the same as using the PARENT keyword.

     KEYWORDS:

         BACKGROUNDCOLOR:  The name of the background color of the pixmap window. "Black" by default.

         KEEP:             Keep the pixmap in memory, rather than re-create it when needed. Set to 1 by default.

         MAP:              Set this keyword to make the pixmap visible (for testing purposes).

         NO_DRAW:          The flag to determine if the pixmap ignores draw invocations.

         PARENT:           The object to be parent of this one in a hierarchy.

         RETAIN:           Set this keyword to determine how backing store is handled. See IDL WIDGET_DRAW
                           documentation for details. Set to 1 by default for Windows machines and to 2 otherwise.

         TARGETWINDOW:     Set this to a window object reference that will be the target window for the pixmap.
                           If this property is undefined, the current graphics window is used as the target window.

         UNITS:            The units for measurments. The default is 0 for pixels. Other values are
                           1 for inches, and 2 for centimeters.

         XSIZE:            The width of the pixmap window canvas.

         YSIZE:            The height of the pixmap window canvas.

         _EXTRA:           Any keywords appropriate for the "WidgetAtom::Init" method.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::MESSAGEHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::MESSAGEHANDLER

     PURPOSE:

           This method receives notification of a message call from another object's SENDMESSAGE
           method.

     SYNTAX:

           thisObject -> MessageHandler, title, SENDER=sender, MESSAGE=message

     ARGUMENTS:

           TITLE:   The title of the message.

     KEYWORDS:

           DATA:    A keyword that contains any information the sender wishes to pass
                    with the message. It can be empty.

           SENDER:  The object that generated the message

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::NOTIFY_REALIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::NOTIFY_REALIZE

     PURPOSE:

           At realization, the pixmap's draw widget is initialized

     SYNTAX:

           self -> Notify_Realize, object

     ARGUMENTS:

           OBJECT: The object that was realized (often the self object).

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::REFRESH

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::REFRESH

     PURPOSE:

           This method regenerates the contents of the pixmap window.

     SYNTAX:

           pixmapObj -> Refresh

     ARGUMENTS:

           None.

     KEYWORDS:

           HOURGLASS:      Set this keyword to enable the hourglass cursor for the draw operation.

           NO_DELETE:      Set this keyword to prevent the method from destroying the draw widget
                           when KEEP=0. Primarily when the refresh is called from the COPY method.

           REQUESTER:      This optional keyword is set to the object that requests a DRAW of the
                           DrawWidget. This is helpful sometimes when DRAWWIDGET_DRAW messages
                           are received by other objects. The object reference is passed on as
                           the DATA in the DRAWWIDGET_DRAW message.

           TARGETS:        Typically, calling the REFRESH method of a PixmapWidget will call the DRAW
                           method of any objects in its container. However, if the TARGETS keyword
                           is set to an object reference (or array of object references), only these
                           objects will be drawn. This would allow you, for example, to re-draw only
                           a single image object in a window with several image objects.

           _EXTRA:         Any extra keywords appropriate for the "WidgetAtom::Draw" method.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::RESIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::RESIZE

     PURPOSE:

           This method resizes the canvas area of the pixmap widget.
    ;
     SYNTAX:

           pixmapObj -> Resize, xsize, ysize

     ARGUMENTS:

           XSIZE:     The new X size of the canvas area of the draw widget, in pixels.

           YSIZE:     The new Y size of the canvas area of the draw widget, in pixels.

     KEYWORDS:

           NOREFRESH: Set this keyword to disable the default call to the REFRESH method when the draw widget
                      resizing is completed. If you use this keyword, you will be responsible for setting
                      the pixmap READY flag when the pixmap is ready for display.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the PixmapWidget object's properties

     SYNTAX:

           PixmapWidget -> SetProperty, XSIZE=300, YSIZE=500

     ARGUMENTS:

           None.

     ARGUMENTS:

           None.

     KEYWORDS:

         BACKGROUNDCOLOR: The background color of the pixmap window.

         DRAW_COLOR:      The name of the drawing color to use for overlays.

         KEEP:            Keep the pixmap in memory, rather than re-create it when needed.

         NO_DRAW:         Set this keyword to 1 to make pixmap ignore all DRAW method calls.

         READY:           A flag to show if the window needs updating before copy.

         XSIZE:           The width of the pixmap window canvas.

         YSIZE:           The height of the pixmap window canvas.

         _EXTRA:          Any keywords appropriate for the  superclass SetProperty methods.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::SETWINDOW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::SETWINDOW

     PURPOSE:

           This method sets the window pixmap widget to be the current graphics window.
           Note that when the pixmap is no longer required to be the current window, the
           UnSetWindow method below should be called which will delete the draw widget
           (and free the memory resources) if required.

     SYNTAX:

           thisPixmapObj -> SetWindow

     ARGUMENTS:

           None.

     KEYWORDS:

           None

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PIXMAPWIDGET::UNSETWINDOW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PIXMAPWIDGET::UnSetWindow

     PURPOSE:

           This method is used to tell the pixmap that it is no longer required
           as the current window. This is so that if KEEP=0, the draw widget
           can be destroyed.

     SYNTAX:

           thisPixmapObj -> UnSetWindow

     ARGUMENTS:

           None.

     KEYWORDS:

           NO_DELETE:      If this keyword is set, the draw widget is not destroyed.

           NO_SNAPSHOT:    If this keyword is set, a snapshop of the pixmap is not created.

(See C:\IDL\Catalyst\source\widgets\pixmapwidget__define.pro)

## PROPERTYPANEL::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYPANEL::CLEANUP

     PURPOSE:

           This is the PROPERTYPANEL object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\propertypanel__define.pro)

## PROPERTYPANEL::DISPLAY_SLIDER_BAR

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            PROPERTYPANEL::DISPLAY_SLIDER_BAR

     PURPOSE:

            A utility routine for drawing the slider bar that is the panel separator.

     SYNTAX:

            theObject -> Display_Slider_Bar, index

     ARGUMENTS:

           index:    An integer specifying which view of the slider bar to display.  0 - normal view
                     (active, gray background), 1 - inactive, 2 - highlighted.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\propertypanel__define.pro)

## PROPERTYPANEL::DRAW_DASHED_BAR

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            PROPERTYPANEL::DRAW_DASHED_BAR

     PURPOSE:

            A utility routine for drawing a dashed bar as the panel separator
            is moved.

     SYNTAX:

            theObject -> DrawDashedBar

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\propertypanel__define.pro)

## PROPERTYPANEL::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            PROPERTYPANEL::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the PROPERTYPANEL object. It will typically
            be used to respond to events from widget objects created in the CONTROLPANEL
            method.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\propertypanel__define.pro)

## PROPERTYPANEL::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYPANEL::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain PROPERTYPANEL properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         MINSIZE:        The minimum X size of either the left or right panel.

         _REF_EXTRA:     Any keywords appropriate for the superclass GetProperty method.

(See C:\IDL\Catalyst\source\widgets\propertypanel__define.pro)

## PROPERTYPANEL::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYPANEL::INIT

     PURPOSE:

           This is the PROPERTYPANEL object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

           theObject:     An object reference to the objects whose contents you wish to view.

     KEYWORDS:

         MINSIZE:        The minimum X size of either the left or right panel. By default 200 pixels.

         LEFT_XSIZE:     The pixel size of the left-most panel containing the tree widgets. By default, 2*MINSIZE.

         RIGHT_XSIZE:    The pixel size of the right-most panel containing the property sheet of the
                         currently selected tree-widget. By defaul,t 2*MINSIZE.

         TITLE:          The title of the PropertyPanel top-level base.

         YSIZE:          The Y pixel size of the panels. By default, 2*MINSIZE.

         _EXTRA:         Any keywords appropriate for the superclass INIT method.

(See C:\IDL\Catalyst\source\widgets\propertypanel__define.pro)

## PROPERTYPANEL::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYPANEL::SETPROPERTY

     PURPOSE:

           This method allows the user to set the PROPERTYPANEL object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         MINSIZE:        The minimum X size of either the left or right panel.

     KEYWORDS:

         _EXTRA:         Any keywords appropriate for the superclass SetProperty method.

(See C:\IDL\Catalyst\source\widgets\propertypanel__define.pro)

## PROPERTYPANEL__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYPANEL__DEFINE

     PURPOSE:

           The purpose of this routine is to create a panel object, which has
           a tree-widget showing the object hierarchy on the left and the
           control panel of each selected tree-widget object on the right.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("PROPERTYPANEL")

     SUPERCLASSES:

           TOPLEVELBASE
           WIDGETATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { PROPERTYPANEL, $
                 INHERITS TOPLEVELBASE, $          ; The PROPERTYPANEL is a TOPLEVELBASE.
                 controlPanel: Obj_New(), $        ; The current control panel in the display.
                 curpos: 0L, $                     ; Current position of line. Used to move the line.
                 delta: 0L, $                      ; Current distance line has moved.
                 down: 0L, $                       ; Status flag of button DOWN in line widget.
                 left_arrow: Obj_New(), $          ; The left-facing arrow.
                 left_base: Obj_New(), $           ; The left-most base widget (holds tree-widgets).
                 left_xsize: 0L, $                 ; Y size of left base.
                 line_base: Obj_New(), $           ; Holds separator widgets.
                 line_drawID: Obj_New(), $         ; Contains the line.
                 linepix: Ptr_New(), $             ; An array of values that make up the line.
                 minsize: 0L, $                    ; The minumum X size allowed for the left and right base widgets.
                 move_drawID_1: Obj_New(), $       ; Allows the line to be moved.
                 move_drawID_2: Obj_New(), $       ; Allows the line to be moved in X Windows.
                 move_base_1: Obj_New(), $         ; Allows the line to be moved.
                 move_base_2: Obj_New(), $         ; Allows the line to be moved in X Windows.
                 right_arrow: Obj_New(), $         ; The right-facing arrow.
                 right_base: Obj_New(), $          ; The right-most base widget (holds control panels).
                 right_xsize: 0L, $                ; X size of right base.
                 statusbar: Obj_New(), $           ; A statusbar widget.
                 topbase: Obj_New(), $             ; The top-most widget in the widget hierarchy.
                 treeWidget: Obj_New(), $          ; The container contents tree widget.
                 visible: 0L, $                    ; Current visibility. 1-left base only, 2-right base only, 3-both bases.
                 xspace: 0L, $                     ; Used to create the line image.
                 ysize: 0L $                       ; The Y size of the right and left base widgets.
               }

     MESSAGES:

       None.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 1 Sept 2005.

(See C:\IDL\Catalyst\source\widgets\propertypanel__define.pro)

## PROPERTYSHEETWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYSHEETWIDGET::ADD

     PURPOSE:

           This method is where you can screen what kinds of objects are
           added to this object's hierarchy. The method is not always needed.
           If you do create it, be CERTAIN to call the WIDGETATOM ADD method
           or your program will not work correctly.

     SYNTAX:

           theObject -> Add, object

     ARGUMENTS:

         object:     The object to be added to this one.

     KEYWORDS:

         _EXTRA:     Any keywords appropriate for the WIDGETATOM Add method.

(See C:\IDL\Catalyst\source\widgets\propertysheetwidget__define.pro)

## PROPERTYSHEETWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYSHEETWIDGET::CLEANUP

     PURPOSE:

           This is the PROPERTYSHEETWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\propertysheetwidget__define.pro)

## PROPERTYSHEETWIDGET::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYSHEETWIDGET::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the PROPERTYSHEETWIDGET object. A
           control panel is a graphical user interface for setting object
           properties. If you create a control panel, the events are typically
           sent to the EVENTHANDLER method.

     SYNTAX:

           theObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window (i.e., a TOPLEVELBASE object).

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CatControlPanel::INIT method.

(See C:\IDL\Catalyst\source\widgets\propertysheetwidget__define.pro)

## PROPERTYSHEETWIDGET::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYSHEETWIDGET::DRAW

     PURPOSE:

           This method may or may not be needed by your object, depending
           upon whether a graphical representation of the object is required.
           If you wish the DRAW method to automatically propogates down to any
           objects contained in this object's container, call the WIDGETATOM DRAW
           method.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\propertysheetwidget__define.pro)

## PROPERTYSHEETWIDGET::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            PROPERTYSHEETWIDGET::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the PROPERTYSHEETWIDGET object. It will typically
            be used to respond to events from widget objects created in the CONTROLPANEL
            method.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\propertysheetwidget__define.pro)

## PROPERTYSHEETWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYSHEETWIDGET::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain PROPERTYSHEETWIDGET properties. Be sure
           you ALWAYS call the WIDGETATOM GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         COMPONENT:      Set this to the component (object) for which information is requested.

         PROPERTY_VALID: Set this to a string to see if this string is a valid property of the widget.
                         The return value of this variable will be a 1 if the string is a valid property,
                         or a 0 if the string is not a valid property.

         PROPERTY_VALUE: Set this to the particular property identifier you which to know the
                         value of.

         VALUE:          The value of a particular COMPONENT and PROPERTY_VALUE.

         _REF_EXTRA:     Any keywords appropriate for the WIDGETATOM GetProperty method.

(See C:\IDL\Catalyst\source\widgets\propertysheetwidget__define.pro)

## PROPERTYSHEETWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYSHEETWIDGET::INIT

     PURPOSE:

           This is the PROPERTYSHEETWIDGET object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         ALIGN_BOTTOM: Set this keyword to align the base widget with the bottom of the parent base.

         ALIGN_CENTER: Set this keyword to align the base widget with the center of the parent base.

         ALIGN_LEFT:   Set this keyword to align the base widget with the left of the parent base.

         ALIGN_RIGHT:  Set this keyword to align the base widget with the right of the parent base.

         ALIGN_TOP:    Set this keyword to align the base widget with the top of the parent base.

         CONTEXT_EVENTS: Set this keyword to make the base widget return WIDGET_CONTEXT events when
                       the right mouse button is clicked over this base widget.

         SCR_XSIZE:    Set the screen X size of the base to this many pixels. (Use discouraged.)

         SCR_YSIZE:    Set the screen Y size of the base to this many pixels. (Use discouraged.)

         UNITS:        The units for measurments. The default is 0 for pixels. Other values are
                       1 for inches, and 2 for centimeters.

         VALUE:        The object associated with the property sheet.

         XOFFSET:      The horizontal space (pixels) from upper left corner of the display.

         XSIZE:        The X size of the widget.

         YOFFSET:      The vertical space (pixels) from upper left corner of the display.

         YSIZE:        The Y size of the widget.

         _EXTRA:       Any keywords appropriate for the WIDGETATOM INIT method.

(See C:\IDL\Catalyst\source\widgets\propertysheetwidget__define.pro)

## PROPERTYSHEETWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYSHEETWIDGET::SETPROPERTY

     PURPOSE:

           This method allows the user to set the PROPERTYSHEETWIDGET object's properties. Be sure
           you ALWAYS call the WIDGETATOM SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

        REFRESH_PROPERTY: Set this keyword to refresh all the properties in the property sheet widget.

         _EXTRA:          Any keywords appropriate for the WIDGETATOM SetProperty method.

(See C:\IDL\Catalyst\source\widgets\propertysheetwidget__define.pro)

## PROPERTYSHEETWIDGET__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           PROPERTYSHEETWIDGET__DEFINE

     PURPOSE:

           The purpose of this routine is to create a propertysheet widget as an object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("PROPERTYSHEETWIDGET")

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { PROPERTYSHEETWIDGET, $
                 INHERITS WIDGETATOM $
               }

     MESSAGES:

       None.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 21 April 2004.

(See C:\IDL\Catalyst\source\widgets\propertysheetwidget__define.pro)

## SELECTABLEDRAWWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEDRAWWIDGET

     PURPOSE:

           The purpose of this routine is to subclass a draw widget so that items in the
           draw widget can be "selectable" and interactive. The type of interaction available
           is limited to moving objects (with the left mouse button) or calling their
           control panel (with the right mouse button).

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           selectableDrawWidget = Obj_New("SelectableDrawWidget", theParent)

     SUPERCLASSES:

           DRAWWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { SelectableDrawWidget,          $
                 _event_handler: Obj_New(), $ ; The real event handler object(s) for the DROPLISTWIDGET.
                 _event_method_real: "", $    ; The event method assigned by the user to this object widget.
                 _select_events: 0L, $        ; A flag that indicates SELECT_EVENTS are turned on.
                 INHERITS DRAWWIDGET $        ; INHERITS DRAWWIDGET capabilities.
                 }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 31 March 2005.
           Added ability to double-buffer output through BUFFER_OUTPUT keyword. 8 July 2005. DWF.

(See C:\IDL\Catalyst\source\widgets\selectabledrawwidget__define.pro)

## SELECTABLEDRAWWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEDRAWWIDGET::CLEANUP

     PURPOSE:

           This is the SELECTABLEDRAWWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the superclass CLEANUP methods.

(See C:\IDL\Catalyst\source\widgets\selectabledrawwidget__define.pro)

## SELECTABLEDRAWWIDGET::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEDRAWWIDGET::EVENTHANDLER

     PURPOSE:

           This is the event handler method of the object. The purpose is to check
           for SELECTABLEOBJECTS if SELECT_EVENTS is set. Otherwise, the object acts
           identically to a draw widget.

     SYNTAX:

           widgetObject -> EventHandler, event

     ARGUMENTS:

           event:  The event created by the draw widget.

(See C:\IDL\Catalyst\source\widgets\selectabledrawwidget__define.pro)

## SELECTABLEDRAWWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEDRAWWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to obtain the SelectableDrawWidget object's properties

     SYNTAX:

           aSelectableDrawWidget -> GetProperty, WINDOW_ID=wid

     ARGUMENTS:

           None.

     KEYWORDS:

          BUFFER_OUTPUT:     Set to 1 if buffer output is turned on, to 0 otherwise.

          BUFFER_PIXMAP:     The buffer pixmap object, if one is available.

          SELECT_EVENTS:     Set to 1 if SELECT_EVENTS is turned on, to 0 otherwise.

           _REF_EXTRA:       Any keywords appropriate for the superclass GetProperty methods.

(See C:\IDL\Catalyst\source\widgets\selectabledrawwidget__define.pro)

## SELECTABLEDRAWWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEDRAWWIDGET::INIT

     PURPOSE:

           This is the SELECTABLEDRAWWIDGET object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

           theParent - An object reference to a WIDGETATOM-subclassed object.
               This is the same as using the PARENT keyword.

     KEYWORDS:

           BUFFER_OUTPUT:   Output to the display window is typically buffered to some extent,
                            but still requires drawing to a pixmap window, which can be slower
                            than you like under some circumstances. Setting this keyword creates
                            a second pixmap so that output can be double-buffered. This results
                            in faster display, but at the cost of additional window memory.

           SELECT_EVENTS:   Set this keyword to turn selection events (the ability to sense SELECTABLEOBJECTS)
                            on for this draw widget. The keyword is turned OFF by default to conform with
                            the expectations of normal draw widgets.

           _EXTRA:          Any keyword appropriate for the superclass INIT methods.

(See C:\IDL\Catalyst\source\widgets\selectabledrawwidget__define.pro)

## SELECTABLEDRAWWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEDRAWWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the SelectableDrawWidget object's properties

     SYNTAX:

           aSelectableDrawWidget -> SetProperty, BUTTON_EVENTS=1

     ARGUMENTS:

           None.

     KEYWORDS:

           BUFFER_OUTPUT:   Normally, output to the display window is not buffered.
                            Depending upon what is in the window, this may result in
                            distracting flashing. If this is undesireable, set this keyword
                            and the output will be double-buffered to the display window.

           INITIAL_COLOR:   The name of the initial color for the draw widget. Used when realized and
                            if the draw widget is set up to erase before display (i.e., ERASE_WINDOW=1).

           SELECT_EVENTS:   Turns select events on (1) or off (0).

           _EXTRA:          Any keywords appropriate for the superclass SetProperty methods.

(See C:\IDL\Catalyst\source\widgets\selectabledrawwidget__define.pro)

## SLIDERWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SLIDERWIDGET

     PURPOSE:

           The purpose of this routine is to implement a slider widget as an object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           sliderWidget = Obj_New("sliderWidget", parent)

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

        class = { sliderWidget, INHERITS widgetAtom }

     MODIFICATION_HISTORY:

           Written by: David Fanning, 24 March 2003.

(See C:\IDL\Catalyst\source\widgets\sliderwidget__define.pro)

## SLIDERWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SLIDERWIDGET::ADD

     PURPOSE:

           This method overrides the superclass Add method to prevent addition of
           other widget objects to slider objects.

     SYNTAX:

           sliderObject -> Add, object

     ARGUMENTS:

           object: The object to add to the container. Only objects that are NOT subclassed
                   from WIDGETATOM objects can be added.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\sliderwidget__define.pro)

## SLIDERWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SLIDERWIDGET::CLEANUP

     PURPOSE:

           This is the SLIDERWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the "WidgetAtom::Cleanup" method.

(See C:\IDL\Catalyst\source\widgets\sliderwidget__define.pro)

## SLIDERWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SLIDERWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to get the object's properties.

     SYNTAX:

           sliderObject -> GetProperty, VALUE=sliderValue

     ARGUMENTS:

           None.

     KEYWORDS:

           VALUE:       The current value of the slider widget.

           MINIMUM:     The minimum value for the slider.

    ;      MAXIMUM:     The maximum value for the slider.

           _REF_EXTRA:  Any keyword appropriate for the "WidgetAtom::GetProperty" object method.

(See C:\IDL\Catalyst\source\widgets\sliderwidget__define.pro)

## SLIDERWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SLIDERWIDGET::INIT

     PURPOSE:

           This is the SLIDERWIDGET object class initialization method.

     ARGUMENTS:

           theParent - The parent object reference. This is the same as using the PARENT keyword.

     KEYWORDS:

           DRAG:        Set this keyword to create events as the slider is dragged. Drag events
                        are not possible on WINDOWS operating systems. It is not possible to turn
                        continuous drag events on using SETPROPETY.

           FONT:        The name of a font to be used by the widget.

           FRAME:       Create a frame this many pixels wide around base.

           MINIMUM:     The minimum value for the slider.

           MAXIMUM:     The maximum value for the slider.

           PARENT:      An object reference to a container object.

           SCR_XSIZE:   Set the screen X size of the widget to this many pixels. (Use discouraged.)

           SCR_YSIZE:   Set the screen Y size of the widget to this many pixels. (Use discouraged.)

           TITLE:       The text title on the slider.

           UNITS:       The units for measurments. The default is 0 for pixels. Other values are
                        1 for inches, and 2 for centimeters.

           VALUE:       The value of the slider widget.

           VERTICAL:    Set this keyword to create a vertical slider as opposed to the default
                        horizontal slider.

           XOFFSET:     The horizontal space (pixels) from upper left corner of the parent.

           XSIZE:       The X size of the widget.

           YOFFSET:     The vertical space (pixels) from upper left corner of the parent.

           YSIZE:       The Y size of the widget.

           _EXTRA:      Any keyword appropriate for the "WidgetAtom::Init" method.

(See C:\IDL\Catalyst\source\widgets\sliderwidget__define.pro)

## SLIDERWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SLIDERWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the object's properties.

     SYNTAX:

           sliderObject -> SetProperty, VALUE=sliderValue

     ARGUMENTS:

           None.

     KEYWORDS:

           VALUE:       The value of the slider widget.

           MINIMUM:     The minimum value for the slider.

    ;      MAXIMUM:     The maximum value for the slider.

           _EXTRA:      Any keyword appropriate for the "WidgetAtom::SetProperty" object method.

(See C:\IDL\Catalyst\source\widgets\sliderwidget__define.pro)

## SPINNER::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
          SPINNER::CLEANUP

     PURPOSE:

           This is the SPINNER object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\IDL\Catalyst\source\widgets\spinner__define.pro)

## SPINNER::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
          SPINNER::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the SPINNER object. A
           control panel is a graphical user interface for setting object
           properties. If you create a control panel, the events are typically
           sent to the EVENTHANDLER method.

     SYNTAX:

           theObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window (i.e., a TOPLEVELBASE object).

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CatControlPanel::INIT method.

(See C:\IDL\Catalyst\source\widgets\spinner__define.pro)

## SPINNER::CONTROLPANELEVENTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            Spinner::CONTROLPANELEVENTS

     PURPOSE:

            This method is the event handler for the Spinner object's ControlPanel.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\spinner__define.pro)

## SPINNER::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SPINNER::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the SPINNER object. It will typically
            be used to respond to events from widget objects created in the CONTROLPANEL
            method.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\spinner__define.pro)

## SPINNER::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
          SPINNER::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain SPINNER properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         INCREMENT:      The increment by which the spinner value changes.

         LABELWIDGET:    The label widget holding the title (if there is one).

         SPINDELAY:      The time delay before the spinner kicks into gear. Allows the user
                         to depress the arrow buttons without activating the spinner. By default 0.05 seconds.

         TEXTWIDGET:     The text widget holding the value of the spinner.

         VALUE:          The current value of the spinner.

         _REF_EXTRA:     Any keywords appropriate for the superclass GetProperty method.

(See C:\IDL\Catalyst\source\widgets\spinner__define.pro)

## SPINNER::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
          SPINNER::INIT

     PURPOSE:

           This is the SPINNER object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         parent:     The parent object referece. This object will be added to the parent's container.

     KEYWORDS:

         INCREMENT:    The increment by which the spinner value changes. By default, 1.0D.

         SPINDELAY:    The time delay before the spinner kicks into gear. Allows the user
                       to depress the arrow buttons without activating the spinner. By default 0.05 seconds.

         TITLE:        A string label that goes next to the spinner to identify it. By default, "".

         VALUE:        The current value of the spinner. By default, 0.0D.

         VERTICAL:     Set this keyword to put the spinner title (if there is one) above the spinner, rather
                       than beside it.

         XTITLESIZE:   Passed on the the SCR_XSIZE of the label widget that holds the title. No default value.

         XSPINSIZE:    Passed on to the XSIZE of the text widget used to hold the value of the spinner. By default, 8.

         _EXTRA:       Any keywords appropriate for the superclass INIT method.

(See C:\IDL\Catalyst\source\widgets\spinner__define.pro)

## SPINNER::SENDEVENT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
          SPINNER::SENDEVENT

     PURPOSE:

           This method sends an event from the compound widget to the actual event handler.

     SYNTAX:

           theObject -> SendEvent

     ARGUMENTS:

         None.

     KEYWORDS:

         None

(See C:\IDL\Catalyst\source\widgets\spinner__define.pro)

## SPINNER::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
          SPINNER::SETPROPERTY

     PURPOSE:

           This method allows the user to set the SPINNER object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         INCREMENT:    The increment by which the spinner value changes. By default, 1.0D.

         SPINDELAY:    The time delay before the spinner kicks into gear. Allows the user
                       to depress the arrow buttons without activating the spinner. By default 0.05 seconds.

         VALUE:        The current value of the spinner. By default, 0.0D.

         _EXTRA:       Any keywords appropriate for the superclass SetProperty method.

(See C:\IDL\Catalyst\source\widgets\spinner__define.pro)

## SPINNER__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
          SPINNER__DEFINE

     PURPOSE:

           The purpose of this routine is to implement a spinner widget, in which
           arrow buttons affect the value of the spinner. Leaving the cursor down
           on an arrow button will cause the value of the spinner to "spin" or
           change rapidly.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("SPINNER")

     SUPERCLASSES:

           BASEWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = {SPINNER, $
                 INHERITS BASEWIDGET $
               }

     MESSAGES:

       None.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 26 September 2005.
           Fixed bug that allows spinner value to be set manually. 25 July 2007. DWF.

(See C:\IDL\Catalyst\source\widgets\spinner__define.pro)

## STATUSBAR

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           STATUSBAR

     PURPOSE:

           The purpose of this routine is to implement a status bar that can be used
           to alert the user to the current status of the system.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Compound object widgets.

     SYNTAX:

           aStatusBar = Obj_New("STATUSBAR", theParent, Status='Ready')

     SUPERCLASSES:

           LABELWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { STATUSBAR, $
                 INHERITS LABELWIDGET, $ ; Inherits LABELWIDGET.
                 _percent: 0L $          ; Percentage of size of parent widget.
               }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 25 August 2002.

(See C:\IDL\Catalyst\source\widgets\statusbar__define.pro)

## STATUSBAR::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           STATUSBAR::CLEANUP

     PURPOSE:

           This is the STATUSBAR object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the  superclass CLEANUP methods.

(See C:\IDL\Catalyst\source\widgets\statusbar__define.pro)

## STATUSBAR::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           STATUSBAR::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the STATUSBAR object. A
           control panel is a graphical user interface for setting object
           properties. If you create a control panel, the events are typically
           sent to the EVENTHANDLER method.

     SYNTAX:

           theObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window (i.e., a TOPLEVELBASE object).

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CatControlPanel::INIT method.

(See C:\IDL\Catalyst\source\widgets\statusbar__define.pro)

## STATUSBAR::EVENTTRACKING

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            STATUSBAR::EVENTTRACKING

     PURPOSE:

            This a genertic method for handling widget tracking events. The HELPLINE
            string is removed from the event.ID object and used in the status bar as
            the one-line widget tracking value.

     SYNTAX:

            This method is called (typically) from an EVENTHANDLER method.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\statusbar__define.pro)

## STATUSBAR::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            STATUSBAR::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the STATUSBAR object. It will typically
            be used to respond to events from widget objects created in the CONTROLPANEL
            method.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\statusbar__define.pro)

## STATUSBAR::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           STATUSBAR::GETPROPERTY

     PURPOSE:

           This method is used to obtain the STATUSBAR object's properties

     SYNTAX:

           aStatusBar -> GetProperty, Status=theStatus

     ARGUMENTS:

           None.

     KEYWORDS:

           TEXT:          The current status text.

           _REF_EXTRA:    Any keywords appropriate for the superclass GetProperty methods.

(See C:\IDL\Catalyst\source\widgets\statusbar__define.pro)

## STATUSBAR::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           STATUSBAR::INIT

     PURPOSE:

           This is the STATUSBAR object class initialization method

     SYNTAX:

           statusbar = Obj_New('STATUSBAR')

     ARGUMENTS:

           theParent:     An object reference to a WIDGETATOM-subclassed object.
                          This is the same as using the PARENT keyword.

     KEYWORDS:

           ALIGN_BOTTOM:   Set this keyword to align the statusbar widget with the bottom of the parent base.

           ALIGN_CENTER:   Set this keyword to align the statusbar widget with the center of the parent base.

           ALIGN_LEFT:     Set this keyword to align the statusbar widget with the left of the parent base.

           ALIGN_RIGHT:    Set this keyword to align the statusbar widget with the right of the parent base.

           ALIGN_TOP:      Set this keyword to align the statusbar widget with the top of the parent base.

           FONT:           Set this keyword to the name of a font to use on the status bar.

           FRAME:          Set this keyword to create a frame this many pixels wide around the
                           status bar. Set to 1 by default.

           PARENT:         An object reference to a WIDGETATOM-subclassed object.

           PERCENT:        A number between 10 and 100 indicating the size of the status bar
                           with respect to the size of its parent widget object.

           SCR_XSIZE:      Set the screen X size of the widget to this many pixels. (Use discouraged.)

           SCR_YSIZE:      Set the screen Y size of the widget to this many pixels. (Use discouraged.)

           TEXT:           A text string for display in the status bar. Set to "Ready" by default.

           UNITS:          The units for measurments. The default is 0 for pixels. Other values are
                           1 for inches, and 2 for centimeters.

           XOFFSET:        The horizontal space (pixels) from upper left corner of the parent.

           XSIZE:          The X size of the widget.

           YOFFSET:        The vertical space (pixels) from upper left corner of the parent.

           YSIZE:          The Y size of the widget.

           _EXTRA:         Any keyword appropriate for the superclass INIT methods.

(See C:\IDL\Catalyst\source\widgets\statusbar__define.pro)

## STATUSBAR::NOTIFY_REALIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           STATUSBAR::NOTIFY_REALIZE

     PURPOSE:

           This method is used to set the initial size of the status bar when
           it is realized.

     SYNTAX:

           It is called automatically by the Catalyst Library system.

     ARGUMENTS:

           object:   The widget object reference of the object being realized.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\statusbar__define.pro)

## STATUSBAR::RESIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           STATUSBAR::RESIZE

     PURPOSE:

           This method is used to resize the status bar at the end of a resize event.

     SYNTAX:

           statusBar -> Resize

     ARGUMENTS:

           objectToMatch:   When resizing, the status bar will normally size itself according
                            to its parent base object. If this parameter is passed, it will size
                            itself to the dimensions of this object.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\statusbar__define.pro)

## STATUSBAR::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           STATUSBAR::SETPROPERTY

     PURPOSE:

           This method is used to set the STATUSBAR object's properties

     SYNTAX:

           aStatusBar -> SetProperty, Status=theStatus

     ARGUMENTS:

           None.

     KEYWORDS:

           TEXT:            The status bar text.

           _EXTRA:          Any keywords appropriate for the superclass SetProperty methods.

(See C:\IDL\Catalyst\source\widgets\statusbar__define.pro)

## TABWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TABWIDGET::ADD

     PURPOSE:

           This method overrides the superclass Add method to prevent addition of
           other widget objects to text objects.

     SYNTAX:

           textObject -> Add, object

     ARGUMENTS:

           object: The object to add to the container. Only objects that are NOT subclassed
                   from WIDGETATOM objects can be added.

     KEYWORDS:

           _Extra: Any keywords for the superclass object.

(See C:\IDL\Catalyst\source\widgets\tabwidget__define.pro)

## TABWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TABWIDGET::CLEANUP

     PURPOSE:

           This is the TABWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\tabwidget__define.pro)

## TABWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TABWIDGET::GETPROPERTY

     PURPOSE:

           This method enables the getting of the TABWIDGET object class
           properties.

     SYNTAX:

           aTabWidget -> GetProperty, CURRENT=tab_current

     ARGUMENTS:

         None.

     KEYWORDS:

         CURRENT:     The index value of the current or visible tab.

         MULTILINE:   The current value of the MULTILINE property.

         NUMBER:      The number of tabs contained in the tab widget.

         _REF_EXTRA:  Any keywords appropriate for the WIDGETATOM::GetProperty method.

(See C:\IDL\Catalyst\source\widgets\tabwidget__define.pro)

## TABWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TABWIDGET::INIT

     PURPOSE:

           This is the TABWIDGET object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         parent      The parent object reference for this object widget.

     KEYWORDS:

         ALIGN_BOTTOM: Set this keyword to align the base widget with the bottom of the parent base.

         ALIGN_CENTER: Set this keyword to align the base widget with the center of the parent base.

         ALIGN_LEFT:   Set this keyword to align the base widget with the left of the parent base.

         ALIGN_RIGHT:  Set this keyword to align the base widget with the right of the parent base.

         ALIGN_TOP:    Set this keyword to align the base widget with the top of the parent base.

         LOCATION:     Set this keyword to an integer that specifies which edge of the widget will contain
                       the tabs. Possible values are:

                       0 - Tabs are placed along the top of the widget. (The default.)
                       1 - Tabs are placed along the bottom of the widget.
                       2 - Tabs are placed along the left edge of the widget. (Text is displayed vertically.)
                       3 - Tabs are placed along the right edge of the widget. (Text is displayed vertically.)

         MULTILINE:    This keyword controls how tabs appear when all of the tabs do not fit on the widget
                       in a single row. The behavior and value of the keyword differs in Windows and in Motif.
                       Check the IDL on-line documentation for WIDGET_TAB for more detail. Set this keyword to
                       1 on Windows and the tabs will be displayed with scroll bars. On Motif, set this keyword
                       to the maximum number of tabs for each row of tabs.

         SCR_XSIZE:    Set the screen X size of the base to this many pixels. (Use discouraged.)

         SCR_YSIZE:    Set the screen Y size of the base to this many pixels. (Use discouraged.)

         UNITS:        The units for measurments. The default is 0 for pixels. Other values are
                       1 for inches, and 2 for centimeters.

         XOFFSET:      The horizontal space (pixels) from upper left corner of the display.

         XSIZE:        The X size of the widget.

         YOFFSET:      The vertical space (pixels) from upper left corner of the display.

         YSIZE:        The Y size of the widget.

         _EXTRA:       Any keywords appropriate for the WIDGETATOM::INIT method.

(See C:\IDL\Catalyst\source\widgets\tabwidget__define.pro)

## TABWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TABWIDGET::SETPROPERTY

     PURPOSE:

           This method enables the setting of the TABWIDGET object class
           properties.

     SYNTAX:

           aTabWidget -> SetProperty, CURRENT=4

     ARGUMENTS:

         None.

     KEYWORDS:

         CURRENT:       Set this keyword equal to the index of the tab to be set as the current
                        (visible) tab. If the index is invalid, it is quietly ignored.

         MULTILINE:     Set this keyword to control how multiple tabs appear. The value is platform
                        dependent. See the IDL on-line documentation for WIDGET_TAB for details.

         _EXTRA:       Any keywords appropriate for the WIDGETATOM::SetProperty method.

(See C:\IDL\Catalyst\source\widgets\tabwidget__define.pro)

## TABWIDGET__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TABWIDGET__DEFINE

     PURPOSE:

           The purpose of this routine is to implement a tab widget as an object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     CALLING_SYNTAX:

           aTabWidget = Obj_New("TABWIDGET", parent)

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { TABWIDGET, $           ; Tab widget object class
                 INHERITS WIDGETATOM $  ; Inherits WidgetAtom object class.
               }

     MODIFICATION_HISTORY:

           Written by: David Fanning, 20 April 2003.

(See C:\IDL\Catalyst\source\widgets\tabwidget__define.pro)

## TEXTWIDGET

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTWIDGET

     PURPOSE:

           The purpose of this routine is to implement a text widget as an object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           textWidget = Obj_New("TextWidget", theParent, Value='The Text')

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

        class = { TEXTWIDGET, INHERITS WidgetAtom }

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 24 July 2002.
           Modified keywords in the SetProperty method that started with SET_, dropping this prefix
              to keep them consistent with the same keywords in the GetProperty method. 18 July 2004. DWF.

(See C:\IDL\Catalyst\source\widgets\textwidget__define.pro)

## TEXTWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTWIDGET::ADD

     PURPOSE:

           This method overrides the superclass Add method to prevent addition of
           other widget objects to text objects.

     SYNTAX:

           textObject -> Add, object

     ARGUMENTS:

           object: The object to add to the container. Only objects that are NOT subclassed
                   from WIDGETATOM objects can be added.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\textwidget__define.pro)

## TEXTWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTWIDGET::CLEANUP

     PURPOSE:

           This is the TEXTWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the "WidgetAtom::Cleanup" method.

(See C:\IDL\Catalyst\source\widgets\textwidget__define.pro)

## TEXTWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTWIDGET::GETPROPERTY

     PURPOSE:

           This method is used to get the object's properties.

     SYNTAX:

           textObject -> GetProperty, VALUE=theText

     ARGUMENTS:

           None.

     KEYWORDS:

           ALL_EVENTS:  Returns a 1 if ALL_EVENTS is turned on for text widget. Returns a 0 otherwise.

           CONTEXT_EVENTS: Returns a 1 if context events are on, a 0 otherwise.

           EDITABLE:    Returns a 1 if EDITABLE is turned on for text widget. Returns a 0 otherwise.

           NUMBER:      Returns the number of characters currently in the text widget.

           TEXT_OFFSET_TO_XY: Use this keyword to translate a text widget character offset
                        into column and line form. The value of this keyword should
                        be set to the character offset (an integer) to be translated.
                        A two-element integer array is returned, giving the column
                        (element 0) and line (element 1) corresponding to the offset.
                        If the offset specified is out of range, the array [-1,-1]
                        is returned.

           TEXT_SELECT: Set this keyword to return the starting character offset
                        and length (in characters) of the selected (highlighted)
                        text in the specified text widget. A two-element integer
                        array is returned containing the starting position of
                        the highlighted text as an offset from character zero
                        of the text in the widget (element 0), and length of
                        the current selection (element 1).

           TEXT_TOP_LINE: Set this keyword to return the zero-based line
                        number of the line currently at the top of a text widget's
                        display viewport. Note that this value is different from
                        the zero-based character offset of the characters in the
                        line. The character offset can be calculated from the line
                        offset via the TEXT_XY_TO_OFFSET keyword.

           TEXT_XY_TO_OFFSET: Use this keyword to translate a text widget position given in
                        line and column form into a character offset. The value of this
                        keyword should be set to a two-element integer array specifying
                        the column (element 0) and line (element 1) position. The character
                        offset (as a longword integer) is returned corresponding to the
                        position. If the position specified is out of range, -1 is returned.

           VALUE:       The current value of the text widget.

           _REF_EXTRA:  Any keyword appropriate for the "WidgetAtom::GetProperty" object method.

(See C:\IDL\Catalyst\source\widgets\textwidget__define.pro)

## TEXTWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTWIDGET::INIT

     PURPOSE:

           This is the TEXTWIDGET object class initialization method.

     ARGUMENTS:

           theParent - The parent object reference. This is the same as using the PARENT keyword.

     KEYWORDS:

           ALL_EVENTS:  Set this keyword to enable all possible text events to be generated.
                        Events depend upon the interaction of the ALL_EVENTS and EDITABLE keywords.
                        See the IDL On-Line Help for WIDGET_TEXT for details.

           CONTEXT_EVENTS:    Set this keyword to turn context events on for this widget object..

           EDITABLE:    Set this keyword to allow user editing of text widget contents.

           FONT:        The name of a font to be used by the widget.

           FRAME:       Create a frame this many pixels wide around base.

           KBRD_FOCUS_EVENTS: Set this keyword to allow keyboard focus events be generated.

           NO_NEWLINE:  Set this character to prevent new lines of text from being added when text
                        is appended to the text already available in the text widget.

           SCR_XSIZE:   Set the screen X size of the widget to this many pixels. (Use discouraged.)

           SCR_YSIZE:   Set the screen Y size of the widget to this many pixels. (Use discouraged.)

           SCROLL:      Set this keyword to allow scroll bars to be placed on the text widget.

           UNITS:       The units for measurments. The default is 0 for pixels. Other values are
                        1 for inches, and 2 for centimeters.

           VALUE:       The text to be placed in the text widget. Must be a string or string array.

           WRAP:        Set this keyword to allow text wrapping in the text widget.

           XOFFSET:     The horizontal space (pixels) from upper left corner of the parent.

           XSIZE:       The X size of the widget.

           YOFFSET:     The vertical space (pixels) from upper left corner of the parent.

           YSIZE:       The Y size of the widget.

           _EXTRA:      Any keyword appropriate for the "WidgetAtom::Init" method.

(See C:\IDL\Catalyst\source\widgets\textwidget__define.pro)

## TEXTWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTWIDGET::SETPROPERTY

     PURPOSE:

           This method is used to set the object's properties.

     SYNTAX:

           textObject -> SetProperty, VALUE='Test'

     ARGUMENTS:

           None.

     KEYWORDS:

           ALL_EVENTS:  Set this keyword to enable all possible text events to be generated.
                        Events depend upon the interaction of the ALL_EVENTS and EDITABLE keywords.
                        See the IDL On-Line Help for WIDGET_TEXT for details.

           APPEND:      If this keyword is set, and you set the VALUE of the text widget, then
                        the text is appended to the text already in the text widget, rather than
                        replacing it.

           CONTEXT_EVENTS:    Set to 1 to turn context events on for the base widget.

           EDITABLE:    Set this keyword to allow user editing of text widget contents.

           INPUT_FOCUS: Set this keyword to configure the text widget to receive keyboard focus.

           KBRD_FOCUS_EVENTS: Set this keyword to allow keyboard focus events be generated.

           NO_NEWLINE:  Set this character to prevent new lines of text from being added when text
                        is appended to the text already available in the text widget.

           TEXT_SELECT: Use this keyword to clear any current selection in the specified table
                        cell or text widget, and either set a new selection, or simply set the text
                        insertion point. To set a selection, specify a two-element integer array
                        containing the starting position and the length of the selection. For example,
                        to set a selection covering characters 3 though 23:

                        textWidget -> SetProperty, SET_TEXT_SELECT=[3, 20]

                        To move the text insertion point without setting a selection, omit the
                        second element, or set it to zero.

           TEXT_TOP_LINE: Set this keyword to the zero-based line number of the line to
                        be positioned on the topmost visible line in the text widget's
                        viewport. No horizontal scrolling is performed. Note that this
                        is a line number, not a character offset.

           USE_TEXT_SELECT: Set this keyword to modify the behavior of the VALUE keyword.
                        If USE_TEXT_SELECT is set, the VALUE replaces only the text in the
                        current text selection, not the entire text.

           VALUE:       The text that goes into the text widget.

           _EXTRA:  Any keyword appropriate for the "WidgetAtom::SetProperty" object method.

(See C:\IDL\Catalyst\source\widgets\textwidget__define.pro)

## TOPLEVELBASE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TOPLEVELBASE

     PURPOSE:

           The purpose of this routine is to implement a top-level base widget as an object. If you wish
           to create a non-top-level base widget object, use the BASEWIDGET object.

     AUTHOR:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           topLevelBase = Obj_New("TopLevelBase")

     SUPERCLASSES:

           BASEWIDGET
           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

        class = { TOPLEVELBASE, $         ; The TOPLEVELBASE object class name.
                  INHERITS BaseWidget, $  ; Subclassed from BASEWIDGET.
                  _TLB_Frame_Attr: 0 $    ; A flag that indicates the current top-level base frame attributes.
                }

     MODIFICATION_HISTORY:

           Written by: David W.Fanning, 28 June 2002.

(See C:\IDL\Catalyst\source\widgets\toplevelbase__define.pro)

## TOPLEVELBASE::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TOPLEVELBASE::CLEANUP

     PURPOSE:

           This is the TOPLEVELBASE object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the "BaseWidget::Cleanup" method.

(See C:\IDL\Catalyst\source\widgets\toplevelbase__define.pro)

## TOPLEVELBASE::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TOPLEVELBASE::Draw

     PURPOSE:

           This method is used to realize and draw the widget hierarchy. It also starts
           XMANAGER to managing the widget hierarchy.

     SYNTAX:

           aTopLevelBase -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           BLOCK:         Set this keyword to create a blocking widget hierarchy.

           CENTER:        Set this keyword to center the TLB before display.

           REGISTER_NAME: The name by which the program will be registered with XManager.

           GROUP_LEADER:  The widget identifier of a group leader for this widget hierarchy.

           JUST_REGISTER: Set his keyword to just register with XManager, but not to fire it up.

           _EXTRA:        To pass additional keywords BaseWidget::Draw

(See C:\IDL\Catalyst\source\widgets\toplevelbase__define.pro)

## TOPLEVELBASE::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TOPLEVELBASE::GETPROPERTY

     PURPOSE:

           This method is used to obtain the TopLevelBase object's properties

     SYNTAX:

           aTopLevelBase -> GetProperty, Map=ismapped

     ARGUMENTS:

           None.

     KEYWORDS:

           ICONIFY_EVENTS: Set to 1 if ICONIFY events are set for this top-level base widget.

           MAP:            Returns a 0 or 1 to indicate if the current base widget hierarchy is
                           mapped (1) or not (0).

           MODAL:          Returns a 0 or 1 to indicate if the current base widget hierarchy is modal (1) or not (0).

           MOVE_EVENTS:    Set to 1 if move events are set for this top-level base widget.

           SIZE_EVENTS:    Set to 1 if size events are set for this top-level base widget.

           _EXTRA:         Any keyword appropriate for the supercalss Draw methods.

(See C:\IDL\Catalyst\source\widgets\toplevelbase__define.pro)

## TOPLEVELBASE::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TOPLEVELBASE::INIT

     PURPOSE:

           This is the TOPLEVELBASE object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

           None.

     KEYWORDS:

           ALIGN_BOTTOM:      Set this keyword to align the base widget with the bottom of the parent base.

           ALIGN_CENTER:      Set this keyword to align the base widget with the center of the parent base.

           ALIGN_LEFT:        Set this keyword to align the base widget with the left of the parent base.

           ALIGN_RIGHT:       Set this keyword to align the base widget with the right of the parent base.

           ALIGN_TOP:         Set this keyword to align the base widget with the top of the parent base.

           BASE_ALIGN_BOTTOM: Set this keyword to align the children of this base to the bottom of the base widget.

           BASE_ALIGN_CENTER: Set this keyword to align the children of this base to the center of the base widget.

           BASE_ALIGN_LEFT:   Set this keyword to align the children of this base to the left of the base widget.

           BASE_ALIGN_RIGHT:  Set this keyword to align the children of this base to the right of the base widget.

           BASE_ALIGN_TOP:    Set this keyword to align the children of this base to the top of the base widget.

           CENTER:            Set this keyword to center the top-level base before it is realized.

           COLUMN:            Arrange the children of this base into this many columns.

           CONTEXT_EVENTS:    Set this keyword to make the base widget return WIDGET_CONTEXT events when
                              the right mouse button is clicked over this base widget.

           CONTEXT_MENU:      Set this keyword to create a base widget that can be used to hold
                              context-sensitive menu items.

           EXCLUSIVE:         Set this keyword to make an exclusive button base.

           FLOATING:          Set this keyword to have this base widget float over the top of its group leader.
                              An error results if the GROUP_LEADER keyword is not set to a valid widget identifier.

           FRAME:             Create a frame this many pixels wide around base.

           GRID_LAYOUT:       Set this keyword to lay children out in equally-spaced grid.

           GROUP_LEADER:      The widget identifier of a group leader widget. Required for
                              floating and modal top-level widgets.

           ICONIFY_EVENTS:    Set this keyword to enable events when the top-level base is iconified.

           KBRD_FOCUS_EVENTS: Set this keyworld to enable keyboard focus events.

           KILL_REQUEST_EVENTS: Set this keyword to enable a kill request event to be sent
                              to widget's event handler method.

           MAP:               Set this keyword to map (1) or unmap (0) the base. Mapped by default.

           MBAR:              This keyword returns an object reference to a MENUBARWIDGET object with
                              the name MENUBAR - see also the 'NO_MBAR' keyword below. (Output keyword).

           MODAL:             Set this keyword to create a modal top-level base widget.
                              An error results if the GROUP_LEADER keyword is not set to a valid widget identifier.

           MOVE_EVENTS:       Set this keyword to enable move events in the objects event handler.

           NO_MBAR:           Set this keyword to inhibits the creation of a MENUBARWIDGET object for this base.

           NONEXCLUSIVE:      Set this keyword to make an non-exclusive button base.

           ONLY_ONE:          Set this keyword if you wish to have only one TLB with this REGISTER_NAME on
                              the display at any one time. If the REGISTER_NAME keyword is undefined or
                              a null string, then this keyword is ignored.

           PARENT:            Set this keyword to the object reference of the "parent" of the top-level
                              base object. Doing so will cause any events that reach the top-level base event
                              handler without being handled to go to the "parent" event handler. This is
                              necessary, for example, if you are creating a "control panel" for an object,
                              when the control panel is in it's own top-level base.

           ROW:               Arrange children of this base into this many rows.

           REGISTER_NAME:     A name by which this TLB is to be registered with XMANAGER.

           SCR_XSIZE:         Set the screen X size of the base to this many pixels. (Use discouraged.)

           SCR_YSIZE:         Set the screen Y size of the base to this many pixels. (Use discouraged.)

           SCROLL:            Set this keyword to add scroll bars to the base widget.

           SIZE_EVENTS:       Set this keyword to enable events to be generated when the
                              top-level base is resized.

           SPACE:             Set this keyword to the number of pixels between children in the base.
                              Ignored for exclusive and non-exclusive bases.

           TITLE:             Set this keyword to a string containing the title for the widget.

           TLB_FRAME_ATTR:    Set this keyword to a value representing the top-level base's
                              frame attributes. The values can be additive.

                              1  Base cannot be resized, minimized, or maximized.
                              2  Suppress display of system menu.
                              4  Suppress title bar.
                              8  Base cannot be closed.
                             16 Base cannot be moved.

           UNITS:            The units for measurments. The default is 0 for pixels. Other values are
                             1 for inches, and 2 for centimeters.

           X_SCROLL_SIZE:    The X size (pixels) of the scrollable window area.

           XOFFSET:          The horizontal space (pixels) from upper left corner of the display.

           XPAD:             The amount of horizontal space (pixels) to add to edges of children.

           XSIZE:            The X size of the widget.

           Y_SCROLL_SIZE:    The Y size (pixels) of the scrollable window area

           YPAD:             The amount of vertical space (pixels) to add to edges of children.

           YOFFSET:          The vertical space (pixels) from upper left corner of the display.

           YSIZE:            The Y size of the widget.

           _EXTRA:           Any keyword appropriate for the superclass INIT methods.

(See C:\IDL\Catalyst\source\widgets\toplevelbase__define.pro)

## TOPLEVELBASE::POSITION

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TOPLEVELBASE::POSITION

     PURPOSE:

           This is a utility method to position the top-level base
           on the display at an arbitrary location. By default the
           widget is centered on the display.

     SYNTAX:

           tlbObject -> POSITION [,x, y, NOCENTER=noCenter]

     INPUTS:

           x:  Set this equal to a normalized position for the center
               of the widget as measured from the left-hand side of the screen.
               The default value is 0.5 (the center)  Setting this equal to 1.0
               places the widget at the far right-hand side of the screen.

           y:  Set this equal to a normalized position for the center
               of the widget as measured from the top of the screen.
               The default value is 0.5 (the center) Setting this equal to 1.0
               places the widget at the top of the screen.

     KEYWORDS:

          DEVICE:   Normally, the x and y parameters are specified in normalized
                    coordinates. If this keyword is set, they are taken to be in DEVICE
                    coordinates.

          NOCENTER: Typically, the center of the widget is positioned at the
                    x, y point. Setting this keyword, forces the top-left
                    corner to be at x, y.

     MODIFICATION HISTORY:

           Written by:  Dick Jackson, 12 Dec 98.
           Modified to use device-independent Get_Screen_Size
                function. 31 Jan 2000. DWF.
           Added x, y, NOCENTER and run-off protection. 26 Jan 2001. BT.
           Converted to be an object method. DB & DWF, 13th March 2003

(See C:\IDL\Catalyst\source\widgets\toplevelbase__define.pro)

## TOPLEVELBASE::REALIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TOPLEVELBASE::Realize

     PURPOSE:

           This method is used to realize the widget hierarchy.

     SYNTAX:

           aTopLevelBase -> Realize

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\toplevelbase__define.pro)

## TOPLEVELBASE::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TOPLEVELBASE::SETPROPERTY

     PURPOSE:

           This method is used to set the TopLevelBase object's properties

     SYNTAX:

           aTopLevelBase -> SetProperty, Map=1

     ARGUMENTS:

           None.

     KEYWORDS:

           ICONIFY_EVENTS:      Set this keyword to turn iconify events on.

           KBRD_FOCUS_EVENTS:   Set to 1 to turn keyboard focus events on for the base widget.

           KILL_REQUEST_EVENTS: Set this keyword to turn top-level base kill request events on.

           MAP:                 Set to 1 to map a base widget hierarchy. Set to 0 to unmap.

           MOVE_EVENTS:         Set this keyword to turn move event requests on.

           SIZE_EVENTS:         Set this keyword to turn re-size events on.

           TITLE:               The title of the top-level base.

           _EXTRA:              Any keyword appropriate for the supercalss Draw methods.

(See C:\IDL\Catalyst\source\widgets\toplevelbase__define.pro)

## TREEWIDGET::ADD

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TREEWIDGET::ADD

     PURPOSE:

           This method overrides the superclass Add methods to make sure tree widgets are only
           added to other tree widgets.

     SYNTAX:

           thisTreeObj -> Add, thatTreeObj

     ARGUMENTS:

           object: The object to add to the container. Only objects subclassed from TREEWIDGET can be added.

     KEYWORDS:

           _EXTRA: Any keyword appropriate for the superclass ADD methods.

(See C:\IDL\Catalyst\source\widgets\treewidget__define.pro)

## TREEWIDGET::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TREEWIDGET::CLEANUP

     PURPOSE:

           This is the TREEWIDGET object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\treewidget__define.pro)

## TREEWIDGET::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TREEWIDGET::GETPROPERTY

     PURPOSE:

           This method enables the getting of the TREEWIDGET object class
           properties.

     SYNTAX:

           aTreeWidget -> GetProperty, CURRENT=tree_current

     ARGUMENTS:

         None.

     KEYWORDS:

         CONTEXT_EVENTS: Returns a 1 if context events are on, a 0 otherwise.

         EXPANDED:   If 1, the current node is expanded, if 0 then it is collapsed.

         ROOT:       Returns the object reference of the root node of the tree widget.

         SELECT:     This keyword acts differently depending upon whether the specified tree widget
                     idenifier is a root node or just a normal node in a tree.

                     If this node is a root node, then this keyword returns an object reference, or
                     an array of object references (if in MULTIPLE selection mode), that are currently
                     selected. If no nodes are selected, a null object is returned.

                     If this node is a normal node, this keyword returns a 1 if the node is selected
                     and a zero otherwise.

         VALUE:      The text string used to label the tree widget.

         _REF_EXTRA:  Any keywords appropriate for the WIDGETATOM::GetProperty method.

(See C:\IDL\Catalyst\source\widgets\treewidget__define.pro)

## TREEWIDGET::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TREEWIDGET::INIT

     PURPOSE:

           This is the TREEWIDGET object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         parent          The parent object reference for this object widget.

     KEYWORDS:

         ALIGN_BOTTOM:    Set this keyword to align the base widget with the bottom of the parent base.

         ALIGN_CENTER:    Set this keyword to align the base widget with the center of the parent base.

         ALIGN_LEFT:      Set this keyword to align the base widget with the left of the parent base.

         ALIGN_RIGHT:     Set this keyword to align the base widget with the right of the parent base.

         ALIGN_TOP:       Set this keyword to align the base widget with the top of the parent base.

         BITMAP:          Set this keyword equal to a 16x16x3 array representing an RGB image that will
                          be displayed next to the node in the tree widget.

         CONTEXT_EVENTS:  Set this keyword to turn context events on for this widget object..

         EXPANDED:        If the tree node being created is a FOLDER, set this keyword to cause the folder
                          to be initially displayed expanded. Be default, folders are initially displayed
                          collapsed.

         FOLDER:          Set this keyword to cause the tree node being created to act as a folder (that is,
                          as a branch of the tree, rather than as a leaf. Only tree widgets that are set
                          as folders can act as parents to other tree widgets (with the exception of the
                          root node, whose parent is a base widget).

         MULTIPLE:        Set this keyword to enable multiple selection operations in the tree widget. If
                          enabled, multiple elements in the tree widget can be selected at one time by holding
                          down the Control or Shift key while clicking the left mouse button. The keyword is
                          valid only if the parent of the tree widget is a base widget.

         SCR_XSIZE:       Set the screen X size of the base to this many pixels. (Use discouraged.)

         SCR_YSIZE:       Set the screen Y size of the base to this many pixels. (Use discouraged.)

         TOP:             Set this keyword to cause the tree node being created to be inserted as the parent
                          node's top entry. By default, new nodes are created as the parent node's bottom entry.

         UNITS:           The units for measurments. The default is 0 for pixels. Other values are
                          1 for inches, and 2 for centimeters.

         VALUE:           Set this keyword equal to a string containing the text that will be
                          displayed next to the tree node. If this keyword is not set, the
                          default value "Tree" is used.

         XOFFSET:         The horizontal space (pixels) from upper left corner of the display.

         XSIZE:           The X size of the widget.

         YOFFSET:         The vertical space (pixels) from upper left corner of the display.

         YSIZE:           The Y size of the widget.

         _EXTRA:          Any keywords appropriate for the WIDGETATOM::INIT method.

(See C:\IDL\Catalyst\source\widgets\treewidget__define.pro)

## TREEWIDGET::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TREEWIDGET::SETPROPERTY

     PURPOSE:

           This method enables the setting of the TREEWIDGET object class
           properties.

     SYNTAX:

           aTreeWidget -> SetProperty, CURRENT=4

     ARGUMENTS:

         None.

     KEYWORDS:

         BITMAP:     Set this keyword equal to a 16x16x3 array representing an RGB image that will
                     be displayed next to the node in the tree widget.

         CONTEXT_EVENTS:    Set to 1 to turn context events on for the base widget.

         EXPANDED:   Set this keyword to expand the current folder node.

         SELECT:     This keyword acts differently depending upon whether the specified tree widget
                     idenifier is a root node or just a normal node in a tree.

                     If a root node, then set this keyword to an object reference, or an array of
                     object references (if in MULTIPLE selection mode), that should be selected.
                     To clear *all* selections, set this keyword to 0. If the tree widget is in
                     MULTIPLE selection mode, the selection changes made to the tree widget with
                     this keyword are additive, not exclusive.

                     If a normal node, set this keyword to select this node. Set the keyword
                     to zero to deselect this node.

         VALUE:      Set this keyword equal to a string containing the text that will be
                     displayed next to the tree node.

         VISIBLE:    Set his keyword to make the current node visible to the user. This does not affect
                     the current selection status of the node.

         _EXTRA:     Any keywords appropriate for the WIDGETATOM::SetProperty method.

(See C:\IDL\Catalyst\source\widgets\treewidget__define.pro)

## TREEWIDGET__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TREEWIDGET__DEFINE

     PURPOSE:

           The purpose of this routine is to implement a tree widget as an object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           aTreeWidget = Obj_New("TREEWIDGET", parent)

     SUPERCLASSES:

           WIDGETATOM
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { TREEWIDGET, $          ; Tree widget object class
                 INHERITS WIDGETATOM $  ; Inherits WidgetAtom object class.
               }

     MODIFICATION_HISTORY:

           Written by: David Fanning, 20 April 2003.

(See C:\IDL\Catalyst\source\widgets\treewidget__define.pro)

## VIEWCONTENTS::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            VIEWCONTENTS::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the VIEWCONTENTS object. It will typically
            be used to respond to events from widget objects created in the CONTROLPANEL
            method.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\viewcontents__define.pro)

## VIEWCONTENTS::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           VIEWCONTENTS::INIT

     PURPOSE:

           This is the VIEWCONTENTS object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         parent:     The parent object referece. This object will be added to the parent's container.

     KEYWORDS:

         _EXTRA:     Any keywords appropriate for the superclass INIT method.

(See C:\IDL\Catalyst\source\widgets\viewcontents__define.pro)

## VIEWCONTENTS__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           VIEWCONTENTS__DEFINE

     PURPOSE:

           The purpose of this object is to have a top-level base object
           with an event handler that can handle tree-widget events silently.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           theObject = Obj_New("VIEWCONTENTS")

     SUPERCLASSES:

           TOPLEVEBASE
           WIDGETATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { VIEWCONTENTS, $
                 INHERITS TOPLEVELBASE $
               }

     MESSAGES:

       None.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 31 August 2005.

(See C:\IDL\Catalyst\source\widgets\viewcontents__define.pro)

## WIDGETATOM

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM

     PURPOSE:

           The purpose of this routine is to create a widget object class that can
           be subclassed for all widget objects. Any keyword that is available for
           all widgets is implemented in this object class.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Object widgets.

     SYNTAX:

           widgetatom = Obj_New("WidgetAtom", parent, widgetID)

     SUPERCLASSES:

           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

        class = { WIDGETATOM,                  $ ; The WidgetAtom object class name.
                  INHERITS CATATOM,            $ ; Subclassed from CATATOM object.
                  _group_leader  : OBJ_NEW (), $ ; The group leader object for this object.
                  _id            : 0L,         $ ; The widget idenfier of the widget wrapped up in the widget object.
                  _invisible     : 0B,         $ ; This is a flag that indicates if the widget is invisible or not.
                  _killNotify    : 0L,         $ ; Set this to an object whose kill notifiy method should be called before self is destroyed.
                  _notifyRealize : 0B,         $ ; Set this flag to send a notify realize callback to the Notify_Realize method.
                  _sensitive     : 0B,         $ ; Set this flag to indicate whether the widget is sensitive (1) or not (0).
                  _helpline      : ""          $ ; A string used, for example, in a status bar when tracking cursor movements.
                }

     MODIFICATION_HISTORY:

           Written by: David Burridge, 12 June 2002.
           Added HELPLINE keyword and field. 6 Feb 2004. DWF.
           Modified the KILL_NOTIFY keyword to accept the name of a KILL_NOTIFY procedure. 29 Aug 2005. DWF.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::CLEANUP

     PURPOSE:

           This is the WIDGETATOM object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the  superclass CLEANUP methods.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::DRAW

     PURPOSE:

           A dummy DRAW method. All keywords are passed to the ATOM::DRAW superclass.
           If you overwrite this DRAW method for subclassed widget objects, be sure
           to also call the ATOM::DRAW method (or this method), so that the DRAW methods
           of any child objects also get called.

     SYNTAX:

           self -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA: Any keyword appropriate for the ATOM::DRAW method.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::EVENTHANDLER

     PURPOSE:

           This is an event handler for all widgets. It's real purpose is to
           serve as a pseudo notify realize mechanism for objects.

     SYNTAX:

           theObject -> EventHandler, event

     ARGUMENTS:

           event:    The event structure from a widget event.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::GETID

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::GETID

     PURPOSE:

           This returns the widget object's widget identifier.

     SYNTAX:

           theValue = object -> GetD()

     RETURN VALUE:

           theValue: The widget identifier for this widget, if the widget has been realized.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::GETPROPERTY

     PURPOSE:

           This method is used to obtain the object's properties. Keywords here apply to all
           widgets. Defining the keywords here eliminates work in defining subclassed widget
           classes.

     SYNTAX:

           self -> GetProperty, UVALUE=theValue

     ARGUMENTS:

           None.

     KEYWORDS:

           CHILD:          The object reference of the first child of this widget object. If there
                           is no child, a null object is returned.

           GEOMETRY:       The current geometry structure of the widget.

           GROUP_LEADER:   The identifier of the group leader widget.

           HELPLINE:        A string used as a help line for widget tracking purposes.

           ID:             The widget identifier of this particular widget object.

           INVISIBLE:      This keyword returns a flag that indicates if the widget is invisible (1) or not (0).

           KBRD_FOCUS_EVENTS: The current keyboard focus event status of the widget.

           KILL_NOTIFY:    Flag indicating that user-defined KILL_NOTIFY method is called for this widget.

           MANAGED:        The current managed status of the widget.

           NOTIFY_REALIZE: Flag indicating that user-defined NOTIFY_REALIZE method is called for this widget.

           REALIZED:       The current realization of the widget.

           SCR_XSIZE:      The X screen size of the widget.

           SCR_YSIZE:      The Y screen size of the widget.

           SIBLING:        The object reference of the first sibling of this widget object. If there
                           is no sibling, a null object is returned.

           SENSITIVE:      Indicates whether the current widget is sensitive (1) or not (0).

           STRING_SIZE:    Set this keyword to retrieve the dimensions of a string. The return value is a
                           two-element vector containing the string's width and height in pixels. A widget
                           identifier must always be specified in the call. The keyword's value can be
                           either the measured string or a two-element vector containing first the string
                           and then a font. If a font is specified, that font is used in the calculations.
                           Otherwise, the widget's font is used. In the case of a table widget with multiple
                           fonts, the default font is used.

           SYSTEM_COLORS:  Returns a WIDGET_SYSTEM_COLORS structure containing the colors IDL uses for
                           its widget system. The colors can be used to make your application looks like
                           IDL widgets.

           TAB_MODE:       The current tab mode for the widget.

           TRACKING_EVENTS: The current state of tracking events for this widget.

           TYPE:           The type code for this widget. See the IDL WIDGET_INFO documentation for details.

           UNITS:          The units that widget size is measured in.

           UPDATE:         Inidcates whether the widget is current enabled (1) or disabled (0) for updates.

           VALID_ID:       Indicates where the ID of the widget is valid or not.

           VERSION:        The version of widgets used. See the IDL WIDGET_INFO documentation for details.

           WIDGETNAME:     The name of the type of widget (e.g, "BASE", "DRAW", etc.). Don't confuse this
                           with the name of the object (obtained with the NAME keyword to the ATOM object.)

           XOFFSET:        The X offset relative to it parent base in UNITS.

           XSIZE:          The X size of the widget.

           YOFFSET:        The Y offset relative to it parent base in UNITS.

           YSIZE:          The Y size of the widget.

           _REF_EXTRA:     Any keyword appropriate for the superclass GETPROPERTY methods.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::GET_UVALUE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::GET_UVALUE

     PURPOSE:

           This returns the widget object's user value.

     SYNTAX:

           theValue = object -> Get_UValue()

     RETURN VALUE:

           theValue: The IDL variable that is to be transfered from the UVALUE location.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::INIT

     PURPOSE:

           This is the WIDGETATOM object class creator method.

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

           parent:         The object reference of the parent object for the widget

           widgetID:       The widget idenfier of the widget in the widget object being created.

     KEYWORDS:

           HELPLINE:       A string used as a help line for widget tracking purposes.

           INVISIBLE:      Set this keyword if you wish the widget you are creating to
                           remain "invisible" to the user. Invisible widgets are never
                           realized, allowing you to use their properties without exposing
                           them in the widget hierarchy. For example, an invisible widget
                           could be used to implement a TIMER function.

           KILL_NOTIFY:    Set this keyword to 1 to call the KILL_NOTIFY method of this object
                           when the widget is destroyed. Or, set this keyword to the name of
                           a callback procedure to call when the object is destroyed. If you
                           choose to use a kill notify name, your callback procedure is responsible
                           for destroying the object. If this is not done, memory leaking is sure
                           to occur! Here is a sample KILL_NOTIFY procedure:

                           PRO TLB_REPORT, tlbID

                             ; Get the TLB object.
                             Widget_Control, tlbID, Get_UValue=tlb

                             .... whatever it is you want to do....

                             ; Destroy the TLB object.
                             Obj_Destroy, tlb

                           END

                           This routine is set up as the callback routine by specifying its name
                           in the TLB object creation routine:

                           tlb = Obj_New('TopLevelBase', Kill_Notify='TLB_Report')

           GROUP_LEADER:   The group leader widget ID. Must be used for floating and
                           modal base widgets.

           NOTIFY_REALIZE: Set this keyword to register and NOTIFY_REALIZE callback to
                           the widget, which will be directed to the NOTIFY_REALIZE method
                           of this object.

           SENSITIVE:      Set this keyword to set the widget's sensitivity. (Sensitive = 1 is the default.)

           TAB_MODE:       Determines how the widget hierarchy can be navigated using the Tab key.
                           Default value is 0, indicating no navigation onto or off the widget with Tabs.
                           Note that this is *always* the case under UNIX. On Windows, a value of 1 enables
                           navigation onto and off of the widget. A value of 2 enables navigation onto the
                           widget only. And a value of 3 enables navigation off of the widget only.

           TIMER:          Starts a timer event with the delay set to this value.

           TRACKING_EVENTS: Set this keyword to turn on tracking events.

           _EXTRA:         Any keyword appropriate for the superclass INIT methods.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::KILL_NOTIFY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::KILL_NOTIFY

     PURPOSE:

           A dummy KILL_NOTIFY method. If a kill notification reaches this point, an
           warning is issued.

     SYNTAX:

           self -> Kill_Notify

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::NOTIFY_REALIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::NOTIFY_REALIZE

     PURPOSE:

           A dummy NOTIFY_REALIZE method to catch unhandled NOTIFY_REALIZE calls.

     SYNTAX:

           self -> Notify_Realize, object

     ARGUMENTS:

           OBJECT: The object that was realized (often the self object).

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::SEND_EVENT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::SEND_EVENT

     PURPOSE:

           Sends a pseudo-event to a widget. If thisEvent.TOP (see below) is an object refernce,
           the event is sent to the Event_Handler method of the toThisWidget. If thisEveven.TOP
           is a valid widget identifier, then Widget_Control is used to send an event to the
           widget identifed in toThisWidget via SEND_EVENT and thisEvent must be a normal widget
           event structure, not a widget object event structure.

     SYNTAX:

           self -> Send_Event, toThisWidget, thisEvent

     ARGUMENTS:

           toThisWidget:   The widget object reference of the widget to receive the event

           thisEvent:      The event structure to send. If TOP field is an object reference, the
                           event structure is send directly to the EVENT_METHOD of toThisWidget object.
                           Otherwise, a normal widget event is sent to the widget identified in toThisWidget.

     KEYWORDS:

           None.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           WIDGETATOM::SETPROPERTY

     PURPOSE:

           This method is used to set the object's properties. Keywords here apply to all
           widgets. Defining the keywords here eliminates work in defining subclassed widget
           classes.

     SYNTAX:

           self -> SetProperty, UVALUE=theValue

     ARGUMENTS:

           None.

     KEYWORDS:

           CLEAR_EVENTS:   Set this keyword to clear all events queued for this widget.

           DESTROY:        Set this keyword to destroy this widget.

           GROUP_LEADER:   The widget group leader for this particular widget.

           HELPLINE:       A string used as a help line for widget tracking purposes.

           ICONIFY:        Set this keyword to iconify/de-iconfy the widget.

           ID:             The widget identifier.

           INVISIBLE:      Set this keyword to create an "invisible" widget.

           KILL_NOTIFY:    Set this keyword to 1 to call the KILL_NOTIFY method of this object
                           when the widget is destroyed. Or, set this keyword to the name of
                           a callback procedure to call when the object is destroyed. If you
                           choose to use a kill notify name, your callback procedure is responsible
                           for destroying the object. If this is not done, memory leaking is sure
                           to occur! Here is a sample KILL_NOTIFY procedure:

                           PRO TLB_REPORT, tlbID

                             ; Get the TLB object.
                             Widget_Control, tlbID, Get_UValue=tlb

                             .... whatever it is you want to do....

                             ; Destroy the TLB object.
                             Obj_Destroy, tlb

                           END

                           This routine is set up as the callback routine by specifying its name
                           in the TLB object creation routine:

                           tlb = Obj_New('TopLevelBase', Kill_Notify='TLB_Report')

           NO_COPY:        If a UVALUE is being set, setting this keyword will make the
                           transfer of the variable to the UVALUE without copying.

           MAP:            Set this keyword to map (1) or unmap (0) the widget.

           NOTIFY_REALIZE: Set this keyword to register and NOTIFY_REALIZE callback to
                           the widget, which will be directed to the NOTIFY_REALIZE method
                           of this object.

           SCR_XSIZE:      The X screen size of the widget in pixel units.

           SCR_YSIZE:      The Y screen size of the widget in pixel units.

           SEND_EVENT:     Set this keyword to an event structure in order to send the event
                           structure to the widget. The event is handled in the normal way.

           SENSITIVE:      Set to set the widget's sensitivity. (Sensitive = 1 is the default.)

           SHOW:           Set this keyword to bring the window containing the widget to the
                           front of other windows on the display.

           TAB_MODE:       Determines how the widget hierarchy can be navigated using the Tab key.
                           Default value is 0, indicating no navigation onto or off the widget with Tabs.
                           Note that this is *always* the case under UNIX. On Windows, a value of 1 enables
                           navigation onto and off of the widget. A value of 2 enables navigation onto the
                           widget only. And a value of 3 enables navigation off of the widget only.

           TIMER:          Starts a timer event with the delay set to this value.

           TRACKING_EVENTS: Set this keyword to turn tracking events on for the widget object.

           UPDATE:         Set this keyword to enable (1) or disable (0) immediate screen updates
                           for this widget. (Normally this would only apply to base widgets.)

           UNITS:          The units that widget size is measured in. Default is 0, pixels.
                           Other values are 1, inches, and 2, centimeters.

           XOFFSET:        The X offset relative to it parent base in UNITS. Does not apply to
                           column or row bases.

           XSIZE:          Set this keyword to the X "size" of the widget. (Units of size varies
                           with type of widget, etc. See the IDL documentation for details.)

           YOFFSET:        The Y offset relative to it parent base in UNITS. Does not apply to
                           column or row bases.

           YSIZE:          Set this keyword to the Y "size" of the widget. (Units of size varies
                           with type of widget, etc. See the IDL documentation for details.)

           _EXTRA:         Any keyword appropriate for the superclass SETPROPERTY methods.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)

## WIDGETATOM::SET_UVALUE

[Previous Routine] [List of Routines]

     NAME:
           WIDGETATOM::SET_UVALUE

     PURPOSE:

           This sets the widget object's user value.

     SYNTAX:

           object -> Set_UValue, theValue

     ARGUMENTS:

           theValue: The IDL variable that is to be transfered to the UVALUE location.

     KEYWORDS:

           NO_COPY:  Set this keyword to do the variable transfer without copying the variable.

(See C:\IDL\Catalyst\source\widgets\widgetatom__define.pro)