Here is the specification for the Gadget structure defined in <intuition/intuition.h>. You create an instance of this structure for each gadget you place in a window or requester: struct Gadget { struct Gadget *NextGadget; WORD LeftEdge, TopEdge; WORD Width, Height; UWORD Flags; UWORD Activation; UWORD GadgetType; APTR GadgetRender; APTR SelectRender; struct IntuiText *GadgetText; LONG MutualExclude; APTR SpecialInfo; UWORD GadgetID; APTR UserData; }; NextGadget Applications may create lists of gadgets that may be added to a window or requester with a single instruction. NextGadget is a pointer to the next gadget in the list. The last gadget in the list should have a NextGadget value of NULL. When gadgets are added or removed, Intuition will modify the appropriate NextGadget fields to maintain a correctly linked list of gadgets for that window or requester. However, removing one or more gadgets does not reset the last removed gadget's NextGadget field to NULL. LeftEdge, TopEdge, Width, Height These variables describe the location and dimensions of the select box of the gadget. Both location and dimensions can be either absolute values or else relative to the edges and size of the window or requester that contains the gadget. LeftEdge and TopEdge are relative to one of the corners of the display element, according to how GFLG_RELRIGHT and GFLG_RELBOTTOM are set in the Flags variable (see below). Width and Height are either absolute dimensions or a negative increment to the width abd height of a requester or a window, according to to how the GFLG_RELWIDTH and GFLG_RELHEIGHT flags are set (see below). Flags The Flags field is shared by the program and Intuition. See the section below on "Gadget Flags" for a complete description of all the flag bits. Activation This field is used for information about some gadget attributes. See the "Gadget Activation Flags" section below for a description of the various flags. GadgetType This field contains information about gadget type and in what sort of display element the gadget is to be displayed. One of the following flags must be set to specify the type: GTYP_BOOLGADGET Boolean gadget type. GTYP_STRGADGET String gadget type. For an integer gadget, also set the GACT_LONGINT flag. See the "Gadget Activation Flags" section below. GTYP_PROPGADGET Proportional gadget type. GTYP_CUSTOMGADGET Normally not set by the application. Used by custom BOOPSI gadget types, discussed in the "BOOPSI" chapter. The following gadget types may be set in addition to one of the above types. None of the following types are required: GTYP_GZZGADGET If the gadget is placed in a GimmeZeroZero window, setting this flag will place the gadget in the border layer, out of the inner window. If this flag is not set, the gadget will go into the inner window. Do not set this bit if this gadget is not placed in a GimmeZeroZero window. GTYP_REQGADGET Set this bit if this gadget is placed in a requester. GadgetRender A pointer to the Image or Border structure containing the graphics imagery of this gadget. If this field is set to NULL, no rendering will be done. If the graphics of this gadget are implemented with an Image structure, this field should contain a pointer to that structure and the GFLG_GADGIMAGE flag must be set. If a Border structure is used, this field should contain a pointer to the Border structure, and the GFLG_GADGIMAGE bit must be cleared. SelectRender If the application does not use an alternate image for highlighting, set this field to NULL. Otherwise, if the flag GFLG_GADGHIMAGE is set, this field must contain a pointer to an Image or Border structure. The GFLG_GADGIMAGE flag determines the type of the rendering. Provide a pointer to an IntuiText structure to include a text component to the gadget. Multiple IntuiText structures may be chained. Set this field to NULL if the gadget has no associated text. GadgetText Provide a pointer to an IntuiText structure to include a text component to the gadget. Multiple IntuiText structures may be chained. Set this field to NULL if the gadget has no associated text. The offsets in the IntuiText structure are relative to the top left of the gadget's select box. MutualExclude This field is currently ignored by Intuition, but is reserved. Do not store information here. Starting with V36, if the GadgetType is GTYP_CUSTOMGADGET this field is used to point to a Hook for the custom gadget. SpecialInfo SpecialInfo contains a pointer to an extension structure which contains the special information needed by the gadget. If this is a proportional gadget, this variable must contain a pointer to an instance of a PropInfo data structure. If this is a string or integer gadget, this variable must contain a pointer to an instance of a StringInfo data structure. If this is a boolean gadget with GACT_BOOLEXTEND activation, this variable must contain a pointer to an instance of a BoolInfo data structure. Otherwise, this variable is ignored. GadgetID This variable is for application use and may contain any value. It is often used to identify the specific gadget within an event processing loop. This variable is ignored by Intuition. UserData This variable is for application use and may contain any value. It is often used as a pointer to a data block specific to the application or gadget. This variable is ignored by Intuition. Gadget Flags Gadget Activation Flags