ui/common/menu.c

changeset 966
e411ed7c5f10
parent 890
8d30cbd1c465
equal deleted inserted replaced
965:5d4419042d9b 966:e411ed7c5f10
87 87
88 static char* nl_strdup(const char* s) { 88 static char* nl_strdup(const char* s) {
89 return s ? strdup(s) : NULL; 89 return s ? strdup(s) : NULL;
90 } 90 }
91 91
92 int* uic_copy_groups(const int* groups, size_t *ngroups) { 92 int* uic_copy_states(const int* states, size_t *nstates) {
93 *ngroups = 0; 93 *nstates = 0;
94 if (!groups) { 94 if (!states) {
95 return NULL; 95 return NULL;
96 } 96 }
97 97
98 size_t n; 98 size_t n;
99 for (n = 0; groups[n] > -1; n++) { } 99 for (n = 0; states[n] > -1; n++) { }
100 100
101 if (ngroups > 0) { 101 if (nstates > 0) {
102 int* newarray = calloc(n+1, sizeof(int)); 102 int* newarray = calloc(n+1, sizeof(int));
103 memcpy(newarray, groups, n * sizeof(int)); 103 memcpy(newarray, states, n * sizeof(int));
104 newarray[n] = -1; 104 newarray[n] = -1;
105 *ngroups = n; 105 *nstates = n;
106 return newarray; 106 return newarray;
107 } 107 }
108 return NULL; 108 return NULL;
109 } 109 }
110 110
150 150
151 item->label = nl_strdup(args->label); 151 item->label = nl_strdup(args->label);
152 item->icon = nl_strdup(args->icon); 152 item->icon = nl_strdup(args->icon);
153 item->userdata = args->onclickdata; 153 item->userdata = args->onclickdata;
154 item->callback = args->onclick; 154 item->callback = args->onclick;
155 item->groups = uic_copy_groups(args->groups, &item->ngroups); 155 item->states = uic_copy_states(args->states, &item->nstates);
156 156
157 add_item((UiMenuItemI*)item); 157 add_item((UiMenuItemI*)item);
158 } 158 }
159 159
160 void ui_menuseparator() { 160 void ui_menuseparator() {
177 item->label = nl_strdup(args->label); 177 item->label = nl_strdup(args->label);
178 item->icon = nl_strdup(args->icon); 178 item->icon = nl_strdup(args->icon);
179 item->varname = nl_strdup(args->varname); 179 item->varname = nl_strdup(args->varname);
180 item->userdata = args->onchangedata; 180 item->userdata = args->onchangedata;
181 item->callback = args->onchange; 181 item->callback = args->onchange;
182 item->groups = uic_copy_groups(args->groups, &item->ngroups); 182 item->states = uic_copy_states(args->nstates, &item->nstates);
183 183
184 add_item((UiMenuItemI*)item); 184 add_item((UiMenuItemI*)item);
185 } 185 }
186 186
187 void ui_menu_radioitem_create(UiMenuToggleItemArgs *args) { 187 void ui_menu_radioitem_create(UiMenuToggleItemArgs *args) {
194 item->label = nl_strdup(args->label); 194 item->label = nl_strdup(args->label);
195 item->icon = nl_strdup(args->icon); 195 item->icon = nl_strdup(args->icon);
196 item->varname = nl_strdup(args->varname); 196 item->varname = nl_strdup(args->varname);
197 item->userdata = args->onchangedata; 197 item->userdata = args->onchangedata;
198 item->callback = args->onchange; 198 item->callback = args->onchange;
199 item->groups = uic_copy_groups(args->groups, &item->ngroups); 199 item->states = uic_copy_states(args->nstates, &item->nstates);
200 200
201 add_item((UiMenuItemI*)item); 201 add_item((UiMenuItemI*)item);
202 } 202 }
203 203
204 void ui_menu_itemlist_create(UiMenuItemListArgs *args) { 204 void ui_menu_itemlist_create(UiMenuItemListArgs *args) {
294 } 294 }
295 break; 295 break;
296 } 296 }
297 case UI_MENU_ITEM: { 297 case UI_MENU_ITEM: {
298 UiMenuItem *i = (UiMenuItem*)item; 298 UiMenuItem *i = (UiMenuItem*)item;
299 free(i->groups); 299 free(i->states);
300 free(i->label); 300 free(i->label);
301 free(i->icon); 301 free(i->icon);
302 break; 302 break;
303 } 303 }
304 case UI_MENU_CHECK_ITEM: { 304 case UI_MENU_CHECK_ITEM: {
305 UiMenuCheckItem *i = (UiMenuCheckItem*)item; 305 UiMenuCheckItem *i = (UiMenuCheckItem*)item;
306 free(i->groups); 306 free(i->states);
307 free(i->label); 307 free(i->label);
308 free(i->icon); 308 free(i->icon);
309 free(i->varname); 309 free(i->varname);
310 break; 310 break;
311 } 311 }
312 case UI_MENU_RADIO_ITEM: { 312 case UI_MENU_RADIO_ITEM: {
313 UiMenuRadioItem *i = (UiMenuRadioItem*)item; 313 UiMenuRadioItem *i = (UiMenuRadioItem*)item;
314 free(i->groups); 314 free(i->states);
315 free(i->label); 315 free(i->label);
316 free(i->icon); 316 free(i->icon);
317 free(i->varname); 317 free(i->varname);
318 break; 318 break;
319 } 319 }

mercurial