ui/common/menu.c

changeset 112
c3f2f16fa4b8
parent 110
c00e968d018b
child 113
dde28a806552
equal deleted inserted replaced
111:81c4f73236a4 112:c3f2f16fa4b8
131 item->item.prev = NULL; 131 item->item.prev = NULL;
132 item->item.next = NULL; 132 item->item.next = NULL;
133 item->item.type = UI_MENU_ITEM; 133 item->item.type = UI_MENU_ITEM;
134 134
135 item->label = nl_strdup(args->label); 135 item->label = nl_strdup(args->label);
136 item->stockid = nl_strdup(args->stockid);
137 item->icon = nl_strdup(args->icon); 136 item->icon = nl_strdup(args->icon);
138 item->userdata = args->onclickdata; 137 item->userdata = args->onclickdata;
139 item->callback = args->onclick; 138 item->callback = args->onclick;
140 item->groups = uic_copy_groups(args->groups, &item->ngroups); 139 item->groups = uic_copy_groups(args->groups, &item->ngroups);
141 140
158 item->item.prev = NULL; 157 item->item.prev = NULL;
159 item->item.next = NULL; 158 item->item.next = NULL;
160 item->item.type = UI_MENU_CHECK_ITEM; 159 item->item.type = UI_MENU_CHECK_ITEM;
161 160
162 item->label = nl_strdup(args->label); 161 item->label = nl_strdup(args->label);
163 item->stockid = nl_strdup(args->stockid);
164 item->icon = nl_strdup(args->icon); 162 item->icon = nl_strdup(args->icon);
165 item->varname = nl_strdup(args->varname); 163 item->varname = nl_strdup(args->varname);
166 item->userdata = args->onchangedata; 164 item->userdata = args->onchangedata;
167 item->callback = args->onchange; 165 item->callback = args->onchange;
168 item->groups = uic_copy_groups(args->groups, &item->ngroups); 166 item->groups = uic_copy_groups(args->groups, &item->ngroups);
176 item->item.prev = NULL; 174 item->item.prev = NULL;
177 item->item.next = NULL; 175 item->item.next = NULL;
178 item->item.type = UI_MENU_RADIO_ITEM; 176 item->item.type = UI_MENU_RADIO_ITEM;
179 177
180 item->label = nl_strdup(args->label); 178 item->label = nl_strdup(args->label);
181 item->stockid = nl_strdup(args->stockid);
182 item->icon = nl_strdup(args->icon); 179 item->icon = nl_strdup(args->icon);
183 item->varname = nl_strdup(args->varname); 180 item->varname = nl_strdup(args->varname);
184 item->userdata = args->onchangedata; 181 item->userdata = args->onchangedata;
185 item->callback = args->onchange; 182 item->callback = args->onchange;
186 item->groups = uic_copy_groups(args->groups, &item->ngroups); 183 item->groups = uic_copy_groups(args->groups, &item->ngroups);
256 void ui_contextmenu_builder(UiMenuBuilder **out_builder) { 253 void ui_contextmenu_builder(UiMenuBuilder **out_builder) {
257 UiMenuBuilder *builder = malloc(sizeof(UiMenuBuilder)); 254 UiMenuBuilder *builder = malloc(sizeof(UiMenuBuilder));
258 builder->menus_begin = NULL; 255 builder->menus_begin = NULL;
259 builder->menus_end = NULL; 256 builder->menus_end = NULL;
260 builder->current = cxLinkedListCreate(cxDefaultAllocator, NULL, CX_STORE_POINTERS); 257 builder->current = cxLinkedListCreate(cxDefaultAllocator, NULL, CX_STORE_POINTERS);
258 builder->ref = 1;
261 current_builder = builder; 259 current_builder = builder;
262 *out_builder = builder; 260 *out_builder = builder;
263 261
264 ui_menu_create(NULL); 262 ui_menu_create(NULL);
265 } 263 }
282 } 280 }
283 case UI_MENU_ITEM: { 281 case UI_MENU_ITEM: {
284 UiMenuItem *i = (UiMenuItem*)item; 282 UiMenuItem *i = (UiMenuItem*)item;
285 free(i->groups); 283 free(i->groups);
286 free(i->label); 284 free(i->label);
287 free(i->stockid);
288 free(i->icon); 285 free(i->icon);
289 break; 286 break;
290 } 287 }
291 case UI_MENU_CHECK_ITEM: { 288 case UI_MENU_CHECK_ITEM: {
292 UiMenuCheckItem *i = (UiMenuCheckItem*)item; 289 UiMenuCheckItem *i = (UiMenuCheckItem*)item;
293 free(i->groups); 290 free(i->groups);
294 free(i->label); 291 free(i->label);
295 free(i->stockid);
296 free(i->icon); 292 free(i->icon);
297 free(i->varname); 293 free(i->varname);
298 break; 294 break;
299 } 295 }
300 case UI_MENU_RADIO_ITEM: { 296 case UI_MENU_RADIO_ITEM: {
301 UiMenuRadioItem *i = (UiMenuRadioItem*)item; 297 UiMenuRadioItem *i = (UiMenuRadioItem*)item;
302 free(i->groups); 298 free(i->groups);
303 free(i->label); 299 free(i->label);
304 free(i->stockid);
305 free(i->icon); 300 free(i->icon);
306 //free(i->varname); 301 free(i->varname);
307 break; 302 break;
308 } 303 }
309 case UI_MENU_ITEM_LIST: { 304 case UI_MENU_ITEM_LIST: {
310 break; 305 break;
311 } 306 }
328 m = next; 323 m = next;
329 } 324 }
330 cxListFree(builder->current); 325 cxListFree(builder->current);
331 free(builder); 326 free(builder);
332 } 327 }
328
329 void ui_menubuilder_ref(UiMenuBuilder *builder) {
330 builder->ref++;
331 }
332
333 void ui_menubuilder_unref(UiMenuBuilder *builder) {
334 if(--builder->ref <= 0) {
335 ui_menubuilder_free(builder);
336 }
337 }

mercurial