/*-*-C-*-
 * format include file for menus
 */

#ifndef __defined_format_h
#define __defined_format_h


/*
 * The block of memory which we will send/receive from the shell consists of
 * a ResourceFileObjectTemplateHeaderRec followed by a MenuTemplateRec
 * followed by String/Message/Relocation tables.
 *
 * This is exactly the form of a menu object template in the Resource file.
 */


/* -------------------------- Menu entry templates ------------------------*/

  /* flags */

#define MENU_ENTRY_TICKED             BIT(0)
#define MENU_ENTRY_DOTTEDLINE         BIT(1)
#define MENU_ENTRY_FADED              BIT(8)
#define MENU_ENTRY_ISSPRITE           BIT(9)
#define MENU_ENTRY_SUBMENU            BIT(10)
#define MENU_ENTRY_SUBMENUEVENT       BIT(11)
#define MENU_ENTRY_CLICKSHOWTRANSIENT BIT(12)

  /* template definition */

typedef struct
{
    unsigned int flags;
    ComponentID componentID;
    MessageReference text;   /* or StringReference depending on whether */
                             /* the menu entry contains text or a sprite */
    int maxtext;
    StringReference clickshow;
    StringReference submenushow;
    int submenuevent;
    int clickevent;
    MessageReference helpmessage;
    int maxentryhelp;
} MenuTemplateEntryRec, *MenuTemplateEntryPtr;


/* ------------------------------ Menu templates --------------------------*/

  /* flags */

#define MENU_GENERATESHOWEVENT     BIT(0)
#define MENU_GENERATEHIDEEVENT     BIT(1)

  /* template definition */

typedef struct
{
    unsigned int flags;
    MessageReference title;
    int maxtitle;
    MessageReference helpmessage;
    int maxhelp;
    int showevent;
    int hideevent;
    int numentries;          /* Number of entries NOT including separators */

    MenuTemplateEntryRec entries [1]; /* sic */

} MenuTemplateRec, *MenuTemplatePtr;


/* ------------------------------------------------------------------------*/

#endif
