81 |
return name; |
return name; |
82 |
} |
} |
83 |
|
|
84 |
static presets_item_t *parse_item(xmlDocPtr doc, xmlNode *a_node) { |
/* parse children of a given node for into *widget */ |
85 |
|
static presets_widget_t **parse_widgets(xmlNode *a_node, presets_widget_t **widget) { |
86 |
xmlNode *cur_node = NULL; |
xmlNode *cur_node = NULL; |
87 |
|
|
|
presets_item_t *item = g_new0(presets_item_t, 1); |
|
|
item->is_group = FALSE; |
|
|
|
|
|
/* ------ parse items own properties ------ */ |
|
|
item->name = (char*)xmlGetProp(a_node, BAD_CAST "name"); |
|
|
|
|
|
if((item->icon = (char*)xmlGetProp(a_node, BAD_CAST "icon"))) |
|
|
item->icon = josm_icon_name_adjust(item->icon); |
|
|
|
|
|
presets_widget_t **widget = &item->widget; |
|
|
|
|
|
/* ---- parse children (widgets) ----- */ |
|
88 |
for(cur_node = a_node->children; cur_node; cur_node = cur_node->next) { |
for(cur_node = a_node->children; cur_node; cur_node = cur_node->next) { |
89 |
if(cur_node->type == XML_ELEMENT_NODE) { |
if(cur_node->type == XML_ELEMENT_NODE) { |
90 |
if(strcasecmp((char*)cur_node->name, "label") == 0) { |
if(strcasecmp((char*)cur_node->name, "label") == 0) { |
94 |
(*widget)->type = WIDGET_TYPE_LABEL; |
(*widget)->type = WIDGET_TYPE_LABEL; |
95 |
(*widget)->text = (char*)xmlGetProp(cur_node, BAD_CAST "text"); |
(*widget)->text = (char*)xmlGetProp(cur_node, BAD_CAST "text"); |
96 |
|
|
97 |
/* special handling of separators */ |
/* special handling of pre-<space/> separators */ |
98 |
if(!(*widget)->text || (strcmp((*widget)->text, " ") == 0)) { |
if(!(*widget)->text || (strcmp((*widget)->text, " ") == 0)) { |
99 |
(*widget)->type = WIDGET_TYPE_SEPARATOR; |
(*widget)->type = WIDGET_TYPE_SEPARATOR; |
100 |
if((*widget)->text) xmlFree((*widget)->text); |
if((*widget)->text) xmlFree((*widget)->text); |
103 |
|
|
104 |
widget = &((*widget)->next); |
widget = &((*widget)->next); |
105 |
|
|
106 |
} else if(strcasecmp((char*)cur_node->name, "text") == 0) { |
} |
107 |
|
else if(strcasecmp((char*)cur_node->name, "space") == 0) { |
108 |
|
// new-style separators |
109 |
|
*widget = g_new0(presets_widget_t, 1); |
110 |
|
(*widget)->type = WIDGET_TYPE_SEPARATOR; |
111 |
|
(*widget)->text = NULL; |
112 |
|
widget = &((*widget)->next); |
113 |
|
} |
114 |
|
else if(strcasecmp((char*)cur_node->name, "text") == 0) { |
115 |
|
|
116 |
/* --------- text widget --------- */ |
/* --------- text widget --------- */ |
117 |
*widget = g_new0(presets_widget_t, 1); |
*widget = g_new0(presets_widget_t, 1); |
157 |
(*widget)->check_w.def = xmlGetPropIs(cur_node, "default", "on"); |
(*widget)->check_w.def = xmlGetPropIs(cur_node, "default", "on"); |
158 |
widget = &((*widget)->next); |
widget = &((*widget)->next); |
159 |
|
|
160 |
} else |
} |
161 |
|
else if (strcasecmp((char*)cur_node->name, "optional") == 0) { |
162 |
|
// Could be done as a fold-out box width twisties. |
163 |
|
// Or maybe as a separate dialog for small screens. |
164 |
|
// For now, just recurse and build up our current list. |
165 |
|
widget = parse_widgets(cur_node, widget); |
166 |
|
} |
167 |
|
else if (strcasecmp((char*)cur_node->name, "link") == 0) { |
168 |
|
// silently ignore for now. |
169 |
|
} |
170 |
|
else |
171 |
printf("found unhandled annotations/item/%s\n", cur_node->name); |
printf("found unhandled annotations/item/%s\n", cur_node->name); |
172 |
} |
} |
173 |
} |
} |
174 |
|
return widget; |
175 |
|
} |
176 |
|
|
177 |
|
static presets_item_t *parse_item(xmlDocPtr doc, xmlNode *a_node) { |
178 |
|
presets_item_t *item = g_new0(presets_item_t, 1); |
179 |
|
item->is_group = FALSE; |
180 |
|
|
181 |
|
/* ------ parse items own properties ------ */ |
182 |
|
item->name = (char*)xmlGetProp(a_node, BAD_CAST "name"); |
183 |
|
|
184 |
|
if((item->icon = (char*)xmlGetProp(a_node, BAD_CAST "icon"))) |
185 |
|
item->icon = josm_icon_name_adjust(item->icon); |
186 |
|
|
187 |
|
presets_widget_t **widget = &item->widget; |
188 |
|
parse_widgets(a_node, widget); |
189 |
return item; |
return item; |
190 |
} |
} |
191 |
|
|
764 |
void josm_presets_free(presets_item_t *presets) { |
void josm_presets_free(presets_item_t *presets) { |
765 |
free_items(presets); |
free_items(presets); |
766 |
} |
} |
767 |
|
|
768 |
|
// vim:et:ts=8:sw=2:sts=2:ai |