#include "toolbar.h"
#include "menu.h"
#include <string.h>
static CxMap* toolbar_items;
static CxList* toolbar_defaults[
3];
static UiToolbarMenuItem* ui_appmenu;
void uic_toolbar_init(
void) {
toolbar_items = cxHashMapCreate(cxDefaultAllocator,
CX_STORE_POINTERS,
16);
toolbar_defaults[
0] = cxLinkedListCreateSimple(
CX_STORE_POINTERS);
toolbar_defaults[
1] = cxLinkedListCreateSimple(
CX_STORE_POINTERS);
toolbar_defaults[
2] = cxLinkedListCreateSimple(
CX_STORE_POINTERS);
}
static char* nl_strdup(
const char* str) {
return str ? strdup(str) :
NULL;
}
static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs args,
size_t *ngroups) {
UiToolbarItemArgs newargs;
newargs.label = nl_strdup(args.label);
newargs.stockid = nl_strdup(args.stockid);
newargs.icon = nl_strdup(args.icon);
newargs.onclick = args.onclick;
newargs.onclickdata = args.onclickdata;
newargs.groups = uic_copy_groups(args.groups, ngroups);
return newargs;
}
void ui_toolbar_item_create(
const char* name, UiToolbarItemArgs args) {
UiToolbarItem* item = malloc(
sizeof(UiToolbarItem));
item->item.type =
UI_TOOLBAR_ITEM;
item->args = itemargs_copy(args, &item->ngroups);
cxMapPut(toolbar_items, name, item);
}
static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs args,
size_t *ngroups) {
UiToolbarToggleItemArgs newargs;
newargs.label = nl_strdup(args.label);
newargs.stockid = nl_strdup(args.stockid);
newargs.icon = nl_strdup(args.icon);
newargs.varname = nl_strdup(args.varname);
newargs.onchange = args.onchange;
newargs.onchangedata = args.onchangedata;
newargs.groups = uic_copy_groups(args.groups, ngroups);
return newargs;
}
void ui_toolbar_toggleitem_create(
const char* name, UiToolbarToggleItemArgs args) {
UiToolbarToggleItem* item = malloc(
sizeof(UiToolbarToggleItem));
item->item.type =
UI_TOOLBAR_TOGGLEITEM;
item->args = toggleitemargs_copy(args, &item->ngroups);
cxMapPut(toolbar_items, name, item);
}
static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs args) {
UiToolbarMenuArgs newargs;
newargs.label = nl_strdup(args.label);
newargs.stockid = nl_strdup(args.stockid);
newargs.icon = nl_strdup(args.icon);
return newargs;
}
UIEXPORT void ui_toolbar_menu_create(
const char* name, UiToolbarMenuArgs args) {
UiToolbarMenuItem* item = malloc(
sizeof(UiToolbarMenuItem));
item->item.type =
UI_TOOLBAR_MENU;
memset(&item->menu,
0,
sizeof(UiMenu));
item->args = menuargs_copy(args);
item->end =
0;
if (!name) {
ui_appmenu = item;
}
else {
cxMapPut(toolbar_items, name, item);
}
uic_add_menu_to_stack(&item->menu);
}
CxMap* uic_get_toolbar_items(
void) {
return toolbar_items;
}
CxList* uic_get_toolbar_defaults(
enum UiToolbarPos pos) {
if (pos >=
0 && pos <
3) {
return toolbar_defaults[pos];
}
return NULL;
}
void ui_toolbar_add_default(
const char* name,
enum UiToolbarPos pos) {
char* cp = strdup(name);
if (pos >=
0 && pos <
3) {
cxListAdd(toolbar_defaults[pos], cp);
}
else {
}
}
UiBool uic_toolbar_isenabled(
void) {
return cxListSize(toolbar_defaults[
0]) + cxListSize(toolbar_defaults[
1]) + cxListSize(toolbar_defaults[
2]) >
0;
}
UiToolbarItemI* uic_toolbar_get_item(
const char* name) {
return cxMapGet(toolbar_items, name);
}
UiToolbarMenuItem* uic_get_appmenu(
void) {
return ui_appmenu;
}