
/** \file menu.h
 *  \brief Header: pulldown menu code
 */

#ifndef MC_MENU_H
#define MC_MENU_H

#include "widget.h"

typedef void (*callfn) (void);

typedef struct {
    char first_letter;
    const char *label;
    struct hotkey_t text;
    callfn call_back;
} menu_entry;

typedef struct Menu {
    struct hotkey_t text;
    int    count;
    int    max_entry_len;
    int    selected;
    menu_entry *entries;
    int    start_x;		/* position relative to menubar start */
    char   *help_node;
} Menu;

extern int menubar_visible;

/* The button bar menu */
typedef struct WMenu {
    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_widget;	/* Selected widget ID before activating menu */
} WMenu;

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

#endif
