#ifndef LIBRARIES_GADTOOLS_H
#define LIBRARIES_GADTOOLS_H

/*******************************************************************
 pOS / Amiga adapt
*******************************************************************/

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif
#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif
#ifndef INTUITION_INTUITION_H
#include <intuition/intuition.h>
#endif

#ifndef __INC_POS_PINTUI_TAGS_H
#include <pIntui/Tags.h>
#endif
#ifndef __INC_POS_PGADGET_GADGET_H
#include <pGadget/Gadget.h>
#endif


#define GENERIC_KIND    0
#define BUTTON_KIND     1
#define CHECKBOX_KIND   2
#define INTEGER_KIND    3
#define LISTVIEW_KIND   4
#define MX_KIND         5
#define NUMBER_KIND     6
#define CYCLE_KIND      7
#define PALETTE_KIND    8
#define SCROLLER_KIND   9
#define SLIDER_KIND     11
#define STRING_KIND     12
#define TEXT_KIND       13

#define NUM_KINDS       14

#define ARROWIDCMP      (IDCMP_GADGETUP | IDCMP_GADGETDOWN |\
        IDCMP_INTUITICKS | IDCMP_MOUSEBUTTONS)

#define BUTTONIDCMP     (IDCMP_GADGETUP)
#define CHECKBOXIDCMP   (IDCMP_GADGETUP)
#define INTEGERIDCMP    (IDCMP_GADGETUP)
#define LISTVIEWIDCMP   (IDCMP_GADGETUP | IDCMP_GADGETDOWN |\
        IDCMP_MOUSEMOVE | ARROWIDCMP)

#define MXIDCMP         (IDCMP_GADGETDOWN)
#define NUMBERIDCMP     (0L)
#define CYCLEIDCMP      (IDCMP_GADGETUP)
#define PALETTEIDCMP    (IDCMP_GADGETUP)

/* Use ARROWIDCMP|SCROLLERIDCMP if your scrollers have arrows: */
#define SCROLLERIDCMP   (IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE)
#define SLIDERIDCMP     (IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEMOVE)
#define STRINGIDCMP     (IDCMP_GADGETUP)

#define TEXTIDCMP       (0L)

struct NewGadget
{
  WORD   ng_LeftEdge, ng_TopEdge;
  WORD   ng_Width, ng_Height;
  UBYTE *ng_GadgetText;
  struct TextAttr *ng_TextAttr;
  UWORD  ng_GadgetID;
  ULONG  ng_Flags;
  APTR   ng_VisualInfo;
  APTR   ng_UserData;
};



struct NewMenu
{
  UBYTE           nm_Type;
/**  UBYTE        nm_Pad;     kompatibel **/
  CHAR           *nm_Label;
  CHAR           *nm_CommKey;
  UWORD           nm_Flags;
  ULONG           nm_MutualExclude;
  APTR            nm_UserData;
  UBYTE           nm_Reserved[16];
  struct TagItem *nm_Tags;
};

/*#define MENU_IMAGE    128 */

#define NM_TITLE        MENUTAGTYP_Title
#define NM_ITEM         MENUTAGTYP_Item
#define NM_SUB          MENUTAGTYP_Sub

/*#define IM_ITEM               (NM_ITEM|MENU_IMAGE)    /* Graphical menu item */ */
/*#define IM_SUB                (NM_SUB|MENU_IMAGE)     /* Graphical menu sub-item */ */

#define NM_END      MENUTAGTYP_End
#define NM_IGNORE   0x40
#define NM_BARLABEL ((CHAR*)~0)

#define NM_MENUDISABLED  0x10
#define NM_ITEMDISABLED  0x20

/*#define NM_COMMANDSTRING COMMSEQ */

/*#define NM_FLAGMASK   (~(COMMSEQ | ITEMTEXT | HIGHFLAGS)) */
/*#define NM_FLAGMASK_V39       (~(ITEMTEXT | HIGHFLAGS)) */

#define GTMENU_USERDATA(menu)         ( (APTR) ((struct pOS_MenuItem*)menu)->mi_UserData[0] )
#define GTMENUITEM_USERDATA(menuitem) ( (APTR) ((struct pOS_MenuItem*)menuitem)->mi_UserData[0] )

/*#define MENU_USERDATA(menuitem) (* ( (APTR *)(menuitem+1) ) ) */

#define GTMENU_TRIMMED  0x00000001
#define GTMENU_INVALID  0x00000002
#define GTMENU_NOMEM    0x00000003







#define MX_WIDTH        17
#define MX_HEIGHT       9

#define CHECKBOX_WIDTH  26
#define CHECKBOX_HEIGHT 11

/*#define GT_TagBase         TAG_USER + 0x80000 */

#define GTVI_NewWindow     _PxA_IGNORE
#define GTVI_NWTags        _PxA_IGNORE
#define GTCB_Checked       _PxA_IGNORE
#define GTLV_Top           _PxA_IGNORE
#define GTLV_Labels        _PxA_IGNORE
#define GTLV_ReadOnly      _PxA_IGNORE
#define GTLV_ScrollWidth   _PxA_IGNORE
#define GTMX_Labels        _PxA_IGNORE
#define GTMX_Active        _PxA_IGNORE
#define GTTX_Text          _PxA_IGNORE
#define GTTX_CopyText      _PxA_IGNORE
#define GTNM_Number        _PxA_IGNORE
#define GTCY_Labels          _PxA_IGNORE
#define GTCY_Active          _PxA_IGNORE
#define GTPA_Depth           _PxA_IGNORE
#define GTPA_Color           _PxA_IGNORE
#define GTPA_ColorOffset     _PxA_IGNORE
#define GTPA_IndicatorWidth  _PxA_IGNORE
#define GTPA_IndicatorHeight _PxA_IGNORE
#define GTSC_Top             _PxA_IGNORE
#define GTSC_Total           _PxA_IGNORE
#define GTSC_Visible         _PxA_IGNORE
#define GTSC_Overlap         _PxA_IGNORE
#define GTSL_Min             _PxA_IGNORE
#define GTSL_Max             _PxA_IGNORE
#define GTSL_Level           _PxA_IGNORE
#define GTSL_MaxLevelLen     _PxA_IGNORE
#define GTSL_LevelFormat     _PxA_IGNORE
#define GTSL_LevelPlace      _PxA_IGNORE
#define GTSL_DispFunc        _PxA_IGNORE

#define GTST_String          STRGADTAG_String
#define GTST_MaxChars        STRGADTAG_MaxChars

#define GTIN_Number          STRGADTAG_Integer
#define GTIN_MaxChars        STRGADTAG_MaxChars

#define GTMN_TextAttr        IOBJTAG_TextAttr
#define GTMN_FrontPen        IOBJTAG_FGPen

#define GTBB_Recessed        ICLTAG_GadBorderType
#define GT_VisualInfo        ICLTAG_DrawInfo

#define GTLV_ShowSelected    _PxA_IGNORE
#define GTLV_Selected        _PxA_IGNORE
#define GTTX_Border          _PxA_IGNORE
#define GTNM_Border          _PxA_IGNORE
#define GTSC_Arrows          _PxA_IGNORE
#define GTMN_Menu            _PxA_IGNORE
#define GTMX_Spacing         _PxA_IGNORE
#define GTMN_FullMenu        _PxA_IGNORE
#define GTMN_SecondaryError  _PxA_IGNORE

#define GT_Underscore        IOBJTAG_Underscore

#define GTST_EditHook        _PxA_IGNORE
#define GTIN_EditHook        _PxA_IGNORE
#define GTMN_Checkmark       _PxA_IGNORE
#define GTMN_AmigaKey        _PxA_IGNORE
#define GTMN_NewLookMenus    TAG_IGNORE

#define GTCB_Scaled          _PxA_IGNORE
#define GTMX_Scaled          _PxA_IGNORE
#define GTPA_NumColors       _PxA_IGNORE
#define GTMX_TitlePlace      _PxA_IGNORE
#define GTTX_FrontPen        _PxA_IGNORE
#define GTTX_BackPen         _PxA_IGNORE
#define GTTX_Justification   _PxA_IGNORE
#define GTNM_FrontPen        _PxA_IGNORE
#define GTNM_BackPen         _PxA_IGNORE
#define GTNM_Justification   _PxA_IGNORE
#define GTNM_Format          _PxA_IGNORE
#define GTNM_MaxNumberLen    _PxA_IGNORE
#define GTBB_FrameType       _PxA_IGNORE
#define GTLV_MakeVisible     _PxA_IGNORE
#define GTLV_ItemHeight      _PxA_IGNORE
#define GTSL_MaxPixelLen     _PxA_IGNORE
#define GTSL_Justification   _PxA_IGNORE
#define GTPA_ColorTable      _PxA_IGNORE
#define GTLV_CallBack        _PxA_IGNORE
#define GTLV_MaxPen          _PxA_IGNORE
#define GTTX_Clipped         _PxA_IGNORE
#define GTNM_Clipped         _PxA_IGNORE


#define INTERWIDTH      8
#define INTERHEIGHT     4

#define NWAY_KIND       CYCLE_KIND
#define NWAYIDCMP       CYCLEIDCMP
#define GTNW_Labels     GTCY_Labels
#define GTNW_Active     GTCY_Active









#ifdef __IGNORE_NOT_SUPPORTED__

 #define PLACETEXT_LEFT  0x0001
 #define PLACETEXT_RIGHT 0x0002
 #define PLACETEXT_ABOVE 0x0004
 #define PLACETEXT_BELOW 0x0008
 #define PLACETEXT_IN    0x0010

 #define NG_HIGHLABEL    0x0020

 #define LV_DRAW       0

 #define LVCB_OK       0
 #define LVCB_UNKNOWN  0

 #define LVR_NORMAL            0
 #define LVR_SELECTED          0
 #define LVR_NORMALDISABLED    0
 #define LVR_SELECTEDDISABLED  0

 struct LVDrawMsg
 {
     ULONG             lvdm_MethodID;
     struct RastPort  *lvdm_RastPort;
     struct DrawInfo  *lvdm_DrawInfo;
     struct Rectangle  lvdm_Bounds;
     ULONG             lvdm_State;
 };

 #define GTJ_LEFT   0
 #define GTJ_RIGHT  1
 #define GTJ_CENTER 2

 #define BBFT_BUTTON      GADBORTYP_BevelUpBox
 #define BBFT_RIDGE       GADBORTYP_BevelUpBox
 #define BBFT_ICONDROPBOX GADBORTYP_BevelUpBox


#endif /** __IGNORE_NOT_SUPPORTED__ **/



#endif /* LIBRARIES_GADTOOLS_H */
