[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

#ifndef INTUITION_GADGETCLASS_H
#define INTUITION_GADGETCLASS_H
/*
**      $VER: gadgetclass.h 44.1 (19.10.1999)
**      Includes Release 44.1
**
**      Custom and 'boopsi' gadget class interface
**
**      (C) Copyright 1987-1999 Amiga, Inc.
**          All Rights Reserved
*/

/*****************************************************************************/

#ifndef INTUITION_INTUITION_H
#include <intuition/intuition.h>
#endif

#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif

/*****************************************************************************/

/* NOTE:  <intuition/iobsolete.h> is included at the END of this file! */

/*****************************************************************************/

/* Gadget class attributes */
#define GA_Dummy                (TAG_USER+0x30000)

#define GA_Left                 (GA_Dummy+1)
    /* (LONG) Left edge of the gadget relative to the left edge of
     * the window */

#define GA_RelRight             (GA_Dummy+2)
    /* (LONG) Left edge of the gadget relative to the right edge of
     * the window */

#define GA_Top                  (GA_Dummy+3)
    /* (LONG) Top edge of the gadget relative to the top edge of
     * the window */

#define GA_RelBottom            (GA_Dummy+4)
    /* (LONG) Top edge of the gadget relative to the bottom edge
     * of the window */

#define GA_Width                (GA_Dummy+5)
    /* (LONG) Width of the gadget */

#define GA_RelWidth             (GA_Dummy+6)
    /* (LONG) Width of the gadget relative to the width of the
     * window */

#define GA_Height               (GA_Dummy+7)
    /* (LONG) Height of the gadget */

#define GA_RelHeight            (GA_Dummy+8)
    /* (LONG) Height of the gadget relative to the height of
     * the window */

#define GA_Text                 (GA_Dummy+9)
    /* (STRPTR) Gadget imagry is NULL terminated string */

#define GA_Image                (GA_Dummy+10)
    /* (struct Image *) Gadget imagry is an image */

#define GA_Border               (GA_Dummy+11)
    /* (struct Border *) Gadget imagry is a border */

#define GA_SelectRender         (GA_Dummy+12)
    /* (struct Image *) Selected gadget imagry */

#define GA_Highlight            (GA_Dummy+13)
    /* (UWORD) One of GFLG_GADGHNONE, GFLG_GADGHBOX, GFLG_GADGHCOMP,
     * or GFLG_GADGHIMAGE */

#define GA_Disabled             (GA_Dummy+14)
    /* (BOOL) Indicate whether gadget is disabled or not.
     * Defaults to FALSE. */

#define GA_GZZGadget            (GA_Dummy+15)
    /* (BOOL) Indicate whether the gadget is for
     * WFLG_GIMMEZEROZERO window borders or not.  Defaults
     * to FALSE. */

#define GA_ID                   (GA_Dummy+16)
    /* (UWORD) Gadget ID assigned by the application */

#define GA_UserData             (GA_Dummy+17)
    /* (APTR) Application specific data */

#define GA_SpecialInfo          (GA_Dummy+18)
    /* (APTR) Gadget specific data */

#define GA_Selected             (GA_Dummy+19)
    /* (BOOL) Indicate whether the gadget is selected or not.
     * Defaults to FALSE */

#define GA_EndGadget            (GA_Dummy+20)
    /* (BOOL) When set tells the system that when this gadget
     * is selected causes the requester that it is in to be
     * ended.  Defaults to FALSE. */

#define GA_Immediate            (GA_Dummy+21)
    /* (BOOL) When set indicates that the gadget is to
     * notify the application when it becomes active.  Defaults
     * to FALSE. */

#define GA_RelVerify            (GA_Dummy+22)
    /* (BOOL) When set indicates that the application wants to
     * verify that the pointer was still over the gadget when
     * the select button is released.  Defaults to FALSE. */

#define GA_FollowMouse          (GA_Dummy+23)
    /* (BOOL) When set indicates that the application wants to
     * be notified of mouse movements while the gadget is active.
     * It is recommmended that GA_Immediate and GA_RelVerify are
     * also used so that the active gadget can be tracked by the
     * application.  Defaults to FALSE. */

#define GA_RightBorder          (GA_Dummy+24)
    /* (BOOL) Indicate whether the gadget is in the right border
     * or not.  Defaults to FALSE. */

#define GA_LeftBorder           (GA_Dummy+25)
    /* (BOOL) Indicate whether the gadget is in the left border
     * or not.  Defaults to FALSE. */

#define GA_TopBorder            (GA_Dummy+26)
    /* (BOOL) Indicate whether the gadget is in the top border
     * or not.  Defaults to FALSE. */

#define GA_BottomBorder         (GA_Dummy+27)
    /* (BOOL) Indicate whether the gadget is in the bottom border
     * or not.  Defaults to FALSE. */

#define GA_ToggleSelect         (GA_Dummy+28)
    /* (BOOL) Indicate whether the gadget is toggle-selected
     * or not.  Defaults to FALSE. */

#define GA_SysGadget            (GA_Dummy+29)
    /* (BOOL) Reserved for system use to indicate that the
     * gadget belongs to the system.  Defaults to FALSE. */

#define GA_SysGType             (GA_Dummy+30)
    /* (UWORD) Reserved for system use to indicate the
     * gadget type. */

#define GA_Previous             (GA_Dummy+31)
    /* (struct Gadget *) Previous gadget in the linked list.
     * NOTE: This attribute CANNOT be used to link new gadgets
     * into the gadget list of an open window or requester.
     * You must use AddGList(). */

#define GA_Next                 (GA_Dummy+32)
    /* (struct Gadget *) Next gadget in the linked list. */

#define GA_DrawInfo             (GA_Dummy+33)
    /* (struct DrawInfo *) Some gadgets need a DrawInfo at creation time */

/* You should use at most ONE of GA_Text, GA_IntuiText, and GA_LabelImage */
#define GA_IntuiText            (GA_Dummy+34)
    /* (struct IntuiText *) Label is an IntuiText. */

#define GA_LabelImage           (GA_Dummy+35)
    /* (Object *) Label is an image object. */

#define GA_TabCycle             (GA_Dummy+36)
    /* (BOOL) Indicate whether gadget is part of TAB/SHIFT-TAB cycle
     * activation.  Defaults to FALSE.  New for V37. */

#define GA_GadgetHelp           (GA_Dummy+37)
    /* (BOOL) Indicate whether gadget is to send IDCMP_GADGETHELP.
     * Defaults to FALSE.  New for V39. */

#define GA_Bounds               (GA_Dummy+38)
    /* (struct IBox *) Copied into the extended gadget's bounds.
     * New for V39. */

#define GA_RelSpecial           (GA_Dummy+39)
    /* (BOOL) Indicate whether gadget has special relativity.  Defaults to
     * FALSE.  New for V39. */

#define GA_TextAttr             (GA_Dummy+40)
    /* (struct TextAttr *) Indicate the font to use for the gadget.
     * New for V42. */

#define GA_ReadOnly             (GA_Dummy+41)
    /* (BOOL) Indicate that the gadget is read-only (non-selectable).
     * Defaults to FALSE. New for V42. */

#define GA_Underscore           (GA_Dummy+42)
    /* (UBYTE) Underscore/escape character for keyboard shortcuts.
     * Defaults to '_' . New for V44. */

#define GA_ActivateKey          (GA_Dummy+43)
    /* (STRPTR) Set/Get the gadgets shortcut/activation key(s)
     * Defaults to NULL. New for V44. */

#define GA_BackFill             (GA_Dummy+44)
    /* (struct Hook *) Backfill pattern hook.
     * Defaults to NULL. New for V44. */

#define GA_GadgetHelpText               (GA_Dummy+45)
    /* (STRPTR) **RESERVERD/PRIVATE DO NOT USE**
     * Defaults to NULL. New for V44. */

#define GA_UserInput            (GA_Dummy+46)
        /* (BOOL) Notification tag indicates this notification is from the activite
         * gadget receiving user input - an attempt to make IDCMPUPDATE more efficient.
     * Defaults to FALSE. New for V44. */

/*****************************************************************************/

/* PROPGCLASS attributes */
#define PGA_Dummy       (TAG_USER+0x31000)
#define PGA_Freedom     (PGA_Dummy+0x0001)
        /* only one of FREEVERT or FREEHORIZ */
#define PGA_Borderless  (PGA_Dummy+0x0002)
#define PGA_HorizPot    (PGA_Dummy+0x0003)
#define PGA_HorizBody   (PGA_Dummy+0x0004)
#define PGA_VertPot     (PGA_Dummy+0x0005)
#define PGA_VertBody    (PGA_Dummy+0x0006)
#define PGA_Total       (PGA_Dummy+0x0007)
#define PGA_Visible     (PGA_Dummy+0x0008)
#define PGA_Top         (PGA_Dummy+0x0009)
/* New for V37: */
#define PGA_NewLook     (PGA_Dummy+0x000A)

/*****************************************************************************/

/* STRGCLASS attributes */
#define STRINGA_Dummy           (TAG_USER     +0x32000)
#define STRINGA_MaxChars        (STRINGA_Dummy+0x0001)
/* Note:  There is a minor problem with Intuition when using boopsi integer
 * gadgets (which are requested by using STRINGA_LongInt).  Such gadgets
 * must not have a STRINGA_MaxChars to be bigger than 15.  Setting
 * STRINGA_MaxChars for a boopsi integer gadget will cause a mismatched
 * FreeMem() to occur.
 */

#define STRINGA_Buffer          (STRINGA_Dummy+0x0002)
#define STRINGA_UndoBuffer      (STRINGA_Dummy+0x0003)
#define STRINGA_WorkBuffer      (STRINGA_Dummy+0x0004)
#define STRINGA_BufferPos       (STRINGA_Dummy+0x0005)
#define STRINGA_DispPos         (STRINGA_Dummy+0x0006)
#define STRINGA_AltKeyMap       (STRINGA_Dummy+0x0007)
#define STRINGA_Font            (STRINGA_Dummy+0x0008)
#define STRINGA_Pens            (STRINGA_Dummy+0x0009)
#define STRINGA_ActivePens      (STRINGA_Dummy+0x000A)
#define STRINGA_EditHook        (STRINGA_Dummy+0x000B)
#define STRINGA_EditModes       (STRINGA_Dummy+0x000C)

/* booleans */
#define STRINGA_ReplaceMode     (STRINGA_Dummy+0x000D)
#define STRINGA_FixedFieldMode  (STRINGA_Dummy+0x000E)
#define STRINGA_NoFilterMode    (STRINGA_Dummy+0x000F)

#define STRINGA_Justification   (STRINGA_Dummy+0x0010)
        /* GACT_STRINGCENTER, GACT_STRINGLEFT, GACT_STRINGRIGHT */
#define STRINGA_LongVal         (STRINGA_Dummy+0x0011)
#define STRINGA_TextVal         (STRINGA_Dummy+0x0012)

#define STRINGA_ExitHelp        (STRINGA_Dummy+0x0013)
        /* STRINGA_ExitHelp is new for V37, and ignored by V36.
         * Set this if you want the gadget to exit when Help is
         * pressed.  Look for a code of 0x5F, the rawkey code for Help */

#define SG_DEFAULTMAXCHARS      (128)

/*****************************************************************************/

/* Gadget layout related attributes */
#define LAYOUTA_Dummy           (TAG_USER+0x38000)
#define LAYOUTA_LayoutObj       (LAYOUTA_Dummy+0x0001)
#define LAYOUTA_Spacing         (LAYOUTA_Dummy+0x0002)
#define LAYOUTA_Orientation     (LAYOUTA_Dummy+0x0003)

#define LAYOUTA_ChildMaxWidth   (LAYOUTA_Dummy+0x0004)
    /* (BOOL) Child objects are of equal width.  Should default to TRUE for
     * gadgets with a horizontal orientation.  New for V42. */
#define LAYOUTA_ChildMaxHeight  (LAYOUTA_Dummy+0x0005)
    /* (BOOL) Child objects are of equal height.  Should default to TRUE for
     * gadgets with a vertical orientation.  New for V42. */

/* orientation values */
#define LORIENT_NONE    0
#define LORIENT_HORIZ   1
#define LORIENT_VERT    2

/*****************************************************************************/

/* Gadget Method ID's */
#define GM_Dummy        (-1)
    /* not used for anything */

#define GM_HITTEST      (0)
    /* return GMR_GADGETHIT if you are clicked on (whether or not you
     * are disabled). */

#define GM_RENDER       (1)
    /* draw yourself, in the appropriate state */

#define GM_GOACTIVE     (2)
    /* you are now going to be fed input */

#define GM_HANDLEINPUT  (3)
    /* handle that input */

#define GM_GOINACTIVE   (4)
    /* whether or not by choice, you are done */

#define GM_HELPTEST     (5)
    /* Will you send gadget help if the mouse is at the specified coordinates?
     * See below for possible GMR_ values. */

#define GM_LAYOUT       (6)
    /* re-evaluate your size based on the GadgetInfo domain.
     * Do NOT re-render yourself yet, you will be called when it is
     * time... */

#define GM_DOMAIN       (7)
    /* Used to obtain the sizing requirements of an object.  Does not
     * require an object. */

#define GM_KEYTEST      (8)
    /* return GMR_GADGETHIT if you activation key matches (whether or not you
     * are disabled). */

#define GM_KEYGOACTIVE  (9)

#define GM_KEYGOINACTIVE        (10)

/*****************************************************************************/

/* Parameter "Messages" passed to gadget class methods        */

/* GM_HITTEST and GM_HELPTEST send this message.
 * For GM_HITTEST, gpht_Mouse are coordinates relative to the gadget
 * select box.  For GM_HELPTEST, the coordinates are relative to
 * the gadget bounding box (which defaults to the select box).
 */
struct gpHitTest
{
    ULONG               MethodID;
    struct GadgetInfo   *gpht_GInfo;
    struct
    {
        WORD    X;
        WORD    Y;
    }                   gpht_Mouse;
};

/* For GM_HITTEST, return GMR_GADGETHIT if you were indeed hit,
 * otherwise return zero.
 *
 * For GM_HELPTEST, return GMR_NOHELPHIT (zero) if you were not hit.
 * Typically, return GMR_HELPHIT if you were hit.
 * It is possible to pass a UWORD to the application via the Code field
 * of the IDCMP_GADGETHELP message.  Return GMR_HELPCODE or'd with
 * the UWORD-sized result you wish to return.
 *
 * GMR_HELPHIT yields a Code value of ((UWORD) ~0), which should
 * mean "nothing particular" to the application.
 */

#define GMR_GADGETHIT   (0x00000004)    /* GM_HITTEST hit */

#define GMR_NOHELPHIT   (0x00000000)    /* GM_HELPTEST didn't hit */
#define GMR_HELPHIT     (0xFFFFFFFF)    /* GM_HELPTEST hit, return code = ~0 */
#define GMR_HELPCODE    (0x00010000)    /* GM_HELPTEST hit, return low word as code */

/*****************************************************************************/

/* GM_RENDER  */
struct gpRender
{
    ULONG               MethodID;
    struct GadgetInfo   *gpr_GInfo;     /* gadget context               */
    struct RastPort     *gpr_RPort;     /* all ready for use            */
    LONG                gpr_Redraw;     /* might be a "highlight pass"        */
};

/* values of gpr_Redraw */
#define GREDRAW_UPDATE  (2)     /* incremental update, e.g. prop slider */
#define GREDRAW_REDRAW  (1)     /* redraw gadget        */
#define GREDRAW_TOGGLE  (0)     /* toggle highlight, if applicable      */

/*****************************************************************************/

/* GM_GOACTIVE, GM_HANDLEINPUT        */
struct gpInput
{
    ULONG               MethodID;
    struct GadgetInfo   *gpi_GInfo;
    struct InputEvent   *gpi_IEvent;
    LONG                *gpi_Termination;
    struct
    {
        WORD    X;
        WORD    Y;
    }                   gpi_Mouse;

    /* (V39) Pointer to TabletData structure, if this event originated
     * from a tablet which sends IESUBCLASS_NEWTABLET events, or NULL if
     * not.
     *
     * DO NOT ATTEMPT TO READ THIS FIELD UNDER INTUITION PRIOR TO V39!
     * IT WILL BE INVALID!
     */
    struct TabletData   *gpi_TabletData;
};

/* GM_HANDLEINPUT and GM_GOACTIVE  return code flags    */
/* return GMR_MEACTIVE (0) alone if you want more input.
 * Otherwise, return ONE of GMR_NOREUSE and GMR_REUSE, and optionally
 * GMR_VERIFY.
 */
#define GMR_MEACTIVE    (0)
#define GMR_NOREUSE     (1 << 1)
#define GMR_REUSE       (1 << 2)
#define GMR_VERIFY      (1 << 3)      /* you MUST set gpi_Termination */

/* New for V37:
 * You can end activation with one of GMR_NEXTACTIVE and GMR_PREVACTIVE,
 * which instructs Intuition to activate the next or previous gadget
 * that has GFLG_TABCYCLE set.
 */
#define GMR_NEXTACTIVE  (1 << 4)
#define GMR_PREVACTIVE  (1 << 5)

/*****************************************************************************/

/* GM_GOINACTIVE */
struct gpGoInactive
{
    ULONG               MethodID;
    struct GadgetInfo   *gpgi_GInfo;

    /* V37 field only!  DO NOT attempt to read under V36! */
    ULONG               gpgi_Abort;     /* gpgi_Abort=1 if gadget was aborted
                                         * by Intuition and 0 if gadget went
                                         * inactive at its own request
                                         */
};

/*****************************************************************************/

/* New for V39: Intuition sends GM_LAYOUT to any GREL_ gadget when
 * the gadget is added to the window (or when the window opens, if
 * the gadget was part of the NewWindow.FirstGadget or the WA_Gadgets
 * list), or when the window is resized.  Your gadget can set the
 * GA_RelSpecial property to get GM_LAYOUT events without Intuition
 * changing the interpretation of your gadget select box.  This
 * allows for completely arbitrary resizing/repositioning based on
 * window size.
 */
/* GM_LAYOUT */
struct gpLayout
{
    ULONG               MethodID;
    struct GadgetInfo   *gpl_GInfo;
    ULONG               gpl_Initial;    /* non-zero if this method was invoked
                                         * during AddGList() or OpenWindow()
                                         * time.  zero if this method was invoked
                                         * during window resizing. */
};

/*****************************************************************************/

/* The GM_DOMAIN method is used to obtain the sizing requirements of an
 * object for a class before ever creating an object. */

/* GM_DOMAIN */
struct gpDomain
{
    ULONG                MethodID;
    struct GadgetInfo   *gpd_GInfo;
    struct RastPort     *gpd_RPort;     /* RastPort to layout for */
    LONG                 gpd_Which;
    struct IBox          gpd_Domain;    /* Resulting domain */
    struct TagItem      *gpd_Attrs;     /* Additional attributes */
};

#define GDOMAIN_MINIMUM         (0)
    /* Minimum size */

#define GDOMAIN_NOMINAL         (1)
    /* Nominal size */

#define GDOMAIN_MAXIMUM         (2)
    /* Maximum size */


/*****************************************************************************/

/* The GM_KEYTEST method is used to determin if a key press matches an
 * object's activation key(s). */

/* GM_KEYTEST send this message.
 */
struct gpKeyTest
{
    ULONG                MethodID;
    struct GadgetInfo   *gpkt_GInfo;
    struct IntuiMessage *gpkt_IMsg;     /* The IntuiMessage that triggered this */
    ULONG                gpkt_VanillaKey;
};

/*****************************************************************************/

/* The GM_KEYGOACTIVE method is called to "simulate" a gadget going down.
 * A gadget should render itself in a selected state when receiving
 * this message. If the class supports this method, it must return
 * GMR_KEYACTIVE.
 *
 * If a gadget returns zero for this method, it will subsequently be
 * activated via ActivateGadget() with a NULL IEvent.
 */

struct gpKeyInput
{
    ULONG MethodID;                     /* GM_KEYGOACTIVE */
    struct GadgetInfo   *gpk_GInfo;
    struct InputEvent   *gpk_IEvent;
    LONG                *gpk_Termination;
};

#define GMR_KEYACTIVE   (1 << 4)
#define GMR_KEYVERIFY   (1 << 5)      /* you MUST set gpk_Termination */

/* The GM_KEYGOINACTIVE method is called to simulate the gadget release.
 * Upon receiving this message, the gadget should do everything a
 * normal gadget release would do.
 */

struct gpKeyGoInactive
{
    ULONG MethodID;                     /* GM_KEYGOINACTIVE */
    struct GadgetInfo *gpki_GInfo;
    ULONG gpki_Abort;                   /* TRUE if input was aborted */
};

/*****************************************************************************/

/* Include obsolete identifiers: */
#ifndef INTUITION_IOBSOLETE_H
#include <intuition/iobsolete.h>
#endif

/*****************************************************************************/

#endif