| 48 |
48 |
| 49 static char* nl_strdup(const char* str) { |
49 static char* nl_strdup(const char* str) { |
| 50 return str ? strdup(str) : NULL; |
50 return str ? strdup(str) : NULL; |
| 51 } |
51 } |
| 52 |
52 |
| 53 static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs *args, size_t *ngroups) { |
53 static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs *args, size_t *ngroups, size_t *nvstates) { |
| 54 UiToolbarItemArgs newargs; |
54 UiToolbarItemArgs newargs; |
| 55 newargs.label = nl_strdup(args->label); |
55 newargs.label = nl_strdup(args->label); |
| 56 newargs.icon = nl_strdup(args->icon); |
56 newargs.icon = nl_strdup(args->icon); |
| 57 newargs.tooltip = nl_strdup(args->tooltip); |
57 newargs.tooltip = nl_strdup(args->tooltip); |
| 58 newargs.onclick = args->onclick; |
58 newargs.onclick = args->onclick; |
| 59 newargs.onclickdata = args->onclickdata; |
59 newargs.onclickdata = args->onclickdata; |
| 60 newargs.groups = uic_copy_groups(args->groups, ngroups); |
60 newargs.groups = uic_copy_groups(args->groups, ngroups); |
| |
61 newargs.visibility_states = uic_copy_groups(args->visibility_states, nvstates); |
| 61 return newargs; |
62 return newargs; |
| 62 } |
63 } |
| 63 |
64 |
| 64 void ui_toolbar_item_create(const char* name, UiToolbarItemArgs *args) { |
65 void ui_toolbar_item_create(const char* name, UiToolbarItemArgs *args) { |
| 65 UiToolbarItem* item = malloc(sizeof(UiToolbarItem)); |
66 UiToolbarItem* item = malloc(sizeof(UiToolbarItem)); |
| 66 item->item.type = UI_TOOLBAR_ITEM; |
67 item->item.type = UI_TOOLBAR_ITEM; |
| 67 item->args = itemargs_copy(args, &item->ngroups); |
68 item->args = itemargs_copy(args, &item->ngroups, &item->nvstates); |
| 68 cxMapPut(toolbar_items, name, item); |
69 cxMapPut(toolbar_items, name, item); |
| 69 } |
70 } |
| 70 |
71 |
| 71 |
72 |
| 72 static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs *args, size_t *ngroups) { |
73 static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs *args, size_t *ngroups, size_t *nvstates) { |
| 73 UiToolbarToggleItemArgs newargs; |
74 UiToolbarToggleItemArgs newargs; |
| 74 newargs.label = nl_strdup(args->label); |
75 newargs.label = nl_strdup(args->label); |
| 75 newargs.icon = nl_strdup(args->icon); |
76 newargs.icon = nl_strdup(args->icon); |
| 76 newargs.tooltip = nl_strdup(args->tooltip); |
77 newargs.tooltip = nl_strdup(args->tooltip); |
| 77 newargs.varname = nl_strdup(args->varname); |
78 newargs.varname = nl_strdup(args->varname); |
| 78 newargs.onchange = args->onchange; |
79 newargs.onchange = args->onchange; |
| 79 newargs.onchangedata = args->onchangedata; |
80 newargs.onchangedata = args->onchangedata; |
| 80 newargs.groups = uic_copy_groups(args->groups, ngroups); |
81 newargs.groups = uic_copy_groups(args->groups, ngroups); |
| |
82 newargs.visibility_states = uic_copy_groups(args->visibility_states, nvstates); |
| 81 return newargs; |
83 return newargs; |
| 82 } |
84 } |
| 83 |
85 |
| 84 void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs *args) { |
86 void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs *args) { |
| 85 UiToolbarToggleItem* item = malloc(sizeof(UiToolbarToggleItem)); |
87 UiToolbarToggleItem* item = malloc(sizeof(UiToolbarToggleItem)); |
| 86 item->item.type = UI_TOOLBAR_TOGGLEITEM; |
88 item->item.type = UI_TOOLBAR_TOGGLEITEM; |
| 87 item->args = toggleitemargs_copy(args, &item->ngroups); |
89 item->args = toggleitemargs_copy(args, &item->ngroups, &item->nvstates); |
| 88 cxMapPut(toolbar_items, name, item); |
90 cxMapPut(toolbar_items, name, item); |
| 89 } |
91 } |
| 90 |
92 |
| 91 static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs *args) { |
93 static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs *args, size_t *nvstates) { |
| 92 UiToolbarMenuArgs newargs; |
94 UiToolbarMenuArgs newargs; |
| 93 newargs.label = nl_strdup(args->label); |
95 newargs.label = nl_strdup(args->label); |
| 94 newargs.icon = nl_strdup(args->icon); |
96 newargs.icon = nl_strdup(args->icon); |
| 95 newargs.tooltip = nl_strdup(args->tooltip); |
97 newargs.tooltip = nl_strdup(args->tooltip); |
| |
98 newargs.visibility_states = uic_copy_groups(args->visibility_states, nvstates); |
| 96 return newargs; |
99 return newargs; |
| 97 } |
100 } |
| 98 |
101 |
| 99 UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs *args) { |
102 UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs *args) { |
| 100 UiToolbarMenuItem* item = malloc(sizeof(UiToolbarMenuItem)); |
103 UiToolbarMenuItem* item = malloc(sizeof(UiToolbarMenuItem)); |
| 101 item->item.type = UI_TOOLBAR_MENU; |
104 item->item.type = UI_TOOLBAR_MENU; |
| 102 memset(&item->menu, 0, sizeof(UiMenu)); |
105 memset(&item->menu, 0, sizeof(UiMenu)); |
| 103 item->args = menuargs_copy(args); |
106 item->args = menuargs_copy(args, &item->nvstates); |
| 104 |
107 |
| 105 item->end = 0; |
108 item->end = 0; |
| 106 |
109 |
| 107 if (!name) { |
110 if (!name) { |
| 108 // special appmenu |
111 // special appmenu |