#ifndef DESKTOP_DESKTOP_H
#define DESKTOP_DESKTOP_H TRUE

/*
**  $VER: desktop.h V1.0
**
**  Desktop Definitions.
**
**  (C) Copyright 1996-1998 DreamWorld Productions.
**      All Rights Reserved.
*/

#ifndef DPKERNEL_H
#include <dpkernel/dpkernel.h>
#endif

/***************************************************************************
** Desktop object.
*/

#define TAGS_DESKTOP ((ID_SPCTAGS<<16)|ID_DESKTOP)
#define VER_DESKTOP  1

typedef struct Desktop {
  struct Head    Head;       /* 00 [--] Standard header structure */
  struct MenuBar *MenuBar;   /* 12 [--] Only 1 menu bar is allowed */
  struct Bob     *Pointer;   /* 16 [--] The pointer for this desktop */
  struct GScreen *Screen;    /* 20 [--] The Screen that is owned by the Desktop */
  struct Chain   *Icons;     /* 24 [--] First icon on the chain */
  struct Chain   *Windows;   /* 28 [--] First window on the chain */
  struct Chain   *Children;  /* 32 [--] All the other children inside the desktop */
  LONG   Gadgets;            /* 36 [--] Gadget flags */
  struct Bob     *Wallpaper; /* 40 [--] Bob to use as wall paper */
  LONG   Flags;

  /*** Private fields ***/

  struct Bob *prvPointer;
  struct Bob *prvWallpaper;
} DESKTOP;

#define DSA_MenuBar   (TAPTR|12)
#define DSA_Pointer   (TAPTR|16)
#define DSA_Gadgets   (TLONG|36)
#define DSA_Wallpaper (TAPTR|40)

#define DSA_MenuBarTags   (TSTEPIN|TTRIGGER|12)
#define DSA_PointerTags   (TSTEPIN|TTRIGGER|16)
#define DSA_GadgetsTags   (TSTEPIN|TTRIGGER|36)
#define DSA_WallpaperTags (TSTEPIN|TTRIGGER|40)

/**************************************************************************/

#define GDF_CLOSE 0x00000001
#define GDF_FLIP  0x00000002

#define DSF_Tile 0x00000001

/***************************************************************************
** This is the Chain object.  The advantage of an object chain is that
** it allows you to link up lots of objects that you don't know anything
** about chaining.
*/

#define VER_CHAIN  1
#define TAGS_CHAIN ((ID_SPCTAGS<<16)|ID_CHAIN)

typedef struct Chain {
  struct Head *Stats;      /* 00 Standard header */
  struct Chain *Next;      /* 12 Next chain object */
  struct Chain *Prev;      /* 16 Previous chain object */
  APTR Object;             /* 20 Pointer to the object belonging to this node */
} CHAIN;

#define CNA_Next   (TAPTR|12)
#define CNA_Prev   (TAPTR|16)
#define CNA_Object (TAPTR|20)

/***************************************************************************
** These are Window gadgets, the Window class holds pointers to them
** privately.  Since they are standard DPK objects, you can enhance them,
** add animations to gadgets etc...
*/

struct GadClose {
  struct Head Head;    /* Standard header structure */
  struct Bob  *Image;  /* Gadget Image (Bob) */
};

struct GadIconify {
  struct Head *Stats;  /* Standard header structure */
  struct Bob *Image;   /* Gadget Image (Bob) */
};


struct GadMaximise {
  struct Head *Stats;  /* Standard header structure */
  struct Bob *Image;   /* Gadget Image (Bob) */
};

struct GadResize {
  struct Head *Stats;  /* Standard header structure */
  struct Bob *Image;   /* Gadget Image (Bob) */
};

/***************************************************************************
** Font.
*/

#define TAGS_FONT ((ID_SPCTAGS<<16)|ID_FONT)
#define VER_FONT  1

typedef struct Font {
  struct Head Head;   /* Standard header structure */
  BYTE   *FontName;   /* Name from the fonts directory */
  LONG   Flags;       /* */
  WORD   Size;        /* What point font */
  LONG   RGBColour;   /* Colour of the font */
} FONT;

#define FNT_BOLD    0x00000001
#define FNT_ITALICS 0x00000002
#define FNT_SMOOTH  0x00000004

/***************************************************************************
** Icon.
*/

#define TAGS_ICON ((ID_SPCTAGS<<16)|ID_ICON)
#define VER_ICON  1

typedef struct Icon {
  struct Head Head;   /* Standard header structure */
  struct Bob  *Image; /* The drawable part of the icon */
  struct Font *Font;  /* What font should we use to print the name [O] */
  BYTE   *Name;       /* The name to appear under the image */
} ICON;

#endif /* DESKTOP_DESKTOP_H */
