/* DRW Menu Interface fns. */

#ifndef drwMenufnh_H
 #define drwMenufnh_H

#if defined NAMESPACE_DRWIMPC
  namespace DrWimpC {
#endif

#if defined NAMESPACE_OSLIB
  using namespace OSLib;
#endif

typedef struct   drw_menufn_str        drw_menufn_str;

typedef os_error *(*drw_wint_menuclick_fn)(wimp_w whan,
                                           wimp_i icon,
                                           int mousex,
                                           int mousey);

typedef void (*drw_wimp_cr_mainmenu_fn)(void);

typedef void (*drw_wimp_getmenuanditem_fn)(wimp_menu *menuptr,
                                           wimp_selection *wsel,
                                           wimp_menu **rtmenuptr,
                                           int *rtitem);

typedef os_error *(*drw_menuclose_fn)(void);

typedef void (*drw_wint_smenu_links_fn)(drw_gen_menu_str *gms);

typedef void (*drw_wint_attach_smenu_link_fn)(wimp_w whan,
                                              drw_menu_defn_data *amdd,
                                              int itemno);

typedef os_error *(*drw_wimp_menu_pop_up_fn)(wimp_menu *mhan,
                                             int pos,
                                             int x,
                                             int y);

typedef void (*drw_wimp_menu_load_ext_w_fn)(void);

typedef drw_gen_menu_str *(*drw_get_gen_menu_str_fn)(char *appname,
                                                     drw_uw_data *uwd);

typedef drw_menu_defn_data *(*drw_get_menu_by_ptr_fn)(wimp_menu *menu);

typedef drw_menu_defn_data *(*drw_get_menu_by_name_fn)(drwGP menulist,
                                                       char *appname,
                                                       char *menuname);

typedef int (*drw_menufn_msel_fn)(drw_wimp_data *wpwd,
                                  wimp_menu *mhan,
                                  wimp_i item,
                                  char *font);

typedef drw_menu_defn_data *(*drw_save_menu_ptr_fn)(char *menuname,
                                                    char *appname,
                                                    wimp_menu **menuptr,
                                                    drw_ll_hdr *menulist,
                                         drw_ll_hdr *unusedmenulist,
                                                int set_menu_ptr);

struct drw_menufn_str {

drw_wint_menuclick_fn           menuclick;
drw_wimp_cr_mainmenu_fn         crmainmenu;
drw_wimp_getmenuanditem_fn      getmenuanditem;
drw_menuclose_fn                menuclose;
drw_wint_smenu_links_fn         smenulinks;
drw_wint_attach_smenu_link_fn   attachsmenulink;
drw_wimp_menu_pop_up_fn         menupopup;
drw_wimp_menu_load_ext_w_fn     loadextw;
drw_get_menu_by_ptr_fn          getmenubyptr;
drw_get_gen_menu_str_fn         getgms;
drw_get_menu_by_name_fn         getmenubyname;
drw_menufn_msel_fn              callmselfn;
drw_save_menu_ptr_fn            savemenuptr;

};

#if defined NAMESPACE_DRWIMPC
  }
#endif

#endif
