/* Project */
#define ProjectDefinition(name) name := CreateTagList(
#define EndProject              TAG_END);
#define WindowTitle(t)          TRWI_Title,(t)
#define ScreenTitle(t)          TRWI_ScreenTitle,(t)
#define WindowID(id)            TRWI_ID,(id)
#define WindowFlags(f)          TRWI_Flags,(f)
#define WindowPosition(pos)     TRWI_Position,(pos)
#define WindowUnderscore(und)   TRWI_Underscore,(und)
#define WindowDimensions(dim)   TRWI_Dimensions,(dim)
#define WindowBackfillWin       TRWI_Backfill,TRBF_WINDOWBACK
#define WindowBackfillReq       TRWI_Backfill,TRBF_REQUESTERBACK
#define WindowBackfillNone      TRWI_Backfill,TRBF_NONE
#define WindowBackfillS         TRWI_Backfill,TRBF_SHINE
#define WindowBackfillSA        TRWI_Backfill,TRBF_SHINE_SHADOW
#define WindowBackfillSF        TRWI_Backfill,TRBF_SHINE_FILL
#define WindowBackfillSB        TRWI_Backfill,TRBF_SHINE_BACKGROUND
#define WindowBackfillA         TRWI_Backfill,TRBF_SHADOW
#define WindowBackfillAF        TRWI_Backfill,TRBF_SHADOW_FILL
#define WindowBackfillAB        TRWI_Backfill,TRBF_SHADOW_BACKGROUND
#define WindowBackfillF         TRWI_Backfill,TRBF_FILL
#define WindowBackfillFB        TRWI_Backfill,TRBF_FILL_BACKGROUND
#define CustomScreen(scr)       TRWI_CustomScreen,((scr))
#define PubScreen(scr)          TRWI_PubScreen,((scr))
#define PubScreenName(name)     TRWI_PubScreenName,((name))
#define QuickHelpOn(on)         TRWI_QuickHelp,((on))

/* Menus */
#define BeginMenu(t)            TRMN_Title,(t)
#define MenuFlags(f)            TRMN_Flags,(f)
#define MenuItem(t,id)          TRMN_Item,(t),TRAT_ID,id
#define MenuItemC(t,id)         TRMN_Item,(t),TRMN_Flags,TRMF_CHECKIT,TRAT_ID,id
#define MenuItemCC(t,id)        TRMN_Item,(t),TRMN_Flags,TRMF_CHECKED,TRAT_ID,id
#define BeginSub(t)             TRMN_Item,(t)
#define MenuItemD(t,id)         TRMN_Item,(t),MenuFlags(TRMF_DISABLED),TRAT_ID,id
#define SubItem(t,id)           TRMN_Sub,(t),TRAT_ID,id
#define SubItemD(t,id)          TRMN_Sub,(t),MenuFlags(TRMF_DISABLED),TRAT_ID,id
#define ItemBarlabel            TRMN_Item,TRMN_BARLABEL
#define SubBarlabel             TRMN_Sub,TRMN_BARLABEL

/* Groups */
#define HorizGroup              TRGR_Horiz,0
#define HorizGroupE             TRGR_Horiz,TRGR_EQUALSHARE
#define HorizGroupS             TRGR_Horiz,TRGR_PROPSPACES
#define HorizGroupA             TRGR_Horiz,TRGR_ALIGN
#define HorizGroupEA            TRGR_Horiz,TRGR_EQUALSHARE + TRGR_ALIGN
#define HorizGroupSA            TRGR_Horiz,TRGR_PROPSPACES + TRGR_ALIGN
#define HorizGroupC             TRGR_Horiz,TRGR_CENTER
#define HorizGroupEC            TRGR_Horiz,TRGR_EQUALSHARE + TRGR_CENTER
#define HorizGroupSC            TRGR_Horiz,TRGR_PROPSPACES + TRGR_CENTER
#define HorizGroupAC            TRGR_Horiz,TRGR_ALIGN + TRGR_CENTER
#define HorizGroupEAC           TRGR_Horiz,TRGR_EQUALSHARE + TRGR_ALIGN + TRGR_CENTER
#define HorizGroupSAC           TRGR_Horiz,TRGR_PROPSPACES + TRGR_ALIGN + TRGR_CENTER
#define VertGroup               TRGR_Vert,0
#define VertGroupE              TRGR_Vert,TRGR_EQUALSHARE
#define VertGroupS              TRGR_Vert,TRGR_PROPSPACES
#define VertGroupA              TRGR_Vert,TRGR_ALIGN
#define VertGroupEA             TRGR_Vert,TRGR_EQUALSHARE + TRGR_ALIGN
#define VertGroupSA             TRGR_Vert,TRGR_PROPSPACES + TRGR_ALIGN
#define VertGroupC              TRGR_Vert,TRGR_CENTER
#define VertGroupEC             TRGR_Vert,TRGR_EQUALSHARE + TRGR_CENTER
#define VertGroupSC             TRGR_Vert,TRGR_PROPSPACES + TRGR_CENTER
#define VertGroupAC             TRGR_Vert,TRGR_ALIGN + TRGR_CENTER
#define VertGroupEAC            TRGR_Vert,TRGR_EQUALSHARE + TRGR_ALIGN + TRGR_CENTER
#define VertGroupSAC            TRGR_Vert,TRGR_PROPSPACES + TRGR_ALIGN + TRGR_CENTER
#define EndGroup                TRGR_End,0
#define ColumnArray             TRGR_Horiz,TRGR_ARRAY + TRGR_ALIGN + TRGR_CENTER
#define LineArray               TRGR_Vert,TRGR_ARRAY + TRGR_ALIGN + TRGR_CENTER
#define BeginColumn             TRGR_Vert,TRGR_PROPSHARE + TRGR_ALIGN + TRGR_CENTER
#define BeginLine               TRGR_Horiz,TRGR_PROPSHARE + TRGR_ALIGN + TRGR_CENTER
#define BeginColumnI            TRGR_Vert,TRGR_PROPSHARE + TRGR_ALIGN + TRGR_CENTER + TRGR_INDEP
#define BeginLineI              TRGR_Horiz,TRGR_PROPSHARE + TRGR_ALIGN + TRGR_CENTER + TRGR_INDEP
#define EndColumn               EndGroup
#define EndLine                 EndGroup
#define EndArray                EndGroup

/* DisplayObject */
#define QuickHelp(str)          TRDO_QuickHelpString,((str))

/* Space */
#define SpaceB                  TROB_Space,TRST_BIG
#define Space                   TROB_Space,TRST_NORMAL
#define SpaceS                  TROB_Space,TRST_SMALL
#define SpaceN                  TROB_Space,TRST_NONE

/* Text */
#define TextN(text)             TROB_Text,0,TRAT_Text,text
#define TextH(text)             TROB_Text,0,TRAT_Text,text,TRAT_Flags,TRTX_HIGHLIGHT
#define Text3(text)             TROB_Text,0,TRAT_Text,text,TRAT_Flags,TRTX_3D
#define TextB(text)             TROB_Text,0,TRAT_Text,text,TRAT_Flags,TRTX_BOLD
#define TextT(text)             TROB_Text,0,TRAT_Text,text,TRAT_Flags,TRTX_TITLE
#define TextID(text,id)         TROB_Text,0,TRAT_Text,text,TRAT_ID,id
#define TextNR(t)               TextN(t),TRAT_Flags,TROF_RIGHTALIGN
#define ClippedText(t)          TextN(t),TRAT_Flags,TRTX_CLIPPED + TRTX_NOUNDERSCORE
#define ClippedTextID(t,id)     TextN(t),TRAT_Flags,TRTX_CLIPPED + TRTX_NOUNDERSCORE,TRAT_ID,id
#define CenteredText(text)      HorizGroupSC,Space,TextN(text),Space,EndGroup
#define CenteredTextH(text)     HorizGroupSC,Space,TextH(text),Space,EndGroup
#define CenteredText3(text)     HorizGroupSC,Space,Text3(text),Space,EndGroup
#define CenteredTextB(text)     HorizGroupSC,Space,TextB(text),Space,EndGroup
#define CenteredTextID(text,id) HorizGroupSC,Space,TextID(text,id),Space,EndGroup
#define CenteredText_BS(text)   HorizGroupSC,SpaceB,TextN(text),SpaceB,EndGroup
#define TextBox(text,id,mwid)   _TextBox, ObjectBackfillB, VertGroup, SpaceS, HorizGroupSC, Space, TextN(text),TRAT_ID,id,TRAT_MinWidth,mwid, Space, EndGroup, SpaceS, EndGroup
#define ClippedTextBox(text,id) _TextBox, ObjectBackfillB, VertGroupAC, SpaceS, HorizGroupAC, Space, ClippedTextID(text,id), Space, EndGroup, SpaceS, EndGroup
#define ClippedTextBoxMW(text,id,mwid) _TextBox, ObjectBackfillB, VertGroupAC, SpaceS, HorizGroupAC, Space, ClippedTextID(text,id),TRAT_MinWidth,mwid, Space, EndGroup, SpaceS, EndGroup
#define TextRIGHT(t,id)         HorizGroupS, Space, TextN(t), ID(id), EndGroup
#define Integer(i)              TROB_Text,0,TRAT_Value,(i)
#define IntegerH(i)             TROB_Text,0,TRAT_Value,(i),TRAT_Flags,TRTX_HIGHLIGHT
#define Integer3(i)             TROB_Text,0,TRAT_Value,(i),TRAT_Flags,TRTX_3D
#define IntegerB(i)             TROB_Text,0,TRAT_Value,(i),TRAT_Flags,TRTX_BOLD
#define CenteredInteger(i)      HorizGroupSC,Space,Integer(i),Space,EndGroup
#define CenteredIntegerH(i)     HorizGroupSC,Space,IntegerH(i),Space,EndGroup
#define CenteredInteger3(i)     HorizGroupSC,Space,Integer3(i),Space,EndGroup
#define CenteredIntegerB(i)     HorizGroupSC,Space,IntegerB(i),Space,EndGroup
#define IntegerBox(def,id,mwid) GroupBox, ObjectBackfillB, VertGroup, SpaceS, HorizGroupSC, Space, Integer(def),TRAT_ID,id,TRAT_MinWidth,mwid, Space, EndGroup, SpaceS, EndGroup

/* Button */
#define Button(text,id)         TROB_Button,0,TRAT_Text,(text),TRAT_ID,(id)
#define ButtonR(text,id)        TROB_Button,0,TRAT_Text,(text),TRAT_ID,(id),TRAT_Flags,TRBU_RETURNOK
#define ButtonE(text,id)        TROB_Button,0,TRAT_Text,(text),TRAT_ID,(id),TRAT_Flags,TRBU_ESCOK
#define ButtonRE(text,id)       TROB_Button,0,TRAT_Text,(text),TRAT_ID,(id),TRAT_Flags,TRBU_RETURNOK + TRBU_ESCOK
#define CenteredButton(t,i)     HorizGroupSC,Space,TROB_Button,0,TRAT_Text,(t),TRAT_ID,(i),Space,EndGroup
#define CenteredButtonR(t,i)    HorizGroupSC,Space,TROB_Button,0,TRAT_Flags,TRBU_RETURNOK,TRAT_Text,(t),TRAT_ID,(i),Space,EndGroup
#define CenteredButtonE(t,i)    HorizGroupSC,Space,TROB_Button,0,TRAT_Flags,TRBU_ESCOK,TRAT_Text,(t),TRAT_ID,(i),Space,EndGroup
#define CenteredButtonRE(t,i)   HorizGroupSC,Space,TROB_Button,0,TRAT_Flags,TRBU_RETURNOK + TRBU_ESCOK,TRAT_Text,(t),TRAT_ID,(i),Space,EndGroup
#define EmptyButton(id)         TROB_Button,0,TRAT_Text,"",TRAT_ID,(id)
#define GetFileButton(id)       TROB_Button,TRBT_GETFILE,TRAT_Text,"",TRAT_ID,(id),TRAT_Flags,TRBU_YRESIZE
#define GetDrawerButton(id)     TROB_Button,TRBT_GETDRAWER,TRAT_Text,"",TRAT_ID,(id),TRAT_Flags,TRBU_YRESIZE
#define GetEntryButton(id)      TROB_Button,TRBT_GETENTRY,TRAT_Text,"",TRAT_ID,(id),TRAT_Flags,TRBU_YRESIZE
#define GetFileButtonS(s,id)    TROB_Button,TRBT_GETFILE,TRAT_Text,(s),TRAT_ID,(id),TRAT_Flags,TRBU_YRESIZE
#define GetDrawerButtonS(s,id)  TROB_Button,TRBT_GETDRAWER,TRAT_Text,(s),TRAT_ID,(id),TRAT_Flags,TRBU_YRESIZE
#define GetEntryButtonS(s,id)   TROB_Button,TRBT_GETENTRY,TRAT_Text,(s),TRAT_ID,(id),TRAT_Flags,TRBU_YRESIZE

/* Line */
#define Line(flags)             TROB_Line,flags
#define HorizSeparator          HorizGroupEC,Space,Line(TROF_HORIZ),Space,EndGroup
#define VertSeparator           VertGroupEC,Space,Line(TROF_VERT),Space,EndGroup
#define NamedSeparator(text)    HorizGroupEC,Space,Line(TROF_HORIZ),Space,TextT(text),Space,Line(TROF_HORIZ),Space,EndGroup
#define NamedSeparatorI(te,id)  HorizGroupEC,Space,Line(TROF_HORIZ),Space,TextT(te),TRAT_ID,id,Space,Line(TROF_HORIZ),Space,EndGroup
#define NamedSeparatorN(text)   HorizGroupEC,Line(TROF_HORIZ),Space,TextT(text),Space,Line(TROF_HORIZ),EndGroup
#define NamedSeparatorIN(te,id) HorizGroupEC,Line(TROF_HORIZ),Space,TextT(te),TRAT_ID,id,Space,Line(TROF_HORIZ),EndGroup

/* FrameBox */
#define GroupBox                TROB_FrameBox,TRFB_GROUPING
#define NamedFrameBox(t)        TROB_FrameBox,TRFB_FRAMING,TRAT_Text,(t)
#define _TextBox                TROB_FrameBox,TRFB_TEXT

/* DropBox */
#define DropBox(id)             TROB_DropBox,0,TRAT_ID,(id)

/* CheckBox gadget */
#define CheckBox(id)            TROB_CheckBox,0,TRAT_ID,id
#define CheckBoxC(id)           TROB_CheckBox,0,TRAT_ID,id,TRAT_Value,TRUE
#define CheckBoxLEFT(id)        HorizGroupS, CheckBox(id), Space, EndGroup
#define CheckBoxCLEFT(id)       HorizGroupS, CheckBoxC(id), Space, EndGroup

/* String gadget */
#define StringGadget(def,id)    TROB_String,def,TRAT_ID,(id)
#define PasswordGadget(def,id)  TROB_String,def,TRAT_ID,(id),TRAT_Flags,TRST_INVISIBLE

/* Cycle gadget */
#define CycleGadget(ent,val,id) TROB_Cycle,ent,TRAT_ID,(id),TRAT_Value,(val)
#define MXGadget(ent,val,id)    TROB_Cycle,ent,TRAT_ID,(id),TRAT_Value,(val),TRAT_Flags,TRCY_MX
#define MXGadgetR(ent,val,id)   TROB_Cycle,ent,TRAT_ID,(id),TRAT_Value,(val),TRAT_Flags,TRCY_MX + TRCY_RIGHTLABELS

/* Slider gadget */
#define SliderGadget(mini,maxi,val,id) TROB_Slider,0,TRSL_Min,(mini),TRSL_Max,(maxi),TRAT_ID,(id),TRAT_Value,(val)

/* Palette gadget */
#define PaletteGadget(val,id)   TROB_Palette,0,TRAT_ID,(id),TRAT_Value,(val)

/* Listview gadget */
#define ListRO(ent,id,top)      TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_READONLY,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define ListSel(ent,id,top)     TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_SELECT,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define ListSS(e,id,top,v)      TROB_Listview,(e),TRAT_Flags,TRLV_NOGAP + TRLV_SHOWSELECTED,TRAT_ID,id,TRAT_Value,v,TRLV_Top,top
#define ListROC(ent,id,top)     TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_READONLY + TRLV_NOCURSORKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define ListSelC(ent,id,top)    TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_SELECT + TRLV_NOCURSORKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define ListSSC(e,id,top,v)     TROB_Listview,(e),TRAT_Flags,TRLV_NOGAP + TRLV_SHOWSELECTED + TRLV_NOCURSORKEYS,TRAT_ID,id,TRAT_Value,v,TRLV_Top,top
#define ListRON(ent,id,top)     TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_READONLY + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define ListSelN(ent,id,top)    TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_SELECT + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define ListSSN(e,id,top,v)     TROB_Listview,(e),TRAT_Flags,TRLV_NOGAP + TRLV_SHOWSELECTED + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,v,TRLV_Top,top
#define ListROCN(ent,id,top)    TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_READONLY + TRLV_NOCURSORKEYS + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define ListSelCN(ent,id,top)   TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_SELECT + TRLV_NOCURSORKEYS + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define ListSSCN(e,id,top,v)    TROB_Listview,(e),TRAT_Flags,TRLV_NOGAP + TRLV_SHOWSELECTED + TRLV_NOCURSORKEYS + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,v,TRLV_Top,top

#define FWListRO(ent,id,top)    TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_READONLY,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define FWListSel(ent,id,top)   TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_SELECT,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define FWListSS(e,id,top,v)    TROB_Listview,(e),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_SHOWSELECTED,TRAT_ID,id,TRAT_Value,v,TRLV_Top,top
#define FWListROC(ent,id,top)   TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_READONLY + TRLV_NOCURSORKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define FWListSelC(ent,id,top)  TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_SELECT + TRLV_NOCURSORKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define FWListSSC(e,id,top,v)   TROB_Listview,(e),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_SHOWSELECTED + TRLV_NOCURSORKEYS,TRAT_ID,id,TRAT_Value,v,TRLV_Top,top
#define FWListRON(ent,id,top)   TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_READONLY + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define FWListSelN(ent,id,top)  TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_SELECT + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define FWListSSN(e,id,top,v)   TROB_Listview,(e),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_SHOWSELECTED + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,v,TRLV_Top,top
#define FWListROCN(ent,id,top)  TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_READONLY + TRLV_NOCURSORKEYS + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define FWListSelCN(ent,id,top) TROB_Listview,(ent),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_SELECT + TRLV_NOCURSORKEYS + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,0,TRLV_Top,top
#define FWListSSCN(e,id,top,v)  TROB_Listview,(e),TRAT_Flags,TRLV_NOGAP + TRLV_FWFONT + TRLV_SHOWSELECTED + TRLV_NOCURSORKEYS + TRLV_NONUMPADKEYS,TRAT_ID,id,TRAT_Value,v,TRLV_Top,top

/* Progress indicator */
#define Progress(maxi,val,id)   TROB_Progress,(maxi),TRAT_ID,(id),TRAT_Value,(val)

/* Image */
#define BoopsiImage(img)        TROB_Image,(img),TRAT_Flags,TRIM_BOOPSI
#define BoopsiImageD(img,mw,mh) TROB_Image,(img),TRAT_MinWidth,(mw),TRAT_MinHeight,(mh),TRAT_Flags,TRIM_BOOPSI

/* Attributes */
#define ID(id)                  TRAT_ID,id
#define Disabled                TRAT_Disabled,TRUE
#define ObjectBackfillWin       TRAT_Backfill,TRBF_WINDOWBACK
#define ObjectBackfillReq       TRAT_Backfill,TRBF_REQUESTERBACK
#define ObjectBackfillB         TRAT_Backfill,TRBF_NONE
#define ObjectBackfillS         TRAT_Backfill,TRBF_SHINE
#define ObjectBackfillSA        TRAT_Backfill,TRBF_SHINE_SHADOW
#define ObjectBackfillSF        TRAT_Backfill,TRBF_SHINE_FILL
#define ObjectBackfillSB        TRAT_Backfill,TRBF_SHINE_BACKGROUND
#define ObjectBackfillA         TRAT_Backfill,TRBF_SHADOW
#define ObjectBackfillAF        TRAT_Backfill,TRBF_SHADOW_FILL
#define ObjectBackfillAB        TRAT_Backfill,TRBF_SHADOW_BACKGROUND
#define ObjectBackfillF         TRAT_Backfill,TRBF_FILL
#define ObjectBackfillFB        TRAT_Backfill,TRBF_FILL_BACKGROUND

/* Requester support */
#define BeginRequester(t,p)     WindowTitle(t),WindowPosition(p),WindowBackfillReq,\
                                WindowFlags(TRWF_NOZIPGADGET + TRWF_NOSIZEGADGET + TRWF_NOCLOSEGADGET + TRWF_NODELZIP + TRWF_NOESCCLOSE),\
                                VertGroupA,Space,HorizGroupA,Space,GroupBox,ObjectBackfillB
#define BeginRequesterGads      Space,EndGroup,Space
#define EndRequester            Space,EndGroup,EndProject



