#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