/*
**  $VER: layout.h 44.1 (19.10.1999)
**  Includes Release 44.1
**
**  Definitions for the layout.gadget BOOPSI class
**
**  (C) Copyright 1987-1999 Amiga, Inc.
**      All Rights Reserved
*/
/*****************************************************************************/
MODULE 'intuition/gadgetclass','images/bevel'
/*****************************************************************************/
OBJECT WeightObject             /* filled in by layout.gadget for weighbar */
  wb_SuccHeight:ULONG,
  wb_PredHeight:ULONG,
  wb_Reserved1:ULONG,     // currently unused.
  wb_SuccWidth:ULONG,
  wb_PredWidth:ULONG,
  wb_Reserved2:ULONG      // currently unused.

/*****************************************************************************/
OBJECT LayoutLimits            /* filled by the LayoutLimits() call */
  MinWidth:UWORD,
  MinHeight:UWORD,
  MaxWidth:UWORD,
  MaxHeight:UWORD

/*****************************************************************************/
#define LAYOUT_Dummy      (REACTION_Dummy+0x7000)
#define LAYOUT_Orientation    (LAYOUT_Dummy+1)
/* (ULONG) Orientation of group, LAYOUT_ORIENT_HORIZ or
   * LAYOUT_ORIENT_VERT.  Defaults to LAYOUT_ORIENT_HORIZ. */
#define LAYOUT_FixedHoriz     (LAYOUT_Dummy+2)
#define LAYOUT_FixedVert    (LAYOUT_Dummy+3)
/* (BOOL) TRUE for fixed-size group, false to force that direction to its
   * smallest possible size. */
#define LAYOUT_HorizAlignment   (LAYOUT_Dummy+4)
/* (ULONG) Align to left, right, or center of group space, defaults to
   * LAYOUT_ALIGN_LEFT. */
#define LAYOUT_VertAlignment  (LAYOUT_Dummy+5)
/* (ULONG) Align to top, bottom, or center of group space, defaults to
   * LAYOUT_ALIGN_TOP. */
#define LAYOUT_ShrinkWrap     (LAYOUT_Dummy+6)
/* (BOOL) Shrink out all extra space between gadgets. Default FALSE. */
#define LAYOUT_EvenSize       (LAYOUT_Dummy+7)
/* (BOOL) Use the minimum size of the largest child for all children.
   * Default FALSE. */
#define LAYOUT_InnerSpacing     (LAYOUT_Dummy+9)
/* (ULONG) Spacing between objects. Defaults to INTERSPACING.
   */
#define LAYOUT_HorizSpacing  LAYOUT_InnerSpacing  /* OBSOLETE */
#define LAYOUT_VertSpacing  LAYOUT_InnerSpacing
#define INTERSPACING  4   /* virtual pixels */
#define INTERSPACE  INTERSPACING
#define LAYOUT_TopSpacing        (LAYOUT_Dummy+10)
/* (ULONG) The minimum space between the top of the group, and the top of
   * the objects inside it. */
#define LAYOUT_BottomSpacing     (LAYOUT_Dummy+11)
/* (ULONG) The minimum space between the bottom of the group, and the
   * bottom of the objects inside it. */
#define LAYOUT_LeftSpacing       (LAYOUT_Dummy+12)
/* (ULONG) The minimum space between the left side of the group, and the
   * left side of the objects inside it. */
#define LAYOUT_RightSpacing      (LAYOUT_Dummy+13)
/* (ULONG) The minimum space between the right side of the group, and the
   * right side of the object inside it. */
#define LAYOUT_BevelState        (LAYOUT_Dummy+14)
/* (ULONG) Either IDS_SELECTED for recessed, or IDS_NORMAL for raised. */
#define LAYOUT_BevelStyle        (LAYOUT_Dummy+15)
/* (ULONG) See images/bevel.h */
#define LAYOUT_Label             (LAYOUT_Dummy+16)
/* (UBYTE *) The bevel label, as specified by a text string. */
#define LAYOUT_LabelImage        (LAYOUT_Dummy+17)
/* (struct Image *) The bevel label, as specified by an Image. */
#define LAYOUT_LabelPlace        (LAYOUT_Dummy+18)
/* (ULONG) Where to put the label: BVJ_TOP_CENTER, BVJ_TOP_LEFT,
   * BVJ_TOP_RIGHT, BVJ_IN_CENTER, BVJ_IN_LEFT, BVJ_IN_RIGHT */
/* The child functions.
 * After one of these functions is called, any CHILD_ tag may be used; it will apply
 * to whichever gadget was the last gadget to be altered by AddGadget/ModifyChild.
 */
#define LAYOUT_RemoveChild       (LAYOUT_Dummy+19)
/* (Object *) The BOOPSI gadget to be removed.  This will destroy the
   * object, as well. */
#define LAYOUT_AddChild          (LAYOUT_Dummy+20)
/* (Object *) The BOOPSI gadget to be added. */
#define LAYOUT_AddImage          (LAYOUT_Dummy+21)
/* (Object *) like LAYOUT_AddChild, except for images instead of
   * gadgets. */
#define LAYOUT_ModifyChild       (LAYOUT_Dummy+22)
/* (Object *) The BOOPSI gadget to be modified. */
/* The following two tags, together with GA_ID, are sent in a notification
 * message when a gadget informs of a release verify.
 */
#define LAYOUT_RelVerify    (LAYOUT_Dummy+23)
/* (BOOL) Gadget release verify notification tag */
#define LAYOUT_RelCode      (LAYOUT_Dummy+24)
/* (UWORD) Copy of the IntuiMessage.Code from the release verify */
#define LAYOUT_Parent       (LAYOUT_Dummy+25)
/* (Object *) Set the parent layout of a sublayout. Layout will set this
   * automatically for all children (thus any object added to a layout
   * hierarchy will receive this tag in OM_SET). */
#define LAYOUT_DeferLayout    (LAYOUT_Dummy+26)
/* (BOOL) Setting this tag for a top layout will make it defer GM_LAYOUT
   * and GM_RENDER from input.device context and request the application to
   * do them. */
#define LAYOUT_RequestLayout  (LAYOUT_Dummy+27)
/* (Object *) When this tag is received in OM_UPDATE or IDCMP_IDCMPUPDATE,
   * the layout instance in question should be relayouted with the GM_LAYOUT
   * method (or by calling RethinkLayout).  Setting LAYOUT_DeferLayout will
   * make these notifications appear. */
#define LAYOUT_RequestRefresh   (LAYOUT_Dummy+28)
/* (Object *) When this tag is received in OM_UPDATE or IDCMP_IDCMPUPDATE,
   * the layout instance in question should be refreshed with the GM_RENDER
   * method (or by calling RefreshGList).  Setting LAYOUT_DeferLayout will
   * make these notifications appear. */
#define LAYOUT_TextPen      (LAYOUT_Dummy+29)
/* (WORD) Optional text pen color for group label */
#define LAYOUT_FillPen      (LAYOUT_Dummy+30)
/* (WORD) Optional backfill pen color */
#define LAYOUT_FillPattern    (LAYOUT_Dummy+31)
/* (UWORD *) Optional backfill pattern */
#define LAYOUT_PageBackFill     (LAYOUT_Dummy+32)
/* (struct Hook *) !PRIVATE! backfill hook */
#define LAYOUT_BackFill       GA_BackFill
/* (struct Hook *) Optional backfill hook */
#define LAYOUT_TabVerify    (LAYOUT_Dummy+33)
/* (BOOL) TRUE if this release verify was triggered with tabcycling and
   * another gadget has been activated */
#define LAYOUT_LabelColumn    (LAYOUT_Dummy+34)
/* (ULONG) LABELTEXT_LEFT or LABELTEXT_RIGHT, the side where object
   * labels are placed in a vertical group. */
#define LAYOUT_LabelWidth     (LAYOUT_Dummy+35)
/* (ULONG) Width of the the gadget label column. This attribute
   * can be used to justify several layout groups. */
#define LAYOUT_AlignLabels    (LAYOUT_Dummy+36)
/* (Object *) Pointer to another layout object this group should
   * align labels width. Set a cyclic pointer between all the objects
   * and they will automatically make their label columns the same
   * width. These tags should be set as soon as possible, preferably
   * during OM_NEW (One will have to be set afterwards). */
#define LAYOUT_SpaceInner     (LAYOUT_Dummy+37)
#define LAYOUT_SpaceOuter   (LAYOUT_Dummy+38)
/* (BOOL) Whether or not this group should have space around/between
   * objects. For normal layouts, you should use these tags instead
   * of the direct-control LAYOUT_Top/Bottom/Right/Left/InnerSpacing,
   * since these can be automatically adjusted to the resolution
   * for you. */
#define LAYOUT_RelAddress     (LAYOUT_Dummy+39)
/* (struct Gadget *) The address of the gadget that sent a release
   * verify. */
#define LAYOUT_HelpHit      (LAYOUT_Dummy+40)
/* (UWORD) HelpTest return code.
   */
#define LAYOUT_HelpGadget     (LAYOUT_Dummy+41)
/* (struct Gadget *) HelpTest gadget pointer notified with HelpHit! (V44)
   * (OM_NOTIFY)
   */
#define LAYOUT_DisposeLabels  (LAYOUT_Dummy)  /* Was +41!! */
/* (BOOL) Dispose Labels on exit (OBSOLETE!)
   * (OM_SET/OM_UPDATE)
   */
#define LAYOUT_Inverted      (LAYOUT_Dummy+42)
/* (BOOL) Add group children via AddHead() rather than AddTail()
   * A very simple means to flip a layout group placement (42.25+)
     * Its also highly useful for dynamic layout, inserting the
     * child on the head, or tail (left/right, top/bottom). Changing
     * this tag only effects children added afterward.
   */
#define LAYOUT_WeightBar     (LAYOUT_Dummy+43)
/* (BOOL) Place a user adjustable weighting bar here (ie; balance group bar)
   *  ClassAct 2.1 - V43.1
   */
/* Child tags!
 */
#define CHILD_Dummy         (LAYOUT_Dummy+0x100)
#define CHILD_MinWidth           (CHILD_Dummy+1)
/* (ULONG) The minimum width, in pixels, of the object.  Leave blank if
   * you want the minimum size to be calced by the gadget as the smallest
   * possible, or use ~0.  Defaults to ~0. */
#define CHILD_MinHeight          (CHILD_Dummy+2)
/* (ULONG) The minimum height, in pixels, of the object.  Leave blank if
   * you want the minimum size to be calced by the gadget as the smallest
   * possible, or use ~0.  Defaults to ~0. */
#define CHILD_NominalSize     (CHILD_Dummy+11)
/* (BOOL) Use GDOMAIN_NOMINAL instead of GDOMAIN_MINIMUM to request
   * minimum size.  Defaults to FALSE. */
#define CHILD_MaxWidth      (CHILD_Dummy+3)
/* (ULONG) The maximum width, in pixels, of the object.  Leave blank if
   * you want the maximum size to be calced by the gadget as the largest
   * possible, or use ~0. */
#define CHILD_MaxHeight          (CHILD_Dummy+4)
/* (ULONG) The maximum height, in pixels, of the object.  Leave blank if
   * you want the maximum size to be calced by the gadget as the smallest
   * possible, or use ~0. */
#define CHILD_WeightedWidth      (CHILD_Dummy+5)
/* (ULONG) See CHILD_WeightedHeight. */
#define CHILD_WeightedHeight     (CHILD_Dummy+6)
/* (ULONG) The weighted width or height is a number between 0 and 100;
   * it determines how much space, in relation to the other objects in the
   * group, this particular object should be allowed.  When the width/height
   * for the group is calculated, the allowable space is divided up between
   * the gadgets based on this, and the min/max values.  For instance, if
   * you had two objects, one with a weight of 100 and another with a weight
   * of 50, and the group was 150 pixels wide, 100 would be offered to the
   * first, and 50 to the second; how much space it actually takes depends
   * on whether that particular value exceeds the maximum, the minimum, or
   * the gadget's internal calculations of its minimum or maximum possible
   * width or height.  Both CHILD_WeightedWidth and CHILD_WeightedHeight
   * default to 100.  A value of 0 locks it at the CHILD_MinWidth or
   * CHILD_MinHeight value, respectively. */
#define CHILD_ReplaceObject        (CHILD_Dummy+7)
/* (Object *) The BOOPSI gadget to replace the object with.  The original
   * object is destroyed. */
#define CHILD_ReplaceImage         (LAYOUT_Dummy+8)
/* (Object *) Like CHILD_ReplaceObject, except the replacement object is
   * an image, not a gadget. */
#define CHILD_CacheDomain          (CHILD_Dummy+9)
/* (BOOL) Whether GM_DOMAIN results can be cached to improve performance.
   * Set this to FALSE if you use weird gadgets that can change size on
   * their own. Defaults to TRUE. */
#define CHILD_WeightMinimum     (CHILD_Dummy+10)
/* (BOOL) Makes layout set the weighted size to the values returned by
   * minimum GM_DOMAIN. */
#define CHILD_Label         (CHILD_Dummy+12)
/* (Object *) A label.image to use as the label for this gadget */
#define CHILD_NoDispose       (CHILD_Dummy+13)
/* (BOOL) Set this to true if you don't want layout to automatically
   * dispose the object. */
#define CHILD_ScaleHeight        (CHILD_Dummy+14)
/* (UWORD) Scales min domain size larger by this percentage (0 thru 100). */
#define CHILD_ScaleWidth         (CHILD_Dummy+15)
/* (UWORD See CHILD_ScaleHeight. */
#define CHILD_DataType           (CHILD_Dummy+16)
/* (BOOL) This is a datatype, layout will use DTM_PROCLAYOUT,
   * SetDTAttrs and RefreshDTObject so waiting for DTA_Sync is not
   * required. (V43 BETA) */
/*****************************************************************************/
/* Special "empty label" value for CHILD_Label
 */
#define LCLABEL_NOLABEL     (1)
/* Possible values for LAYOUT_Orientation.
 */
#define LAYOUT_HORIZONTAL   0
#define LAYOUT_VERTICAL     1
#define LAYOUT_ORIENT_HORIZ   LAYOUT_HORIZONTAL
#define LAYOUT_ORIENT_VERT  LAYOUT_VERTICAL
/* Possible values for LAYOUT_HorizAlignment.
 */
#define LALIGN_LEFT     0
#define LALIGN_RIGHT  1
#define LALIGN_CENTER   2
#define LALIGN_CENTRE   LALIGN_CENTER
#define LAYOUT_ALIGN_LEFT   LALIGN_LEFT
#define LAYOUT_ALIGN_RIGHT  LALIGN_RIGHT
#define LAYOUT_ALIGN_CENTER   LALIGN_CENTER
/* Possible values for LAYOUT_VertAlignment.
 */
#define LALIGN_TOP    0
#define LALIGN_BOTTOM   1
#define LALIGN_CENTER   2
#define LALIGN_CENTRE   LALIGN_CENTER
#define LAYOUT_ALIGN_TOP  LALIGN_TOP
#define LAYOUT_ALIGN_BOTTOM   LALIGN_BOTTOM
#define LAYOUT_ALIGN_CENTER   LALIGN_CENTER
/*****************************************************************************/
/* Page Class tags  */
#define PAGE_Dummy        (LAYOUT_Dummy+0x200)
#define PAGE_Add        (PAGE_Dummy+1)
/* (Object *) Add a page to the end of a page group */
#define PAGE_Remove         (PAGE_Dummy+2)
/* (Object *) Remove a page from the page group */
#define PAGE_Current      (PAGE_Dummy+3)
/* (ULONG) Make the n'th page visible. */
#define PAGE_FixedVert      (PAGE_Dummy+4)
#define PAGE_FixedHoriz       (PAGE_Dummy+5)
/* (BOOL) Like the Layout class tags. */
#define PAGE_Transparent    (PAGE_Dummy+6)
/* (BOOL) PRIVATE */
