ui/common/toolbar.c

changeset 113
dde28a806552
parent 112
c3f2f16fa4b8
equal deleted inserted replaced
112:c3f2f16fa4b8 113:dde28a806552
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

mercurial