#ifndef __MENU_H
#define __MENU_H

/* IMPORTANT NOTE: This header is dependent on HAVE_X / HAVE_XVIEW. If you
 * include this header, you have to move it to the group of HAVE_X dependant
 * modules in {xv|tk}/Makefile.in !!!
 */
 
#include "dlg.h"
#include "widget.h"

typedef void (*callfn) ();
/* FIXME: We have to leave this type ambiguous, because `callfn' is
   used both for functions that take an argument and ones that don't.
   That ought to be cleared up. */

typedef struct {
    char first_letter;
    char *text;
    int  hot_key;
    callfn call_back;
} menu_entry;

#ifdef HAVE_XVIEW
#   ifndef xview_walkmenu_DEFINED
        typedef unsigned long Menu;
#   endif
#else
typedef struct {
    char   *name;
    int    count;
    int    max_entry_len;
    int    selected;
    int    hotkey;
    menu_entry *entries;
    int    start_x;		/* position relative to menubar start */
} sMenu;
typedef sMenu *Menu;
#endif

extern int menubar_visible;

/* The button bar menu */
typedef struct {
    Widget widget;

    int    active;		/* If the menubar is in use */
    int    dropped;		/* If the menubar has dropped */
    Menu   *menu;		/* The actual menus */
    int    items;
    int    selected;		/* Selected menu on the top bar */
    int    subsel;		/* Selected entry on the submenu */
    int    max_entry_len;	/* Cache value for the columns in a box */
    int    previous_selection;	/* Selected widget before activating menu */
} WMenu;

Menu   create_menu     (char *name, menu_entry *entries, int count);
void   destroy_menu    (Menu menu);
WMenu *menubar_new     (int y, int x, int cols, Menu menu [], int items);
void   menubar_arrange (WMenu* menubar);
int    menubar_event   (Gpm_Event *event, WMenu *menubar);

#endif /* __MENU_H */

