#ifndef MPMG_H
#define MPMG_H 1

//****************
//
// Name : MPMG.H
//
//****************


//******** Header files

#ifndef MPMG_CLASS_H
#include "MPMGClass.h"
#endif

#ifndef INTUITION_INTUITION_H
#include <intuition/intuition.h>
#endif

#ifndef GRAPHICS_GFX_H
#include <graphics/gfx.h>
#endif


//******** Structure Definitions

#define MIT_LABEL   0
#define MIT_ITEM    1
#define MIT_MENU    2
#define MIT_PROM    3
#define MIT_PROMR   4
#define MIT_PROMH   5

#define ITEM_IS_LABEL(x) (x->Type == MIT_LABEL)
#define ITEM_IS_ITEM(x)  (x->Type == MIT_ITEM)
#define ITEM_IS_MENU(x)  (x->Type == MIT_MENU)
#define ITEM_IS_PROM(x)  (x->Type == MIT_PROM)
#define ITEM_IS_PROMR(x) (x->Type == MIT_PROMR)
#define ITEM_IS_PROMH(x) (x->Type == MIT_PROMH)
#define ITEM_IS_PROMT(x) (ITEM_IS_PROM(x) || ITEM_IS_PROMR(x) || ITEM_IS_PROMH(x)  )

#define NOACTIVE    65535
#define MENU_HAS_ACTIVE(x)  (x->Active!=NOACTIVE)


typedef struct {
  struct Node  Node;
  void        *SubMenu;
  struct GrNode *Icon;
  ULONG        NumChars;
  ULONG        Flags;
  APTR         UserData;
  UWORD        Code;
  UBYTE        Type;
} MPMMItem;


typedef struct {
  struct Node    Node;      // For ActiveMenus list
  struct List    Labels;    // List of items in menu
  MPMMItem      *ActiveNode;
  struct Window *mwin;      // Window
  UWORD          GutterLeft;
  UWORD          Count;     // Number of items in list
  UWORD          Active;    // Currently active item in list
  UWORD          ItemHeight;
  UWORD          FitsItems;
} MPMMData;


typedef struct {
  // Main data
  MPMMData   *MainMenu;     // First/Main Menu
  struct List ActiveMenus;  // Open Menus

  // For rendering. (Public)
  struct  TextFont *Font;   // Text font
  struct  Image *FrameImage;// Frame image for Gadget
  STRPTR  GadgetText;
  UWORD   MinWidth;         // Minimum width of a menu
  UWORD   MenuOverlap;
  UWORD   MenuDelay;

  // For rendering. (Private)
  UWORD   FitsItems;        // How many menu items can fit on screen?
  UWORD   ItemHeight;       // Font height + spacing
  ULONG   Flags;
  BOOL    FollowMouse;
  ULONG   Tick;              // Tick  - prevent flickering
  struct  IBox GadgetBox;

  // For Get
  STRPTR  SelectLabel;
  ULONG   SelectFlags;
  APTR    SelectUserData;
  UWORD   SelectCode;
  UWORD   SelectDepth;
  UWORD  *SelectPath;
  UWORD   SelectPathSize;
} MPMGData;


//******** Misc

#define MPMG_SetTagArg(tag, id, data)   {tag.ti_Tag = (ULONG)(id);\
					tag.ti_Data = (ULONG)(data);}

#define MPMGF_DROP       0x04

//******** End of file
#endif

