#ifndef UIC_MENU_H
#define UIC_MENU_H
#include "../ui/menu.h"
#include <cx/linked_list.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct UiMenuItemI UiMenuItemI;
typedef struct UiMenu UiMenu;
typedef struct UiMenuItem UiMenuItem;
typedef struct UiMenuCheckItem UiMenuCheckItem;
typedef struct UiMenuRadioItem UiMenuRadioItem;
typedef struct UiMenuItemList UiMenuItemList;
enum UiMenuItemType {
UI_MENU =
0,
UI_MENU_ITEM,
UI_MENU_CHECK_ITEM,
UI_MENU_RADIO_ITEM,
UI_MENU_ITEM_LIST,
UI_MENU_CHECKITEM_LIST,
UI_MENU_RADIOITEM_LIST,
UI_MENU_SEPARATOR
};
typedef enum UiMenuItemType UiMenuItemType;
struct UiMenuItemI {
UiMenuItemI *prev;
UiMenuItemI *next;
UiMenuItemType type;
char id[
8];
};
struct UiMenu {
UiMenuItemI item;
const char *label;
UiMenuItemI *items_begin;
UiMenuItemI *items_end;
UiMenu *parent;
int end;
};
struct UiMenuItem {
UiMenuItemI item;
ui_callback callback;
char *label;
char *stockid;
char *icon;
void *userdata;
int *groups;
size_t ngroups;
};
struct UiMenuCheckItem {
UiMenuItemI item;
char *label;
char *stockid;
char *icon;
char *varname;
ui_callback callback;
void *userdata;
int *groups;
size_t ngroups;
};
struct UiMenuRadioItem {
UiMenuItemI item;
char *label;
char *stockid;
char *icon;
ui_callback callback;
void *userdata;
int *groups;
size_t ngroups;
};
struct UiMenuItemList {
UiMenuItemI item;
ui_getvaluefunc getvalue;
ui_callback callback;
void *userdata;
char *varname;
};
struct UiMenuBuilder {
UiMenu *menus_begin;
UiMenu *menus_end;
CxList *current;
};
void uic_menu_init(
void);
UiMenu* uic_get_menu_list(
void);
void uic_add_menu_to_stack(UiMenu* menu);
int* uic_copy_groups(
const int* groups,
size_t *ngroups);
#ifdef __cplusplus
}
#endif
#endif