#ifndef LIBRARIES_BGUI_MACROS_H
#define LIBRARIES_BGUI_MACROS_H
/*
**      $VER: libraries/bgui_macros.h 38.4 (15.4.95)
**      bgui.library macros.
**
**      (C) Copyright 1993-1995 Jaba Development.
**      (C) Copyright 1993-1995 Jan van den Baard.
**      All Rights Reserved.
**/

#ifndef LIBRARIES_BGUI_H
#include "bgui.h"
#endif /* LIBRARIES_BGUI_H */

/*****************************************************************************
 *
 *      General object creation macros.
 */
#define HGroupObject            BGUI_NewObject( BGUI_GROUP_GADGET
#define VGroupObject            BGUI_NewObject( BGUI_GROUP_GADGET,\
                                                GROUP_Style, GRSTYLE_VERTICAL
#define ButtonObject            BGUI_NewObject( BGUI_BUTTON_GADGET
#define ToggleObject            BGUI_NewObject( BGUI_BUTTON_GADGET,\
                                                GA_ToggleSelect, TRUE
#define CycleObject             BGUI_NewObject( BGUI_CYCLE_GADGET
#define CheckBoxObject          BGUI_NewObject( BGUI_CHECKBOX_GADGET
#define InfoObject              BGUI_NewObject( BGUI_INFO_GADGET
#define StringObject            BGUI_NewObject( BGUI_STRING_GADGET
#define PropObject              BGUI_NewObject( BGUI_PROP_GADGET
#define IndicatorObject         BGUI_NewObject( BGUI_INDICATOR_GADGET
#define ProgressObject          BGUI_NewObject( BGUI_PROGRESS_GADGET
#define SliderObject            BGUI_NewObject( BGUI_SLIDER_GADGET
#define PageObject              BGUI_NewObject( BGUI_PAGE_GADGET
#define MxObject                BGUI_NewObject( BGUI_MX_GADGET
#define ListviewObject          BGUI_NewObject( BGUI_LISTVIEW_GADGET
#define ExternalObject          BGUI_NewObject( BGUI_EXTERNAL_GADGET, GA_Left, 0, GA_Top, 0, GA_Width, 0, GA_Height, 0
#define SeparatorObject         BGUI_NewObject( BGUI_SEPARATOR_GADGET

#define WindowObject            BGUI_NewObject( BGUI_WINDOW_OBJECT
#define FileReqObject           BGUI_NewObject( BGUI_FILEREQ_OBJECT
#define CommodityObject         BGUI_NewObject( BGUI_COMMODITY_OBJECT

#define EndObject               TAG_END )

/* Typo */
#define SeperatorObject         SeparatorObject

/*****************************************************************************
 *
 *      Label creation.
 */
#define Label(l)                LAB_Label, l
#define UScoreLabel(l,u)        LAB_Label, l, LAB_Underscore, u
#define Style(s)                LAB_Style, s
#define Place(p)                LAB_Place, p

/*****************************************************************************
 *
 *      Frames.
 */
#define ButtonFrame             FRM_Type, FRTYPE_BUTTON
#define RidgeFrame              FRM_Type, FRTYPE_RIDGE
#define DropBoxFrame            FRM_Type, FRTYPE_DROPBOX
#define NeXTFrame               FRM_Type, FRTYPE_NEXT
#define RadioFrame              FRM_Type, FRTYPE_RADIOBUTTON
#define XenFrame                FRM_Type, FRTYPE_XEN_BUTTON

/* For clarity. */
#define StringFrame             RidgeFrame
#define MxFrame                 RadioFrame

#define FrameTitle(t)           FRM_Title, t

/* Built-in back fills */
#define ShineRaster             FRM_BackFill, SHINE_RASTER
#define ShadowRaster            FRM_BackFill, SHADOW_RASTER
#define ShineShadowRaster       FRM_BackFill, SHINE_SHADOW_RASTER
#define FillRaster              FRM_BackFill, FILL_RASTER
#define ShineFillRaster         FRM_BackFill, SHINE_FILL_RASTER
#define ShadowFillRaster        FRM_BackFill, SHADOW_FILL_RASTER
#define ShineBlock              FRM_BackFill, SHINE_BLOCK
#define ShadowBlock             FRM_BackFill, SHADOW_BLOCK

/*****************************************************************************
 *
 *      Vector images.
 */
#define GetPath                 VIT_BuiltIn, BUILTIN_GETPATH
#define GetFile                 VIT_BuiltIn, BUILTIN_GETFILE
#define CheckMark               VIT_BuiltIn, BUILTIN_CHECKMARK
#define PopUp                   VIT_BuiltIn, BUILTIN_POPUP
#define ArrowUp                 VIT_BuiltIn, BUILTIN_ARROW_UP
#define ArrowDown               VIT_BuiltIn, BUILTIN_ARROW_DOWN
#define ArrowLeft               VIT_BuiltIn, BUILTIN_ARROW_LEFT
#define ArrowRight              VIT_BuiltIn, BUILTIN_ARROW_RIGHT

/*****************************************************************************
 *
 *      Group class macros.
 */
#define StartMember             GROUP_Member
#define EndMember               TAG_END, 0
#define Spacing(p)              GROUP_Spacing, p
#define HOffset(p)              GROUP_HorizOffset, p
#define VOffset(p)              GROUP_VertOffset, p
#define LOffset(p)              GROUP_LeftOffset, p
#define ROffset(p)              GROUP_RightOffset, p
#define TOffset(p)              GROUP_TopOffset, p
#define BOffset(p)              GROUP_BottomOffset, p
#define VarSpace(w)             GROUP_SpaceObject, w
#define EqualWidth              GROUP_EqualWidth, TRUE
#define EqualHeight             GROUP_EqualHeight, TRUE

/*****************************************************************************
 *
 *      Layout macros.
 */
#define FixMinWidth             LGO_FixMinWidth, TRUE
#define FixMinHeight            LGO_FixMinHeight, TRUE
#define Weight(w)               LGO_Weight, w
#define FixWidth(w)             LGO_FixWidth, w
#define FixHeight(h)            LGO_FixHeight, h
#define Align                   LGO_Align, TRUE
#define FixMinSize              FixMinWidth, FixMinHeight
#define FixSize(w,h)            FixWidth(w), FixHeight(h)
#define NoAlign                 LGO_NoAlign, TRUE

/*****************************************************************************
 *
 *      Page class macros.
 */
#define PageMember              PAGE_Member

/*****************************************************************************
 *
 *      "Quick" button creation macros.
 */
#define Button(label,id)\
        ButtonObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                ButtonFrame,\
        EndObject

#define KeyButton(label,id)\
        ButtonObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                ButtonFrame,\
        EndObject

#define Toggle(label,state,id)\
        ToggleObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                GA_Selected,            state,\
                ButtonFrame,\
        EndObject

#define KeyToggle(label,state,id)\
        ToggleObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                GA_Selected,            state,\
                ButtonFrame,\
        EndObject

#define XenButton(label,id)\
        ButtonObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                XenFrame,\
        EndObject

#define XenKeyButton(label,id)\
        ButtonObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                XenFrame,\
        EndObject

#define XenToggle(label,state,id)\
        ToggleObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                GA_Selected,            state,\
                XenFrame,\
        EndObject

#define XenKeyToggle(label,state,id)\
        ToggleObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                GA_Selected,            state,\
                XenFrame,\
        EndObject

/*****************************************************************************
 *
 *      "Quick" cycle creation macros.
 */
#define Cycle(label,labels,active,id)\
        CycleObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                ButtonFrame,\
                CYC_Labels,             labels,\
                CYC_Active,             active,\
        EndObject

#define KeyCycle(label,labels,active,id)\
        CycleObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                ButtonFrame,\
                CYC_Labels,             labels,\
                CYC_Active,             active,\
        EndObject

#define XenCycle(label,labels,active,id)\
        CycleObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                XenFrame,\
                CYC_Labels,             labels,\
                CYC_Active,             active,\
        EndObject

#define XenKeyCycle(label,labels,active,id)\
        CycleObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                XenFrame,\
                CYC_Labels,             labels,\
                CYC_Active,             active,\
        EndObject

#define PopCycle(label,labels,active,id)\
        CycleObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                ButtonFrame,\
                CYC_Labels,             labels,\
                CYC_Active,             active,\
                CYC_Popup,              TRUE,\
        EndObject

#define KeyPopCycle(label,labels,active,id)\
        CycleObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                ButtonFrame,\
                CYC_Labels,             labels,\
                CYC_Active,             active,\
                CYC_Popup,              TRUE,\
        EndObject

#define XenPopCycle(label,labels,active,id)\
        CycleObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                XenFrame,\
                CYC_Labels,             labels,\
                CYC_Active,             active,\
                CYC_Popup,              TRUE,\
        EndObject

#define XenKeyPopCycle(label,labels,active,id)\
        CycleObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                XenFrame,\
                CYC_Labels,             labels,\
                CYC_Active,             active,\
                CYC_Popup,              TRUE,\
        EndObject

/*****************************************************************************
 *
 *      "Quick" checkbox creation macros.
 */
#define CheckBox(label,state,id)\
        CheckBoxObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                ButtonFrame,\
                FRM_Flags,              FRF_EDGES_ONLY,\
                GA_Selected,            state,\
        EndObject, FixMinSize

#define KeyCheckBox(label,state,id)\
        CheckBoxObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                ButtonFrame,\
                FRM_Flags,              FRF_EDGES_ONLY,\
                GA_Selected,            state,\
        EndObject, FixMinSize

#define XenCheckBox(label,state,id)\
        CheckBoxObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                XenFrame,\
                FRM_Flags,              FRF_EDGES_ONLY,\
                GA_Selected,            state,\
        EndObject, FixMinSize

#define XenKeyCheckBox(label,state,id)\
        CheckBoxObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                XenFrame,\
                FRM_Flags,              FRF_EDGES_ONLY,\
                GA_Selected,            state,\
        EndObject, FixMinSize

#define CheckBoxNF(label,state,id)\
        CheckBoxObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                ButtonFrame,\
                FRM_Flags,              FRF_EDGES_ONLY,\
                GA_Selected,            state,\
        EndObject,

#define KeyCheckBoxNF(label,state,id)\
        CheckBoxObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                ButtonFrame,\
                FRM_Flags,              FRF_EDGES_ONLY,\
                GA_Selected,            state,\
        EndObject,

#define XenCheckBoxNF(label,state,id)\
        CheckBoxObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                XenFrame,\
                FRM_Flags,              FRF_EDGES_ONLY,\
                GA_Selected,            state,\
        EndObject,

#define XenKeyCheckBoxNF(label,state,id)\
        CheckBoxObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                GA_ID,                  id,\
                XenFrame,\
                FRM_Flags,              FRF_EDGES_ONLY,\
                GA_Selected,            state,\
        EndObject,

/*****************************************************************************
 *
 *      "Quick" info object creation macros.
 */
#define InfoFixed(label,text,args,numlines)\
        InfoObject,\
                LAB_Label,              label,\
                ButtonFrame,\
                FRM_Flags,              FRF_RECESSED,\
                INFO_TextFormat,        text,\
                INFO_Args,              args,\
                INFO_MinLines,          numlines,\
                INFO_FixTextWidth,      TRUE,\
        EndObject

#define InfoObj(label,text,args,numlines)\
        InfoObject,\
                LAB_Label,              label,\
                ButtonFrame,\
                FRM_Flags,              FRF_RECESSED,\
                INFO_TextFormat,        text,\
                INFO_Args,              args,\
                INFO_MinLines,          numlines,\
        EndObject

/*****************************************************************************
 *
 *      "Quick" string/integer creation macros.
 */
#define String(label,contents,maxchars,id)\
        StringObject,\
                LAB_Label,              label,\
                RidgeFrame,\
                STRINGA_TextVal,        contents,\
                STRINGA_MaxChars,       maxchars,\
                GA_ID,                  id,\
        EndObject

#define KeyString(label,contents,maxchars,id)\
        StringObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                RidgeFrame,\
                STRINGA_TextVal,        contents,\
                STRINGA_MaxChars,       maxchars,\
                GA_ID,                  id,\
        EndObject

#define TabString(label,contents,maxchars,id)\
        StringObject,\
                LAB_Label,              label,\
                RidgeFrame,\
                STRINGA_TextVal,        contents,\
                STRINGA_MaxChars,       maxchars,\
                GA_ID,                  id,\
                GA_TabCycle,            TRUE,\
        EndObject

#define TabKeyString(label,contents,maxchars,id)\
        StringObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                RidgeFrame,\
                STRINGA_TextVal,        contents,\
                STRINGA_MaxChars,       maxchars,\
                GA_ID,                  id,\
                GA_TabCycle,            TRUE,\
        EndObject

#define Integer(label,contents,maxchars,id)\
        StringObject,\
                LAB_Label,              label,\
                RidgeFrame,\
                STRINGA_LongVal,        contents,\
                STRINGA_MaxChars,       maxchars,\
                GA_ID,                  id,\
        EndObject

#define KeyInteger(label,contents,maxchars,id)\
        StringObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                RidgeFrame,\
                STRINGA_LongVal,        contents,\
                STRINGA_MaxChars,       maxchars,\
                GA_ID,                  id,\
        EndObject

#define TabInteger(label,contents,maxchars,id)\
        StringObject,\
                LAB_Label,              label,\
                RidgeFrame,\
                STRINGA_LongVal,        contents,\
                STRINGA_MaxChars,       maxchars,\
                GA_ID,                  id,\
                GA_TabCycle,            TRUE,\
        EndObject

#define TabKeyInteger(label,contents,maxchars,id)\
        StringObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                RidgeFrame,\
                STRINGA_LongVal,        contents,\
                STRINGA_MaxChars,       maxchars,\
                GA_ID,                  id,\
                GA_TabCycle,            TRUE,\
        EndObject

/*
 *      STRINGA_Pens & STRINGA_ActivePens pen-pack macro.
 */
#define PACKPENS(a,b) (((b<<8)&0xFF00)|((a)&0x00FF))

/*****************************************************************************
 *
 *      "Quick" scroller creation macros.
 */
#define HorizScroller(label,top,total,visible,id)\
        PropObject,\
                LAB_Label,              label,\
                PGA_Top,                top,\
                PGA_Total,              total,\
                PGA_Visible,            visible,\
                PGA_Freedom,            FREEHORIZ,\
                GA_ID,                  id,\
                PGA_Arrows,             TRUE,\
        EndObject

#define VertScroller(label,top,total,visible,id)\
        PropObject,\
                LAB_Label,              label,\
                PGA_Top,                top,\
                PGA_Total,              total,\
                PGA_Visible,            visible,\
                GA_ID,                  id,\
                PGA_Arrows,             TRUE,\
        EndObject

#define KeyHorizScroller(label,top,total,visible,id)\
        PropObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                PGA_Top,                top,\
                PGA_Total,              total,\
                PGA_Visible,            visible,\
                PGA_Freedom,            FREEHORIZ,\
                GA_ID,                  id,\
                PGA_Arrows,             TRUE,\
        EndObject

#define KeyVertScroller(label,top,total,visible,id)\
        PropObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                PGA_Top,                top,\
                PGA_Total,              total,\
                PGA_Visible,            visible,\
                GA_ID,                  id,\
                PGA_Arrows,             TRUE,\
        EndObject

/*****************************************************************************
 *
 *      "Quick" indicator creation macros.
 */
#define Indicator(min,max,level,just)\
        IndicatorObject,\
                INDIC_Min,              min,\
                INDIC_Max,              max,\
                INDIC_Level,            level,\
                INDIC_Justification,    just,\
        EndObject

#define IndicatorFormat(min,max,level,just,format)\
        IndicatorObject,\
                INDIC_Min,              min,\
                INDIC_Max,              max,\
                INDIC_Level,            level,\
                INDIC_Justification,    just,\
                INDIC_FormatString,     format,\
        EndObject

/*****************************************************************************
 *
 *      "Quick" progress creation macros.
 */
#define HorizProgress(label,min,max,done)\
        ProgressObject,\
                LAB_Label,              label,\
                ButtonFrame,\
                FRM_Flags,              FRF_RECESSED,\
                PROGRESS_Min,           min,\
                PROGRESS_Max,           max,\
                PROGRESS_Done,          done,\
        EndObject

#define VertProgress(label,min,max,done)\
        ProgressObject,\
                LAB_Label,              label,\
                ButtonFrame,\
                FRM_Flags,              FRF_RECESSED,\
                PROGRESS_Min,           min,\
                PROGRESS_Max,           max,\
                PROGRESS_Done,          done,\
                PROGRESS_Vertical,      TRUE,\
        EndObject

/*****************************************************************************
 *
 *      "Quick" slider creation macros.
 */
#define HorizSlider(label,min,max,level,id)\
        SliderObject,\
                LAB_Label,              label,\
                SLIDER_Min,             min,\
                SLIDER_Max,             max,\
                SLIDER_Level,           level,\
                GA_ID,                  id,\
        EndObject

#define VertSlider(label,min,max,level,id)\
        SliderObject,\
                LAB_Label,              label,\
                SLIDER_Min,             min,\
                SLIDER_Max,             max,\
                SLIDER_Level,           level,\
                PGA_Freedom,            FREEVERT,\
                GA_ID,                  id,\
        EndObject

#define KeyHorizSlider(label,min,max,level,id)\
        SliderObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                SLIDER_Min,             min,\
                SLIDER_Max,             max,\
                SLIDER_Level,           level,\
                GA_ID,                  id,\
        EndObject

#define KeyVertSlider(label,min,max,level,id)\
        SliderObject,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                SLIDER_Min,             min,\
                SLIDER_Max,             max,\
                SLIDER_Level,           level,\
                PGA_Freedom,            FREEVERT,\
                GA_ID,                  id,\
        EndObject

/*****************************************************************************
 *
 *      "Quick" mx creation macros.
 */
#define RightMx(label,labels,active,id)\
        MxObject,\
                GROUP_Style,            GRSTYLE_VERTICAL,\
                LAB_Label,              label,\
                MX_Labels,              labels,\
                MX_Active,              active,\
                GA_ID,                  id,\
        EndObject, FixMinSize

#define LeftMx(label,labels,active,id)\
        MxObject,\
                GROUP_Style,            GRSTYLE_VERTICAL,\
                LAB_Label,              label,\
                MX_Labels,              labels,\
                MX_Active,              active,\
                MX_LabelPlace,          PLACE_LEFT,\
                GA_ID,                  id,\
        EndObject, FixMinSize

#define RightMxKey(label,labels,active,id)\
        MxObject,\
                GROUP_Style,            GRSTYLE_VERTICAL,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                MX_Labels,              labels,\
                MX_Active,              active,\
                GA_ID,                  id,\
        EndObject, FixMinSize

#define LeftMxKey(label,labels,active,id)\
        MxObject,\
                GROUP_Style,            GRSTYLE_VERTICAL,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                MX_Labels,              labels,\
                MX_Active,              active,\
                MX_LabelPlace,          PLACE_LEFT,\
                GA_ID,                  id,\
        EndObject, FixMinSize

#define Tabs(label,labels,active,id)\
        MxObject,\
                MX_TabsObject,          TRUE,\
                LAB_Label,              label,\
                MX_Labels,              labels,\
                MX_Active,              active,\
                GA_ID,                  id,\
        EndObject, FixMinHeight

#define TabsKey(label,labels,active,id)\
        MxObject,\
                MX_TabsObject,          TRUE,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                MX_Labels,              labels,\
                MX_Active,              active,\
                GA_ID,                  id,\
        EndObject, FixMinHeight

#define TabsEqual(label,labels,active,id)\
        MxObject,\
                GROUP_EqualWidth,       TRUE,\
                MX_TabsObject,          TRUE,\
                LAB_Label,              label,\
                MX_Labels,              labels,\
                MX_Active,              active,\
                GA_ID,                  id,\
        EndObject, FixMinHeight

#define TabsEqualKey(label,labels,active,id)\
        MxObject,\
                GROUP_EqualWidth,       TRUE,\
                MX_TabsObject,          TRUE,\
                LAB_Label,              label,\
                LAB_Underscore,         '_',\
                MX_Labels,              labels,\
                MX_Active,              active,\
                GA_ID,                  id,\
        EndObject, FixMinHeight

/*****************************************************************************
 *
 *      "Quick" listview creation macros.
 */
#define StrListview(label,strings,id)\
        ListviewObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                LISTV_EntryArray,       strings,\
        EndObject

#define StrListviewSorted(label,strings,id)\
        ListviewObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                LISTV_EntryArray,       strings,\
                LISTV_SortEntryArray,   TRUE,\
        EndObject

#define ReadStrListview(label,strings)\
        ListviewObject,\
                LAB_Label,              label,\
                LISTV_EntryArray,       strings,\
                LISTV_ReadOnly,         TRUE,\
        EndObject

#define ReadStrListviewSorted(label,strings)\
        ListviewObject,\
                LAB_Label,              label,\
                LISTV_EntryArray,       strings,\
                LISTV_SortEntryArray,   TRUE,\
                LISTV_ReadOnly,         TRUE,\
        EndObject

#define MultiStrListview(label,strings,id)\
        ListviewObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                LISTV_EntryArray,       strings,\
                LISTV_MultiSelect,      TRUE,\
        EndObject

#define MultiStrListviewSorted(label,strings,id)\
        ListviewObject,\
                LAB_Label,              label,\
                GA_ID,                  id,\
                LISTV_EntryArray,       strings,\
                LISTV_SortEntryArray,   TRUE,\
                LISTV_MultiSelect,      TRUE,\
        EndObject

/*****************************************************************************
 *
 *      "Quick" separator bar creation macros.
 */
#define VertSeparator\
        SeperatorObject,\
        EndObject, FixMinWidth

#define VertThinSeparator\
        SeperatorObject,\
                SEP_Thin,               TRUE,\
        EndObject, FixMinWidth

#define HorizSeparator\
        SeperatorObject,\
                SEP_Horiz,              TRUE,\
        EndObject, FixMinHeight

#define TitleSeparator(t)\
        SeperatorObject,\
                SEP_Horiz,              TRUE,\
                SEP_Title,              t,\
        EndObject, FixMinHeight

#define HTitleSeparator(t)\
        SeperatorObject,\
                SEP_Horiz,              TRUE,\
                SEP_Title,              t,\
                SEP_Highlight,          TRUE,\
        EndObject, FixMinHeight

#define CTitleSeparator(t)\
        SeperatorObject,\
                SEP_Horiz,              TRUE,\
                SEP_Title,              t,\
                SEP_CenterTitle,        TRUE,\
        EndObject, FixMinHeight

#define CHTitleSeparator(t)\
        SeperatorObject,\
                SEP_Horiz,              TRUE,\
                SEP_Title,              t,\
                SEP_Highlight,          TRUE,\
                SEP_CenterTitle,        TRUE,\
        EndObject, FixMinHeight

/* Typos */
#define VertSeperator           VertSeparator
#define VertThinSeperator       VertThinSeparator
#define HorizSeperator          HorizSeparator
#define TitleSeperator          TitleSeparator
#define HTitleSeperator         HTitleSeparator
#define CTitleSeperator         CTitleSeparator
#define CHTitleSeperator        CHTitleSeparator

/*****************************************************************************
 *
 *      Some simple menu macros.
 */
#define Title(t)\
        { NM_TITLE, t, NULL, 0, 0, NULL }
#define Item(t,s,i)\
        { NM_ITEM, t, s, 0, 0, (APTR)i }
#define ItemBar\
        { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }
#define SubItem(t,s,i)\
        { NM_SUB, t, s, 0, 0, (APTR)i }
#define SubBar\
        { NM_SUB, NM_BARLABEL, NULL, 0, 0, NULL }
#define End\
        { NM_END, NULL, NULL, 0, 0, NULL }

/*****************************************************************************
 *
 *      Base class method macros.
 */
#define AddMap(object,target,map)\
        DoMethod( object, BASE_ADDMAP, target, map )

#define AddCondit(object,target,ttag,tdat,ftag,fdat,stag,sdat)\
        DoMethod( object, BASE_ADDCONDITIONAL, target,\
                  ttag, tdat,\
                  ftag, fdat,\
                  stag, sdat )

#define AddHook(object,hook)\
        DoMethod( object, BASE_ADDHOOK, hook )

#define RemMap(object,target)\
        DoMethod( object, BASE_REMMAP, target )

#define RemCondit(object,target)\
        DoMethod( object, BASE_REMCONDITIONAL, target )

#define RemHook( object,hook)\
        DoMethod( object, BASE_REMHOOK, hook )

/*****************************************************************************
 *
 *      Listview class method macros.
 */
#define AddEntry(window,object,entry,how)\
        BGUI_DoGadgetMethod( object, window, NULL, LVM_ADDSINGLE,\
                             NULL, entry, how, 0L )

#define AddEntryVisible(window,object,entry,how)\
        BGUI_DoGadgetMethod( object, window, NULL, LVM_ADDSINGLE,\
                             NULL, entry, how, LVASF_MAKEVISIBLE )

#define AddEntrySelect(window,object,entry,how)\
        BGUI_DoGadgetMethod( object, window, NULL, LVM_ADDSINGLE,\
                             NULL, entry, how, LVASF_SELECT )

#define ClearList(window,object)\
        BGUI_DoGadgetMethod( object, window, NULL, LVM_CLEAR, NULL )

#define FirstEntry(object)\
        DoMethod( object, LVM_FIRSTENTRY, NULL, 0L )

#define FirstSelected(object)\
        DoMethod( object, LVM_FIRSTENTRY, NULL, LVGEF_SELECTED )

#define LastEntry(object)\
        DoMethod( object, LVM_LASTENTRY, NULL, 0L )

#define LastSelected(object)\
        DoMethod( object, LVM_LASTENTRY, NULL, LVGEF_SELECTED )

#define NextEntry(object,last)\
        DoMethod( object, LVM_NEXTENTRY, last, 0L )

#define NextSelected(object,last)\
        DoMethod( object, LVM_NEXTENTRY, last, LVGEF_SELECTED )

#define PrevEntry(object,last)\
        DoMethod( object, LVM_PREVENTRY, last, 0L )

#define PrevSelected(object,last)\
        DoMethod( object, LVM_PREVENTRY, last, LVGEF_SELECTED )

#define RemoveEntry(object,entry)\
        DoMethod( object, LVM_REMENTRY, NULL, entry )

#define RemoveEntryVisible(window,object,entry)\
        BGUI_DoGadgetMethod( object, window, NULL, LVM_REMENTRY, NULL, entry )

#define RefreshList(window,object)\
        BGUI_DoGadgetMethod( object, window, NULL, LVM_REFRESH, NULL )

#define SortList(window,object)\
        BGUI_DoGadgetMethod( object, window, NULL, LVM_SORT, NULL )

#define LockList(object)\
        DoMethod( object, LVM_LOCKLIST, NULL )

#define UnlockList(window,object)\
        BGUI_DoGadgetMethod( object, window, NULL, LVM_UNLOCKLIST, NULL )

#define MoveEntry(window,object,entry,dir)\
        BGUI_DoGadgetMethod( object, window, NULL, LVM_MOVE, NULL,\
                             entry, dir )

#define MoveSelectedEntry(window,object,dir)\
        BGUI_DoGadgetMethod( object, window, NULL, LVM_MOVE, NULL,\
                             NULL, dir )

/*****************************************************************************
 *
 *      Window class method macros.
 */
#define GadgetKey(wobj,gobj,key)\
        DoMethod( wobj, WM_GADGETKEY, NULL, gobj, key )

#define WindowOpen(wobj)\
        ( struct Window * )DoMethod( wobj, WM_OPEN )

#define WindowClose(wobj)\
        DoMethod( wobj, WM_CLOSE )

#define WindowBusy(wobj)\
        DoMethod( wobj, WM_SLEEP )

#define WindowReady(wobj)\
        DoMethod( wobj, WM_WAKEUP )

#define HandleEvent(wobj)\
        DoMethod( wobj, WM_HANDLEIDCMP )

#define DisableMenu(wobj,id,set)\
        DoMethod( wobj, WM_DISABLEMENU, id, set )

#define CheckItem(wobj,id,set)\
        DoMethod( wobj, WM_CHECKITEM, id, set )

#define MenuDisabled(wobj,id)\
        DoMethod( wobj, WM_MENUDISABLED, id )

#define ItemChecked(wobj,id)\
        DoMethod( wobj, WM_ITEMCHECKED, id )

#define GetAppMsg(wobj)\
        ( struct AppMessage * )DoMethod( wobj, WM_GETAPPMSG )

#define AddUpdate(wobj,id,target,map)\
        DoMethod( wobj, WM_ADDUPDATE, id, target, map )

/*****************************************************************************
 *
 *      Commodity class method macros.
 */
#define AddHotkey(broker,desc,id,flags)\
        DoMethod( broker, CM_ADDHOTKEY, desc, id, flags )

#define RemHotkey(broker,id)\
        DoMethod( broker, CM_REMHOTKEY, id )

#define DisableHotkey(broker,id)\
        DoMethod( broker, CM_DISABLEHOTKEY, id )

#define EnableHotKey(broker,id)\
        DoMethod( broker, CM_ENABLEHOTKEY, id )

#define EnableBroker(broker)\
        DoMethod( broker, CM_ENABLEBROKER )

#define DisableBroker(broker)\
        DoMethod( broker, CM_DISABLEBROKER )

#define MsgInfo(broker,type,id,data)\
        DoMethod( broker, CM_MSGINFO,\
                  ( ULONG * )type,\
                  ( ULONG * )id,\
                  ( ULONG * )data )

/*****************************************************************************
 *
 *      FileReq class method macros.
 */
#define DoRequest(object)\
        DoMethod( object, FRM_DOREQUEST )

#endif /* LIBRARIES_BGUI_MACROS_H */
