/* Include pour les objets              */
/* (C) 1992,93 par Christophe PASSUELLO */
/* Thu Feb  4 12:32:48 1993             */


#ifndef EXEC_TYPES_H
#include "exec/types.h"
#endif

#ifndef INTUITION_INTUITION_H
#define  INTUITION_PREFERENCES_H TRUE
#include <intuition/intuition.h>
#endif


/* definition d'une boite */
struct Box
{
  UWORD x, y;
  UWORD w, h;
};

#define COPY_BOX(dest,src) (*((struct Box *)dest))=(*((struct Box *)src))

/* Type de bordure pour Draw3DBox */
#define BOX_1IN   0
#define BOX_1OUT  1
#define BOX_2IN   2
#define BOX_2OUT  3

/* Classes d'objets */
#define CLASS_CYCLE     1
#define CLASS_SCROLLER  2
#define CLASS_BUTTON    3
#define CLASS_INTEGER   4
#define CLASS_STRING    5
#define CLASS_CHECK     6

/* IDCMP flags for the window *
#define IDCMP_CYCLE     GADGETUP
#define IDCMP_CHECK     GADGETDOWN
#define IDCMP_STRING    GADGETDOWN|GADGETUP
#define IDCMP_BUTTON    GADGETDOWN|GADGETUP
#define IDCMP_STRING    GADGETUP
#define IDCMP_INTEGER   GADGETUP
#define IDCMP_SCROLLER  GADGETDOWN|GADGETUP|MOUSEMOVE

struct NewObject
{
  UWORD  LeftEdge, TopEdge;     /* position de l'objet */
  UWORD  Width, Height;         /* taille de l'objet */
  UWORD  Flags;                 /* Flags pour toutes les classes d'objet */
  UWORD  ClassFlags;            /* Flags specialise pour chaque classe */
  STRPTR LabelText;             /* Label de l'objet */
  struct TextAttr *Font;        /* Fonte pour le label et le texte de l'objet */
};


/* Flags pour NewObject.Flags */
#define LABEL_MASK    0x007f    /* position du label par rapport à l'objet */
#define LABEL_ABOVE   0x0001    /* au dessus */
#define LABEL_BELOW   0x0002    /* en dessous */
#define LABEL_RIGHT   0x0004    /* a droite */
#define LABEL_LEFT    0x0008    /* a gauche */
#define LABEL_INSIDE  0x0010    /* a l'interieur */
#define LABEL_HOT_KEY 0x0020    /* Souligne le caractères suivant le '_' */
#define LABEL_PEN2    0x0040    /* Label ecrit avec la couleur Pen2 */

#define OBJ_DISABLED  0x0080    /* Object ghosted (Off) */


struct NewCycle
{
  struct NewObject NewObj;
  STRPTR *TextArray;
};


struct NewButton
{
  struct NewObject NewObj;
};

/* ClassFlags pour les boutons */
#define BT_TOGGLE      0x0001
#define BT_SELECTED    0x0002

struct NewScroller
{
  struct NewObject NewObj;
  UWORD Pos;
  UWORD CurSize;
  UWORD MaxSize;
};

/* ClassFlags pour les scrollers */
#define SC_VERTICAL   0x0001     /* Scroller vertical */
#define SC_NOMOUSE    0x0002     /* pas de FOLLOWMOUSE */


struct NewCheck
{
  struct NewObject NewObj;
};

/* ClassFlags pour les checks */
#define CK_CHECKED    0x0001    /* le check est coche */


struct NewString
{
  struct NewObject NewObj;
  STRPTR Text;
  UWORD  MaxLength;
};


struct NewInteger
{
  struct NewObject NewObj;
};

/* ClassFlags pour les integer et les string */
#define STR_SINGLEBORD  0x0001
#define STR_RIGHT       0x0002
#define STR_CENTER      0x0004


struct NewTextArea
{
  UWORD  LeftEdge, TopEdge;
  UWORD  Width, Height;
  UWORD  Flags;
  UWORD  ClassFlags;
  STRPTR LabelText;
  struct TextAttr *Font;
  UBYTE  FrontPen, BackPen;
  UBYTE  InterLine;
  UBYTE  WrMask;
};

/* flags pour NewTextArea.Flags */
#define LABEL_ABOVE   0x0001    /* au dessus */
#define LABEL_BELOW   0x0002    /* en dessous */
#define LABEL_RIGHT   0x0004    /* a droite */
#define LABEL_LEFT    0x0008    /* a gauche */
#define LABEL_PEN2    0x0040    /* Label ecrit avec la couleur Pen2 */

/* flags pour NewTextArea.ClassFlags */
#define TAF_SMOOTH_SCROLL 1
#define TAF_CLIP_TEXT     2

/* methodes generiques pour les Object */
CPTR FindObjectMsg(struct IntuiMessage *);
UWORD GetObjectID(CPTR);
UBYTE GetHotKey(CPTR);

/* prototypes */
VOID SetIObjectColors(UBYTE, UBYTE, UBYTE, UBYTE, UBYTE);
VOID Draw3DBox(struct Box *, struct RastPort *, UWORD);
VOID AdjustBox(struct Box *, BOOL);
VOID ExitEasyGadget();
BOOL InitEasyGadget();

/* methodes pour les objets */
CPTR CreateCycle(struct NewCycle *, ULONG);
CPTR CreateButton(struct NewButton *, ULONG);
CPTR CreateCheck(struct NewCheck *, ULONG);
CPTR CreateScroller(struct NewScroller *, ULONG);
CPTR CreateInteger(struct NewInteger *, ULONG);
CPTR CreateString(struct NewString *, ULONG);

VOID FreeObject(CPTR);
BOOL SendMsgToObject(CPTR, struct IntuiMessage *);
VOID AddObjectToWindow(CPTR, struct Window *, struct Requester *);
VOID RemoveObjectFromWindow(CPTR);
VOID DisplayObject(CPTR);
VOID EraseObject(CPTR);
VOID ModifyObject(CPTR, ...);
ULONG ObjectValue(CPTR);
/*CPTR CreateObject(struct NewObject *, UWORD, UWORD);*/
VOID ActivateObject(CPTR);
VOID OnObject(CPTR);
VOID OffObject(CPTR);

/* Prototypes pour les TextArea */
CPTR CreateTextArea(struct NewTextArea *, struct RastPort *);
VOID FreeTextArea(CPTR);
VOID SetTextAreaPen(CPTR, UBYTE, UBYTE);
VOID TAPuts(CPTR,char *);
VOID TAPrint(CPTR,char *);
VOID TAPrintf(CPTR,char *, ...);
