Diff of /trunk/src/josm_presets.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2 by achadwick, Wed Dec 10 00:00:05 2008 UTC revision 50 by achadwick, Thu Feb 5 10:34:53 2009 UTC
# Line 81  char *josm_icon_name_adjust(char *name) Line 81  char *josm_icon_name_adjust(char *name)
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) {
# Line 105  static presets_item_t *parse_item(xmlDoc Line 94  static presets_item_t *parse_item(xmlDoc
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);
# Line 114  static presets_item_t *parse_item(xmlDoc Line 103  static presets_item_t *parse_item(xmlDoc
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);
# Line 160  static presets_item_t *parse_item(xmlDoc Line 157  static presets_item_t *parse_item(xmlDoc
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    
# Line 742  static void free_items(presets_item_t *i Line 764  static void free_items(presets_item_t *i
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

Legend:
Removed from v.2  
changed lines
  Added in v.50