From 05a81ae0ca90bccabb11f71e4a7a95725e5b2b21 Mon Sep 17 00:00:00 2001 From: Thomas Thurman Date: Fri, 28 Aug 2009 17:53:21 -0400 Subject: [PATCH] fix 'nearby' button --- belltower.c | 80 +++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 58 insertions(+), 22 deletions(-) diff --git a/belltower.c b/belltower.c index d099154..b0e581d 100644 --- a/belltower.c +++ b/belltower.c @@ -85,13 +85,9 @@ typedef struct { int n_fields; } tower; -/* - * we're going to pretend you're in Helsinki - * until I get the GPS working - */ gboolean gps_working = FALSE; -double current_lat = 60.161790; -double current_long = 23.924902; +double current_lat = 40.2452778; +double current_long = -75.65;; static void show_message (char *message) @@ -104,7 +100,7 @@ show_message (char *message) gtk_widget_destroy (GTK_WIDGET (note)); } -static gchar* +static gint distance_to_tower (tower *details) { char *endptr; @@ -114,16 +110,31 @@ distance_to_tower (tower *details) const double km_to_miles = 1.609344; tower_lat = strtod(details->fields[FieldLat], &endptr); - if (*endptr) return g_strdup ("unknown"); + if (*endptr) return -1; tower_long = strtod(details->fields[FieldLong], &endptr); - if (*endptr) return g_strdup ("unknown"); + if (*endptr) return -1; km_distance = location_distance_between (current_lat, current_long, tower_lat, tower_long); - return g_strdup_printf("%dmi", (int) (km_distance / km_to_miles)); + return (int) (km_distance / km_to_miles); +} + +static gchar* +distance_to_tower_str (tower *details) +{ + int miles = distance_to_tower (details); + + if (miles==-1) + { + return g_strdup ("unknown"); + } + else + { + return g_strdup_printf("%dmi", (int) miles); + } } static void @@ -311,6 +322,23 @@ get_counties_cb (tower *details, } static FilterResult +get_nearby_towers_cb (tower *details, + gpointer data) +{ + if (details->serial==0) + return FILTER_IGNORE; /* header row */ + + if (distance_to_tower (details) < 50) + { + return FILTER_ACCEPT; + } + else + { + return FILTER_IGNORE; + } +} + +static FilterResult get_towers_by_county_cb (tower *details, gpointer data) { @@ -400,7 +428,7 @@ single_tower_cb (tower *details, buttons = gtk_vbox_new (TRUE, 0); menu = HILDON_APP_MENU (hildon_app_menu_new ()); - miles = distance_to_tower(details); + miles = distance_to_tower_str(details); add_table_field ("Distance", miles); add_table_field ("Postcode", details->fields[FieldPostcode]); @@ -475,7 +503,7 @@ found_tower_new (tower *basis) if (gps_working) { - gchar *distance = distance_to_tower (basis); + gchar *distance = distance_to_tower_str (basis); result->displayname = g_strdup_printf ("%s, %s (%s, %s) (%s)", basis->fields[FieldDedication], basis->fields[FieldPlace], @@ -579,16 +607,6 @@ parse_dove (ParseDoveCallback callback, } static void -nearby_towers (void) -{ - if (!gps_working) - { - show_message ("I don't know where you are!"); - return; - } -} - -static void show_tower (char *primary_key) { parse_dove (single_tower_cb, NULL, primary_key); @@ -679,6 +697,24 @@ put_areas_into_list (gpointer key, } static void +nearby_towers (void) +{ + GSList *matches = NULL; + + if (!gps_working) + { + show_message ("I don't know where you are!"); + return; + } + + parse_dove (get_nearby_towers_cb, + &matches, + NULL); + + show_towers_from_list (matches); +} + +static void towers_by_subarea (gchar *area) { GtkWidget *dialog = hildon_picker_dialog_new (GTK_WINDOW (window)); -- 1.7.9.5