From aae51d7949fe207d9206d73bb22e9ece66ec2bb7 Mon Sep 17 00:00:00 2001 From: martin-s Date: Mon, 5 Nov 2007 20:21:29 +0000 Subject: [PATCH] Bugfixes for searching git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@535 ffa7fe5e-494d-0410-b361-a75ebd5db220 --- navit/src/data/mg/street.c | 13 +++++++++---- navit/src/gui/gtk/destination.c | 9 ++++++--- navit/src/navit.c | 26 ++++++++++++++++---------- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/navit/src/data/mg/street.c b/navit/src/data/mg/street.c index e317c07..29d5f1a 100644 --- a/navit/src/data/mg/street.c +++ b/navit/src/data/mg/street.c @@ -467,16 +467,21 @@ street_search_compare_do(struct map_rect_priv *mr, int country, int town_assoc, dbg(1,"enter"); dbg(1,"country 0x%x town_assoc 0x%x name '%s'\n", country, town_assoc, name); d=(mr->search_item.id_hi & 0xffff)-country; - dbg(1,"country %d\n", d); + dbg(1,"country %d (%d vs %d)\n", d, mr->search_item.id_hi & 0xffff, country); if (!d) { - d=mr->search_item.id_lo-town_assoc; - dbg(1,"assoc %d 0x%x-0x%x\n",d, mr->search_item.id_lo, town_assoc); - if (! d) { + if (mr->search_item.id_lo == town_assoc ) { + dbg(1,"town_assoc match (0x%x)\n", town_assoc); if (mr->search_partial) d=strncasecmp(mr->search_str, name, strlen(mr->search_str)); else d=strcasecmp(mr->search_str, name); dbg(1,"string %d\n", d); + } else { + if (town_assoc < mr->search_item.id_lo) + d=1; + else + d=-1; + dbg(1,"assoc %d 0x%x-0x%x\n",d, mr->search_item.id_lo, town_assoc); } } dbg(1,"d=%d\n", d); diff --git a/navit/src/gui/gtk/destination.c b/navit/src/gui/gtk/destination.c index d557d75..95fc885 100644 --- a/navit/src/gui/gtk/destination.c +++ b/navit/src/gui/gtk/destination.c @@ -36,7 +36,8 @@ static void button_map(GtkWidget *widget, struct search_param *search) { struct coord *c=NULL; GtkTreeIter iter; - gtk_tree_model_get_iter_first (GTK_TREE_MODEL (search->liststore2), &iter); + if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (search->liststore2), &iter)) + return; gtk_tree_model_get (GTK_TREE_MODEL (search->liststore2), &iter, COL_COUNT, &c, -1); if (c) navit_set_center(search->nav, c); @@ -62,7 +63,8 @@ static void button_destination(GtkWidget *widget, struct search_param *search) GtkTreeIter iter; char *desc; - gtk_tree_model_get_iter_first (GTK_TREE_MODEL (search->liststore2), &iter); + if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (search->liststore2), &iter)) + return; gtk_tree_model_get (GTK_TREE_MODEL (search->liststore2), &iter, COL_COUNT, &c, -1); if (c) { desc=description(search, &iter); @@ -77,7 +79,8 @@ static void button_bookmark(GtkWidget *widget, struct search_param *search) GtkTreeIter iter; char *desc; - gtk_tree_model_get_iter_first (GTK_TREE_MODEL (search->liststore2), &iter); + if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (search->liststore2), &iter)) + return; gtk_tree_model_get (GTK_TREE_MODEL (search->liststore2), &iter, COL_COUNT, &c, -1); if (c) { desc=description(search, &iter); diff --git a/navit/src/navit.c b/navit/src/navit.c index ccc5829..a2dc1d9 100644 --- a/navit/src/navit.c +++ b/navit/src/navit.c @@ -404,30 +404,36 @@ static void navit_debug(struct navit *this_) { #if 0 -#include "attr.h" -#include "item.h" -#include "search.h" struct attr attr; +#include "search.h" struct search_list *sl; struct search_list_result *res; - debug_level_set("data_mg:town_search_get_item",1); - debug_level_set("data_mg:town_search_compare",1); - debug_level_set("data_mg:tree_search_next",1); + debug_level_set("data_mg:town_search_get_item",9); + debug_level_set("data_mg:town_search_compare",9); + debug_level_set("data_mg:tree_search_next",9); + debug_level_set("data_mg:map_search_new_mg",9); sl=search_list_new(this_->mapsets->data); attr.type=attr_country_all; - attr.u.str="Deu"; + attr.u.str="Fra"; search_list_search(sl, &attr, 1); - while (res=search_list_get_result(sl)) { + while ((res=search_list_get_result(sl))) { printf("country result\n"); } attr.type=attr_town_name; - attr.u.str="U"; + attr.u.str="seclin"; search_list_search(sl, &attr, 1); - while (res=search_list_get_result(sl)) { + while ((res=search_list_get_result(sl))) { printf("town result\n"); } + attr.type=attr_street_name; + attr.u.str="rue"; + search_list_search(sl, &attr, 1); + while ((res=search_list_get_result(sl))) { + printf("street result\n"); + } search_list_destroy(sl); + exit(0); #endif } -- 2.7.4