basic picker; basic lat/long (broken)
authorThomas Thurman <tthurman@gnome.org>
Fri, 28 Aug 2009 17:32:41 +0000 (13:32 -0400)
committerThomas Thurman <tthurman@gnome.org>
Fri, 28 Aug 2009 17:32:41 +0000 (13:32 -0400)
belltower.c
static.ini

index 7517bc0..9649b04 100644 (file)
@@ -73,6 +73,13 @@ typedef struct {
   int n_fields;
 } tower;
 
+/*
+ * we're going to pretend you're in Helsinki
+ * until I get the GPS working
+ */
+double current_lat = 60.161790;
+double current_long = 23.924902;
+
 static void
 show_message (char *message)
 {
@@ -84,6 +91,28 @@ show_message (char *message)
   gtk_widget_destroy (GTK_WIDGET (note));
 }
 
+static gchar*
+distance_to_tower (tower *details)
+{
+  char *endptr;
+  double tower_lat;
+  double tower_long;
+  double km_distance;
+  const double km_to_miles = 1.609344;
+
+  tower_lat = strtod(details->fields[FieldLat], &endptr);
+  if (*endptr) return g_strdup ("unknown");
+  tower_long = strtod(details->fields[FieldLong], &endptr);
+  if (*endptr) return g_strdup ("unknown");
+
+  km_distance = location_distance_between (current_lat,
+                                          current_long,
+                                          tower_lat,
+                                          tower_long);
+
+  return g_strdup_printf("%dmi", (int) (km_distance / km_to_miles));
+}
+
 static void
 call_dbus (DBusBusType type,
           char *name,
@@ -272,6 +301,7 @@ single_tower_cb (tower *details,
   gchar *str;
   gint tenor_weight;
   gchar *primary_key = (gchar*) data;
+  gchar *miles;
 
   if (strcmp(details->fields[FieldPrimaryKey], primary_key)!=0)
     {
@@ -316,6 +346,9 @@ single_tower_cb (tower *details,
   buttons = gtk_vbox_new (TRUE, 0);
   menu = HILDON_APP_MENU (hildon_app_menu_new ());
 
+  miles = distance_to_tower(details);
+
+  add_table_field ("Distance", miles);
   add_table_field ("Postcode", details->fields[FieldPostcode]);
   add_table_field ("County", details->fields[FieldCounty]);
   add_table_field ("Country", details->fields[FieldCountry]);
@@ -323,6 +356,8 @@ single_tower_cb (tower *details,
   add_table_field ("Practice night", details->fields[FieldPracticeNight]);
   add_table_field ("Bells", details->fields[FieldBells]);
 
+  g_free (miles);
+
   tenor_weight = atoi (details->fields[FieldWt]);
   str = g_strdup_printf("%dcwt %dqr %dlb in %s",
                        tenor_weight/112,
@@ -570,21 +605,83 @@ towers_by_area (void)
 }
 
 static void
+show_towers_from_list (GSList *list)
+{
+  GtkWidget *dialog;
+  GtkWidget *selector;
+  gchar *result = NULL;
+  GSList *cursor;
+
+  if (!list)
+    {
+      hildon_banner_show_information(window,
+                                    NULL,
+                                    "No towers found.");
+      return;
+    }
+
+  if (!list->next)
+    {
+      /* don't bother showing the list */
+      hildon_banner_show_information(window,
+                                    NULL,
+                                    "One tower found.");
+      show_tower (list->data);
+      return;
+    }
+
+  dialog = hildon_picker_dialog_new (GTK_WINDOW (window));
+  selector = hildon_touch_selector_new_text ();
+
+  for (cursor=list; cursor; cursor=cursor->next)
+    {
+      hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector),
+                                        cursor->data);
+    }
+
+  hildon_picker_dialog_set_selector (HILDON_PICKER_DIALOG (dialog),
+                                    HILDON_TOUCH_SELECTOR (selector));
+
+  gtk_widget_show_all (GTK_WIDGET (dialog));
+
+  if (gtk_dialog_run (GTK_DIALOG (dialog))==GTK_RESPONSE_OK)
+    {
+      result = g_strdup (hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector)));
+    }
+
+  gtk_widget_destroy (GTK_WIDGET (dialog));
+
+  if (result)
+    {
+      show_tower (result);
+      g_free (result);
+    }
+}
+
+static void
 show_bookmarks (void)
 {
-  /* nothing */
+  GSList *test = NULL;
+  show_towers_from_list (test);
 }
 
 static void
 tower_search (void)
 {
-  /* nothing */
+  GSList *test = NULL;
+  test = g_slist_append (test, "NORTON  HE");
+
+  show_towers_from_list (test);
 }
 
 static void
 recent_towers (void)
 {
-  show_tower ("NORTON  HE");
+  GSList *test = NULL;
+  test = g_slist_append (test, "BARFORD");
+  test = g_slist_append (test, "BRAUGHING");
+
+  show_towers_from_list (test);
 }
 
 int
index 0387c1b..6d9dd48 100644 (file)
@@ -4,9 +4,11 @@ credits="This application is released under the GNU General Public Licence.  It
 #
 # Mappings:
 #
-[County]
-# Well, they're not really counties in all cases.
+
+
+# Well, not really counties in all cases.
 # But the database calls them "counties".
+[County]
 Zimb=Zimbabwe
 Qld=Queensland
 Tas=Tasmania
@@ -20,3 +22,8 @@ Bucks=Buckinghamshire
 Cambs=Cambridgeshire
 C Bris=Bristol
 Ches=Cheshire
+
+[Notes]
+Ab=A♭
+Eb=E♭
+F#=F♯