Fix:Core:Made graphics more flexible
[navit-package] / navit / map.c
index 2967a89..8a6408b 100644 (file)
@@ -146,6 +146,8 @@ int
 map_set_attr(struct map *this_, struct attr *attr)
 {
        this_->attrs=attr_generic_set_attr(this_->attrs, attr);
+       if (this_->meth.map_set_attr)
+               this_->meth.map_set_attr(this_->priv, attr);
        callback_list_call_attr_2(this_->attr_cbl, attr->type, this_, attr);
        return 1;
 }
@@ -335,8 +337,10 @@ map_rect_get_item_byid(struct map_rect *mr, int id_hi, int id_lo)
 void
 map_rect_destroy(struct map_rect *mr)
 {
-       mr->m->meth.map_rect_destroy(mr->priv);
-       g_free(mr);
+       if (mr) {
+               mr->m->meth.map_rect_destroy(mr->priv);
+               g_free(mr);
+       }
 }
 
 /**
@@ -371,7 +375,7 @@ struct map_search {
  * have a look into country.c for details. Because of that every map plugin has to accept a country item
  * to be passed as "superior item".
  * 
- * Note: If you change something here, please make shure to also update the documentation of mapset_search_new()
+ * Note: If you change something here, please make sure to also update the documentation of mapset_search_new()
  * in mapset.c!
  *
  * @param m The map that should be searched
@@ -389,7 +393,7 @@ map_search_new(struct map *m, struct item *item, struct attr *search_attr, int p
        this_=g_new0(struct map_search,1);
        this_->m=m;
        this_->search_attr=*search_attr;
-       if (search_attr->type >= attr_country_all && search_attr->type <= attr_country_name)
+       if ((search_attr->type >= attr_country_all && search_attr->type <= attr_country_name) || search_attr->type == attr_country_id)
                this_->priv=country_search_new(&this_->search_attr, partial);
        else {
                if (m->meth.map_search_new) {
@@ -425,7 +429,7 @@ map_search_get_item(struct map_search *this_)
 
        if (! this_)
                return NULL;
-       if (this_->search_attr.type >= attr_country_all && this_->search_attr.type <= attr_country_name)
+       if ((this_->search_attr.type >= attr_country_all && this_->search_attr.type <= attr_country_name) || this_->search_attr.type == attr_country_id)
                return country_search_get_item(this_->priv);
        ret=this_->m->meth.map_search_get_item(this_->priv);
        if (ret)
@@ -639,32 +643,22 @@ map_dump_filedesc(struct map *map, FILE *out)
 {
        struct map_rect *mr=map_rect_new(map, NULL);
        struct item *item;
-       int i,count,max=16384;
-       struct coord ca[max];
-       struct attr attr;
-
-       while ((item = map_rect_get_item(mr))) {
-               count=item_coord_get(item, ca, item->type < type_line ? 1: max);
-               if (item->type < type_line) 
-                       fprintf(out,"mg:0x%x 0x%x ", ca[0].x, ca[0].y);
-               fprintf(out,"%s", item_to_name(item->type));
-               while (item_attr_get(item, attr_any, &attr)) 
-                       fprintf(out," %s='%s'", attr_to_name(attr.type), attr_to_text(&attr, map, 1));
-               fprintf(out,"\n");
-               if (item->type >= type_line)
-                       for (i = 0 ; i < count ; i++)
-                               fprintf(out,"mg:0x%x 0x%x\n", ca[i].x, ca[i].y);
-       }
+
+       while ((item = map_rect_get_item(mr))) 
+               item_dump_filedesc(item, map, out);
        map_rect_destroy(mr);
 }
 
 void
-map_dump_file(struct map *map, char *file)
+map_dump_file(struct map *map, const char *file)
 {
        FILE *f;
        f=fopen(file,"w");
-       map_dump_filedesc(map, f);
-       fclose(f);
+       if (f) {
+               map_dump_filedesc(map, f);
+               fclose(f);
+       } else 
+               dbg(0,"failed to open file '%s'\n",file);
 }
 
 void