--- a/ui/ui/menu.h Wed Oct 11 19:11:38 2023 +0200 +++ b/ui/ui/menu.h Wed Oct 11 22:59:42 2023 +0200 @@ -35,24 +35,67 @@ extern "C" { #endif -/* - * application menu functions - */ -UIEXPORT void ui_menu(char *label); -UIEXPORT void ui_submenu(char *label); // deprecated -UIEXPORT void ui_submenu_end(); // deprecated + +typedef struct UiMenuItemArgs { + const char* label; + const char* stockid; + const char* icon; + + ui_callback onclick; + void* onclickdata; + + const int* groups; +} UiMenuItemArgs; + +typedef struct UiMenuToggleItemArgs { + const char* label; + const char* stockid; + const char* icon; + + const char* varname; + ui_callback onchange; + void* onchangedata; + + const int* groups; +} UiMenuToggleItemArgs; -UIEXPORT void ui_menuitem(char *label, ui_callback f, void *userdata); +typedef struct UiMenuItemListArgs { + const char* varname; + ui_callback onselect; + void* onselectdata; +} UiMenuItemListArgs; + +#define ui_menu(label) for(ui_menu_create(label);ui_menu_is_open();ui_menu_close()) + +#define ui_menuitem(...) ui_menuitem_create((UiMenuItemArgs){ __VA_ARGS__ }) +#define ui_menu_toggleitem(...) ui_menu_toggleitem_create((UiMenuToggleItemArgs){ __VA_ARGS__ }) +#define ui_menu_radioitem(...) ui_menu_radioitem_create((UiMenuToggleItemArgs){ __VA_ARGS__ }) + +UIEXPORT void ui_menu_create(const char* label); +UIEXPORT void ui_menuitem_create(UiMenuItemArgs args); +UIEXPORT void ui_menu_toggleitem_create(UiMenuToggleItemArgs args); +UIEXPORT void ui_menu_radioitem_create(UiMenuToggleItemArgs args); + +UIEXPORT void ui_menuseparator(); + +UIEXPORT void ui_menu_itemlist_create(UiMenuItemListArgs args); +UIEXPORT void ui_menu_toggleitemlist_create(UiMenuItemListArgs args); +UIEXPORT void ui_menu_radioitemlist_create(UiMenuItemListArgs args); + +UIEXPORT void ui_menu_deprecated(char *label); +UIEXPORT void ui_submenu_deprecated(char *label); // deprecated +UIEXPORT void ui_submenu_end_deprecated(); // deprecated + +UIEXPORT void ui_menuitem_deprecated(char *label, ui_callback f, void *userdata); UIEXPORT void ui_menuitem_st(char *stockid, ui_callback f, void *userdata); UIEXPORT void ui_menuitem_gr(char *label, ui_callback f, void *userdata, ...); UIEXPORT void ui_menuitem_stgr(char *stockid, ui_callback f, void *userdata, ...); -UIEXPORT void ui_menuseparator(); -UIEXPORT void ui_checkitem(char *label, ui_callback f, void *userdata); -UIEXPORT void ui_checkitem_nv(char *label, char *vname); +UIEXPORT void ui_checkitem_deprecated(char *label, ui_callback f, void *userdata); +UIEXPORT void ui_checkitem_nv_deprecated(char *label, char *vname); -UIEXPORT void ui_menuitem_list(UiList *items, ui_callback f, void *userdata); +UIEXPORT void ui_menuitem_list_deprecated(UiList *items, ui_callback f, void *userdata); UIEXPORT void ui_menu_end(void);