diff options
Diffstat (limited to 'src/libaudgui/menu.h')
-rw-r--r-- | src/libaudgui/menu.h | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/src/libaudgui/menu.h b/src/libaudgui/menu.h index fc27ae5..d6a0cd3 100644 --- a/src/libaudgui/menu.h +++ b/src/libaudgui/menu.h @@ -20,10 +20,12 @@ #ifndef AUDGUI_MENU_H #define AUDGUI_MENU_H +/* okay to use without audgui_init() */ + #include <gtk/gtk.h> -#include <libaudcore/core.h> +#include <libaudcore/objects.h> -typedef struct _AudguiMenuItem { +struct AudguiMenuItem { const char * name; const char * icon; unsigned key; @@ -38,25 +40,44 @@ typedef struct _AudguiMenuItem { const char * hook; /* for submenus */ - const struct _AudguiMenuItem * items; - int n_items; + ArrayRef<AudguiMenuItem> items; /* for custom submenus */ GtkWidget * (* get_sub) (void); /* for separators */ - bool_t sep; -} AudguiMenuItem; + bool sep; +}; + +constexpr AudguiMenuItem MenuCommand (const char * name, const char * icon, + unsigned key, GdkModifierType mod, void (* func) (void)) + { return {name, icon, key, mod, func}; } + +constexpr AudguiMenuItem MenuToggle (const char * name, const char * icon, + unsigned key, GdkModifierType mod, const char * csect, const char * cname, + void (* func) (void) = 0, const char * hook = 0) + { return {name, icon, key, mod, func, csect, cname, hook}; } + +constexpr AudguiMenuItem MenuSub (const char * name, const char * icon, + ArrayRef<AudguiMenuItem> items) + { return {name, icon, 0, (GdkModifierType) 0, 0, 0, 0, 0, items}; } + +constexpr AudguiMenuItem MenuSub (const char * name, const char * icon, + GtkWidget * (* get_sub) (void)) + { return {name, icon, 0, (GdkModifierType) 0, 0, 0, 0, 0, 0, get_sub}; } + +constexpr AudguiMenuItem MenuSep () + { return {0, 0, 0, (GdkModifierType) 0, 0, 0, 0, 0, 0, 0, true}; } -/* use NULL for domain to skip translation */ +/* use nullptr for domain to skip translation */ GtkWidget * audgui_menu_item_new_with_domain (const AudguiMenuItem * item, GtkAccelGroup * accel, const char * domain); void audgui_menu_init_with_domain (GtkWidget * shell, - const AudguiMenuItem * items, int n_items, GtkAccelGroup * accel, + ArrayRef<AudguiMenuItem> items, GtkAccelGroup * accel, const char * domain); #define audgui_menu_item_new(i, a) audgui_menu_item_new_with_domain (i, a, PACKAGE) -#define audgui_menu_init(s, i, n, a) audgui_menu_init_with_domain (s, i, n, a, PACKAGE) +#define audgui_menu_init(s, i, a) audgui_menu_init_with_domain (s, i, a, PACKAGE) #endif /* AUDGUI_MENU_H */ |