@DATABASE AmigaMail @NODE MAIN "IV-23: Appendix: Boopsi Class Reference" @TOC "IV-23/BoopsiIntro.txt/MAIN" This appendix documents all the standard classes, their methods, and their attributes. The parameters for each moethod can be found in the appropriate include file. Each attribute is followed by a code that lists the methods that apply to that attribute. The codes are as follows: I OM_NEW S OM_SET G OM_GET N OM_NOTIFY U OM_UPDATE @{"rootclass" link IV-23-1} / _____________/____________ / / \\ / / \\ @{"icclass" link IV-23-7} / @{"gadgetclass" link IV-23-9} / / \\ / / _______________\\___________________ / @{"imageclass" link IV-23-2} / / \\ \\ / / / / \\ \\ @{"modelclass" link IV-23-8} / @{"propgclass" link IV-23-10} @{"strgclass" link IV-23-11} @{"buttongclass" link IV-23-13} @{"groupgclass" link IV-23-12} / \\ / \\ _______/___________________________ @{"frbuttongclass" link IV-23-14} / \\ \\ \\ / \\ \\ \\ @{"frameiclass" link IV-23-3} @{"sysiclass" link IV-23-4} @{"fillrectclass" link IV-23-5} @{"itexticlass" link IV-23-6} @ENDNODE @NODE IV-23-1 "rootclass" Class: rootclass Superclass: None Description: Base class for all other classes Include File: New Methods: ------------ OM_NEW - Create a new object. This method is passed a pointer to the "true class" of the object in place of the yet to be created object. The Root class will allocate enough memory for all the instance data of the true class. OM_DISPOSE - Delete an object. This method will free the same amount of memory as allocated by OM_NEW. OM_ADDTAIL - Add an object to an Exec list, based on a MinNode in the private rootclass object header. You can provide any Exec list you want, and iterate the objects on the list using the Intuition function NextObject(). OM_REMOVE - Remove an object from an Exec list. The following methods are defined for all objects, but are no-ops in the rootclass. Implementation for specific subclasses is done to support these conventions. OM_ADDMEMBER - Add some object (passed to the method) to the objects list, which is defined by the class. Examples include the broadcast list of modelclass objects, and the component gadgets of a groupgclass object. This is typically implemented by sending the OM_ADDTAIL message to the member object. OM_REMMEMBER - Remove a member object previously added by OM_ADDMEMBER. You typically send the OM_REMOVE message to the member object. OM_SET - Set attributes from passed attribute list. The Root class defines no attributes. OM_GET - Retrieve an attribute. OM_UPDATE - "Be updated" of external changes. A no-op for rootclass. OM_NOTIFY - Notify other of changes provided in the message. A no-op for the root class. Changed Methods: ---------------- Not applicable. Attributes: ----------- None. @ENDNODE @NODE IV-23-2 "imageclass" Class: imageclass Superclass: rootclass Description: Base class for Intuition Images Include File: New Methods: ------------ IM_DRAW - Draw the image in the RastPort passed in the message, at the xoffset and in the state provided in the message. IM_HITTEST - Return TRUE if the point passed is within the image. This base Image class returns TRUE if the point is within the old Image structure box. IM_ERASE - Erase an image. This class will call the new graphics library function EraseRect() for its Image box. IM_ERASE does not test the box dimensions (>= 0). IM_MOVE - Erase and redraw an image. This is intended for subclasses capable of performing animation or smooth dragging (e.g., prop gadget knobs). A no-op for imageclass. IM_FRAMEBOX - A no-op for this base class, but implemented by image subclasses which are "stretchable". For example, frameiclass objects put an embossed frame around a text label or glyph. The message passed to this method contains a pointer to a box describing the dimensions of the contents to frame, and a pointer to a frame box for the result. There is also a FrameFlags field which currentlly has only one defined flag, FRAMEF_SPECIFY. The idea behind this frame business is to support multiple gadgets (as found in a system requester) which share a single frame image object, but render it in different dimensions appropriate for their enclosed label. The operation of this method should be defined by suitable subclasses as follows, and return non-zero to indicate that they support this method. If FRAMEF_SPECIFY is not set, you should set up the povided frame box with the position and dimensions of the frame you would render to enclose the contents box. This is an inquiry function used, for example, by a gadget which wants to know what sized frame dimensions to pass to IM_DRAWFRAME (defined below) and how to center the contents. The caller might then add a little aesthetic margin by increasing the dimensions (or might decide to make a column of framed objects all the same width as the largest one), and having done so, can call the method IM_FRAMEBOX again, this time with FRAMEF_SPECIFY set. Now, your method is expected to respect the dimensions specified in the frame box (even if you think they are too small!) and to set up only the position of the frame box appropriately for enclosing the provided contents box. Currently implemented frame image classes always center the contents, but future classes might want to support an attribute for optional left or right justification of the contents. IM_DRAWFRAME - Image subclasses which assign proper meaning to this class (i.e. frameiclass) should respect the dimensions that are passed in this message by superceding this method. If imageclass sees this message, it will convert it to an IM_DRAW message and send it back to the image's true class. This way, any subclass of imageclass which doesn't implement or recognize the IM_DRAWFRAME method will default to drawing objects at their "natural" dimensions. IM_HITFRAME - Perform a hit test for the image respecting the frame dimensions passed in the message. Useful for something like a stretchable rounded box. This class just performs the same as IM_HITTEST, ignoring the dimensions passed. IM_ERASEFRAME - Erase an image respecting the frame dimensions passed in the message. This class calls EraseRect() for the frame dimensions, again not checking dimension validity. Changed Methods: ---------------- OM_NEW - Instance data contains an Image structure, and its Depth field is initialized to CUSTOMIMAGEDEPTH, which identifies such images to Intuition. The Width and Height fields are set to arbitrary positive numbers for safety, but you should always set them to something meaningful. OM_SET - Applies all supported attributes, returns '1'. Attributes: ----------- IA_Left (ISG) IA_Top (ISG) IA_Width (ISG) IA_Height (ISG) These attributes are stored (by imageclass) as values in the familiar Image structure. IA_FGPen (ISG) IA_BGPen (ISG) These attributes are maintained in the PlanePick and PlaneOnOff fields, which concept they generalize. IA_Data (ISG) A pointer to general image data. This value is stored in the ImageData field of the old Image structure. IA_LineWidth () A no-op for imageclass. IA_Pens () Defined but not supported by imageclass. Pointer to UWORD pens[], terminated by ~0. This can be used to the exclusion of DrawInfo attributes or parameters, or as an override. @ENDNODE @NODE IV-23-3 "frameiclass" Class: frameiclass Superclass: imageclass Description: A raised, sunken, or chisled image class supporting frame dimensions and Intuition new look parameters. Include File: New Methods: ------------ None, but implements some of the no-ops in imageclass. Changed Methods: ---------------- OM_GET - A no-op for this class. IM_DRAW - Draws the embossed frame in its natural (Image) dimensions. Frame thickness support of IA_LineWidth is currently not implemented. Frame type is determined by attributes below, colors determined by DrawInfo and supports these drawing states: IDS_NORMAL, IDS_INACTIVENORMAL, IDS_DISABLED: Renders edges in shadowPen, shinePen, and backgroundPen for the interior. NOTE: No ghosting is done for IDS_DISABLED. IDS_SELECTED, IDS_INACTIVESELECTED: Renders edges in shadowPen, shinePen, and hifillPen, for the interior. IM_DRAWFRAME - Same as IM_DRAW, but draws frame to specified exterior dimensions. IM_FRAMEBOX - Centers contents, adds dimension for frame thickness, plus an interior margin of the same thickness. Attributes: ----------- IA_Recessed (IS) Specifies that the frame should be recessed into the drawing surface (shadowPen used on upper and left edges). Default is FALSE, a raised frame. IA_DoubleEmboss (IS) Two nested embossed frames for "chisled" boxes or "ridges". Not currently supported. IA_EdgesOnly (IS) Does not fill frame, just draws the edges. IA_LineWidth () Not currently supported. @ENDNODE @NODE IV-23-4 "sysiclass" Class: sysiclass Superclass: imageclass Description: Class for system and standard application images. Include File: New Methods: ------------ None. Changed Methods: ---------------- OM_NEW - Executes a drawing commands list to create a fast-rendering image object. The glyph of the object is defined by the attribute SYSIA_Which. The SYSIA_DrawInfo parameter is required at initialization, as is IA_Height. Image size defaults are established by SYSIA_Size, but some images (title bar gadget images) require IA_Height. Images are scaled to their dimensions. Attributes: ----------- SYSIA_DrawInfo (IS) This attribute must be passed to OM_NEW and OM_SET to allow the image to be generated into a bitmap cache. SYSIA_Which (I) Identifies which of the system image glyphs the caller wants. It can be one of the following: DEPTHIMAGE Window depth arrangement image. ZOOMIMAGE Window Zoom image. SIZEIMAGE Window Sizing image. CLOSEIMAGE Window close image. SDEPTHIMAGE Screen depth arrangement image. LEFTIMAGE Left arrow image. UPIMAGE Up arrow image. RIGHTIMAGE Right arrow image. DOWNIMAGE Down arrow image. CHECKIMAGE Checkmark image. MXIMAGE Radio button image. SYSIA_Size (I) Identifies which default dimensions to use for the object. This generalizes Intuition's older concept of two different system image dimensions. The system currently uses SYSISIZE_MEDRES as the default, SYSISIZE_HIRES for screens with title bars greater than 22 pixels, and SYSISIZE_LORES for screens with fat pixels. @ENDNODE @NODE IV-23-5 "fillrectclass" Class: fillrectclass Superclass: imageclass Description: Rectangle with frame and pattern support Include File: New Methods: ------------ None. Changed Methods: ---------------- IM_DRAW - Draws the pattern in its natural (Image) dimensions. IM_DRAWFRAME - Same as IM_DRAW, but draws pattern to specified exterior dimensions. Attributes: ----------- IA_APattern (IS) Points to the pattern to fill in the Image structure's ImageData field. IA_APatSize (IS) The pattern's dimension. IA_Mode (IS) Drawing mode for the pattern. @ENDNODE @NODE IV-23-6 "itexticlass" Class: itexticlass Superclass: imageclass Description: IntuiText equivalent with attribute override. Include File: New Methods: ------------ None. Changed Methods: ---------------- IM_DRAW - Draws IntuiText specified as IA_Data overriding the attributes specified in the IntuiText structure. The Mode used is JAM1, the color as specified as IA_FGPen. The position of the itexticlass object is added to the position of the IntuiText. This class was defined to make new-looking AutoRequesters without changing the IntuiText structures passed to it. Attributes: ----------- IA_Data (ISG) Processed blindly by superclass, must be a pointer to a normal IntuiText structure. IA_FGPen (ISG) Processed by superclass, used as APen when drawing text. IA_Left, IA_Top (ISG) Added to IntuiText offsets. @ENDNODE @NODE IV-23-7 "icclass" Class: icclass Superclass: rootclass Description: Base class of simple forwarding interconnection. Include File: New Methods: ------------ ICM_SETLOOP ICM_CLEARLOOP ICM_CHECKLOOP - All of these methods are used internally by subclasses to manage a loop inhibition for broadcasted messages. They increment, decrement, and return the value of that counter. Changed Methods: ---------------- OM_SET - Sets attributes and returns 0. Note that this is not the same behavior as OM_NOTIFY. OM_NOTIFY - Issues an OM_UPDATE message to the object indicated by attribute ICA_Target, first converting the attribute tags according to the ICA_Map attribute. The internal loop count is incremented until the OM_UPDATE method it invokes on ICA_Target returns. Also, it will do nothing at all if that loop count was non-zero to begin with, preventing itself from participating in an infinite loop. OM_UPDATE - Receive update notices from others. This base IC class just passes the message along, treating it exactly like an OM_NOTIFY message. Subclasses will probably redefine this method to perform a calculation, the result of which they might forward to others by issuing themselves an OM_NOTIFY message. Unfortunately, this class converts the OM_SET and OM_NOTIFY messages to an OM_NOTIFY by changing their MethodID field, and does not restore it to what it originally was. Attributes: ----------- ICA_Target (IS) Target object for OM_UPDATE messages. If this attribute is given the value ICTARGET_IDCMP, then the notification will consist of sending an IDCMPUPDATE IntuiMessage to a window. The window is determined by the GadgetInfo structure passed around when the object is connected to gadgets. ICA_Map (IS) Attribute mapping list. ICSPECIAL_CODE (*) This is a magic dummy attribute: if it occurs as a target in the ICA_Map mapping list, and ICA_Target is ICTARGET_IDCMP, then the new value of the corresponding attribute will be copied into the IntuiMessage.Code field of the IDCMPUPDATE message (just the lower sixteen bits of the attribute value will fit). This sometimes makes it particularly simple to process IDCMPUPDATE messages with a single item of interest. @ENDNODE @NODE IV-23-8 "modelclass" Class: modelclass Superclass: icclass Description: Provides "broadcast" interconnection. Include File: New Methods: ------------ None. Changed Methods: ---------------- OM_ADDMEMBER - Adds an object to the the Model's internally maintained broadcast list. Anything on this list will be DISPOSED when the model object is disposed. OM_REMMEMBER - Removes objects added by OM_ADDMEMBER. OM_DISPOSE - Disposes members of the broadcast list as well as itself. OM_NOTIFY, OM_UPDATE - these behave like the icclass methods, but first an OM_UPDATE message is sent to all members of the object's broadcast list, un-mapped. The members of the broadcast list are typically icclass objects, which have gadgets as their targets and appropriate mapping lists. If you are creating a useful subclass, you will probably want to intercept OM_UPDATE, but pass OM_NOTIFY to modelclass, your superclass. Attributes: ----------- ICA_Map, ICA_Target - Same as for the superclass (icclass). @ENDNODE @NODE IV-23-9 "gadgetclass" Class: gadgetclass Superclass: rootclass Description: Base class for Intuition compatible gadget classes Include File: New Methods: ------------ Intuition uses the following methods to control a gadget. Only custom gadget class implentors will be interested in these. GM_HITTEST GM_RENDER GM_GOACTIVE GM_HANDLEINPUT GM_GOINACTIVE Changed Methods: ---------------- OM_NEW - Initializes transparent Gadget structure. LeftEdge and TopEdge are set to 0, Width and Height are arbitrary constants which you should override. Sets GadgetType to CUSTOMGADGET, and installs a pointer to the gadgetclass data structure in the MutualExclude field. These objects are also valid "custom gadgets." Links self into a NextGadget linked list if GA_Previous is passed to OM_NEW. OM_UPDATE and OM_SET are used simply to change the attributes. This gadgetclass does not implement any concrete gadgets. This is left to the subclasses. OM_NOTIFY - This class will issue an OM_UPDATE message to ICA_Target through ICA_Map. Subclasses of gadgetclass are advised to let the superclass handle this method. Attributes: ----------- GA_Left (IS) GA_Top (IS) GA_Width (IS) GA_Height (IS) These correspond to position and dimension fields in the Intuition Gadget structure. Setting these clears the "gadget relative" flags (below). GA_RelRight (IS) GA_RelBottom (IS) GA_RelWidth (IS) GA_RelHeight (IS) These are alternative position/dimension attributes. Setting these stores the corresponding data in the Left/Top/Width/Height Gadget fields, respectively, and sets the corresponding "relative" flag (GRELRIGHT, GRELBOTTOM, and so on). GA_IntuiText (IS) GA_Text (IS) GA_LabelImage (IS) This copies the ti_Data value blindly into the Gadget.GadgetText field, and sets the flags LABELSTRING and LABELIMAGE as appropriate in Gadget.Flags. GA_IntuiText requires that ti_Data be an IntuiText pointer, as with old-style gadgets. GA_Text takes a pointer to a NULL- terminated string (UBYTE *). GA_LabelImage takes a pointer to a (boopsi) image. Classes which support the attributes other than GA_IntuiText must document themselves appropriately, but this facility allows us to have low-overhead text gadgets and gadgets with iconic labels. GA_Image (IS) This may be a boopsi image or a regular image. Things are designed so that the image may be shared between gadgets. The image will not be disposed when the gadget object is disposed. GA_Border (IS) GA_SelectRender (IS) GA_ID (IS) GA_UserData (IS) GA_SpecialInfo (IS) All of this group of attributes correspond to fields in the Gadget structure. GA_Disabled (IS) GA_GZZGadget (IS) GA_Selected (IS) GA_EndGadget (IS) GA_Immediate (IS) GA_RelVerify (IS) GA_FollowMouse (IS) GA_RightBorder (IS) GA_LeftBorder (IS) GA_TopBorder (IS) GA_BottomBorder (IS) GA_ToggleSelect (IS) GA_SysGadget (IS) GA_TabCycle (IS) This group corresponds to Boolean attributes (flags) in the Gadget structure. This class will put the correct flag in the correct field. You can pass any non-zero value in the ti_Data tag field to cause the corresponding flag to be set. Pass zero to clear. GA_HighLight (IS) Sets the "GADGHIGHBITS" portion of Gadget.Flags to the attribute value in ti_Data. GA_SysGType (IS) Sets the system gadget type portion of Gadget.GadgetType to the (masked) value in ti_Data. GA_Previous (I) Previous gadget (or (struct Gadget **)) in linked list. This attribute cannot be used to link new gadgets into the gadget list of an open window or requester. You must use AddGList(). ICA_Target (IS) ICA_Map (IS) These are given the same meaning as in icclass, from which they are borrowed. @ENDNODE @NODE IV-23-10 "propgclass" Class: propgclass Superclass: gadgetclass Description: Extended function proportional gadgets. Include File: New Methods: ------------ None. Changed Methods: ---------------- All methods defined by gadgetclass are handled to provide compatible proportional gadget processing. OM_SET, OM_UPDATE - Changes attributes and, if needed and if propgclass is the true class, will update the slider visuals by updating the knob position and dimensions. GM_HANDLEINPUT - If the knob position changes sufficiently to change PGA_Top, this method will issue an OM_NOTIFY message, with attributes PGA_Top and GA_ID. The OPUF_INTERIM flag will be set for intermediate messages issued while the mouse is dragging the slider knob. This method Will issue a message with OPUF_INTERIM clear when it is done, which is the "final value". Attributes: ----------- GA_Image (I) GA_Border (I) If you don't pass GA_Image to NewObject(), the gadget will create and use an AUTOKNOB. Likewise if you pass (the "illegal" attribute) GA_Border: an AUTOKNOB will be used instead. GA_HighLight (I) GADGHBOX highlighting is not allowed, and will be converted to GADGHBOX. GA_SpecialInfo () This attributed is "forced" to point to the PropInfo allocated for objects of this class. Other gadgetclass attributes are passed along to the superclass. PGA_Freedom (IG) May be either of FREEHORIZ or FREEVERT (not both). The default is FREEVERT. PGA_Borderless (I) Means the same as PropInfo.Flags BORDERLESS. PGA_HorizPot, PGA_VertPot, PGA_HorizBody, PGA_VertBody These are defined in the include file but obsolete and will not be supported. Class propgclass supports gadgets that are vertical or horizontally free, but not both. PGA_Top (ISGNU) PGA_Visible (ISU) PGA_Total (ISU) These attributes are very useful replacements to Pot and Body variables. They are based on the use of proportional gadgets to control scrolling text. When scrolling 100 lines of text in a 25 line visible window, you would set PGA_Total to 100, PGA_Visible to 25, and watch PGA_Top run from 0 to 75 (the top line of the last page). All internal prop gadget values will be calculated based on these (depending on whether the gadget is FREEHORIZ or FREEVERT). "Container clicks" for page jumps will leave an overlap of one line, unless the value PGA_Visible is 1, in which case the prop gadget acts as an integer numeric slider taking values from 0 to PGA_Total - 1. Note that PGA_Top has OM_NOTIFY access. All three of these attributes have OM_UPDATE access, so they can be controlled via interconnections. PGA_NewLook (I) Equivalent to PropInfo.Flags PROPNEWLOOK flag. @ENDNODE @NODE IV-23-11 "strgclass" Class: strgclass Superclass: gadgetclass Description: Intuition compatible string gadgets. Include File: New Methods: ------------ None. Changed Methods: ---------------- All methods defined by gadgetclass are handled to provide compatible string gadget processing. OM_NEW - Sets up StringInfo and StringExtend structures. Will allocate a Buffer if needed and will use shared data buffers for UndoBuffer and WorkBuffer if the MaxChars is less than SG_DEFAULTMAXCHARS (128). Default text pens are FG = 1, BG = 0; Attributes: ----------- GA_ID (ISG) Will be included in OM_NOTIFY messages generated. STRINGA_MaxChars (I) STRINGA_Buffer (I) STRINGA_UndoBuffer (I) STRINGA_WorkBuffer (I) Specify various buffers defined for string gadgets and extended string gadgets. If your value of STRINGA_MaxChars is less than SG_DEFAULTMAXCHARS (120 for now), then this class can provide all these buffers for you. Note that UndoBuffer and WorkBuffer can be shared by many separate gadgets, providing they are as large as the largest MaxChars they will encounter. STRINGA_BufferPos (ISU) STRINGA_DispPos (ISU) Familiar cursor and scroll position. STRINGA_AltKeyMap (IS) Same as StringInfo.AltKeyMap. STRINGA_Font (IS) Font for string gadget text. Must be an open TextFont. STRINGA_Pens (IS) Pen numbers, packed as two shorts into a longword, for rendering gadget text. STRINGA_ActivePens (IS) Optional pen numbers, packed as two shorts into a longword, for rendering gadget text, when the gadget is active. STRINGA_EditHook (I) Custom string gadget edit hook. STRINGA_EditModes (IS) Value taken from flags defined in for initial editing modes. STRINGA_ReplaceMode (IS) STRINGA_FixedFieldMode (IS) STRINGA_NoFilterMode (IS) These three are independent Boolean equivalents to the individual flags that you can set for STRINGA_EditModes. STRINGA_Justification (IS) Takes the values STRINGCENTER, STRINGRIGHT, and STRINGLEFT (which is 0). STRINGA_LongVal (ISGNU) When you specify this to a string gadget object, it means first that the gadget is now for integer entry only, and the value of the gadget takes the numeric value passed in ti_Data. Note that this attribute has OM_NOTIFY and OM_UPDATE access. STRINGA_TextVal (ISGNU) When you specify this to a string gadget object, it means that the gadget is for text entry only, and the value of the gadget is copied from the string value passed as a UBYTE pointer in ti_Data. Note that this attribute has OM_NOTIFY and OM_UPDATE access. STRINGA_ExitHelp (IS) Set this if you want the gadget to exit when the ``Help'' key is pressed. Look for a code of 0x5f, the rawkey code for help. Notification messages will be issued whenever the gadget chooses to go inactive (not when it is aborted). The OPUF_INTERIM flag is always clear. @ENDNODE @NODE IV-23-12 "groupgclass" Class: groupgclass Superclass: gadgetclass Description: Composite gadget objects Include File: New Methods: ------------ None Changed Methods: ---------------- OM_SET - Passes most attributes to the superclass, but propagates changes in position to its members appropriately. Also, GA_Width and GA_Height are calculated from the position and dimension of the membership. OM_ADDMEMBER - add a gadget to the group list. Add the gadgets you want in the group right after you create it and leave them there until you are done. Note that all members of the groupgclass object will be deleted by OM_DISPOSE. OM_DISPOSE - this class will dispose of the object and all its member gadgets. Attributes: ----------- LAYOUTA_Orientation LAYOUTA_Spacing LAYOUTA_LayoutObj These attributes specify simple layout parameters and a "layout object delegate" are not currently implemented. GA_Width and GA_Height are calculated from the membership. GA_Left (IS) GA_Position (IS) These are propagated magically to the membership. The gadget relative flags (GA_RelWidth, GA_RelHeight, and so on) are not supported. @ENDNODE @NODE IV-23-13 "buttongclass" Class: buttongclass Superclass: gadgetclass Description: A (repeatable) command button gadget. Include File: New Methods: ------------ None. Changed Methods: ---------------- GM_HITTEST - Delegates this question to its GA_Image attribute. GM_HANDLEINPUT - Will behave like a button, but continuously issues OM_NOTIFY messages for each IECLASS_TIMER event. Flag OPUF_INTERIM will be set for all but the last notification. The notified attribute is GA_ID, with a twist: the value sent will be the negative of GadgetID if the pointer is not currently over the gadget image. GM_RENDER - All rendering is passed along to the GadgetRender Image. The state provided is IDS_INACTIVESELECTED, IDS_INACTIVENORMAL, IDS_SELECTED, or IDS_NORMAL. Attributes: ----------- GA_Image (IS) Changing the image will cause the gadget to refresh itself. @ENDNODE @NODE IV-23-14 "frbuttonclass" Class: frbuttonclass Superclass: buttongclass Description: A button gadget that knows how to outline its "label" within a shared "frame image". New Methods: ------------ None. Changed Methods: ---------------- OM_NEW - Will set up its dimensions depending on GA_Image, including support for frame images. If GA_Image understands the IM_FRAMEBOX method, dimensions are calculated to surround the "label" stashed in GadgetText, which can be GA_IntuiText, GA_Text, or GA_LabelImage. OM_SET - If you change the dimensions, this method will adjust the contents by using IM_FRAMEBOX with FRAMEIF_SPECIFY. GM_HITTEST - uses IM_HITFRAME. GM_RENDER - uses IM_DRAWFRAME. First draws the frame, then draws the contents or label described under OM_NEW. Attributes: ----------- GA_Width (IS) GA_Height (IS) If you change these, the contents will be readjusted and the gadget re- rendered. @ENDNODE