#include <hildon/hildon.h>
#include <gtk/gtk.h>
#include <location/location-gps-device.h>
+#include <location/location-distance-utils.h>
#include <dbus/dbus-glib.h>
#define MAX_FIELDS 50
GtkWidget *window;
+LocationGPSDevice *device;
+
typedef enum {
/** stop scanning the database */
FILTER_STOP,
* 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;
}
static FilterResult
+get_towers_by_search_cb (tower *details,
+ gpointer data)
+{
+ char *s = (char *) data;
+
+ if (strcasestr(details->fields[FieldCountry], s) ||
+ strcasestr(details->fields[FieldCounty], s) ||
+ strcasestr(details->fields[FieldDedication], s) ||
+ strcasestr(details->fields[FieldPlace], s))
+ {
+ return FILTER_ACCEPT;
+ }
+ else
+ {
+ return FILTER_IGNORE;
+ }
+}
+
+static FilterResult
single_tower_cb (tower *details,
gpointer data)
{
result->sortkey = g_strdup (basis->fields[FieldPrimaryKey]);
result->primarykey = g_strdup (basis->fields[FieldPrimaryKey]);
- result->displayname = g_strdup_printf ("%s, %s (%s, %s)",
- basis->fields[FieldDedication],
- basis->fields[FieldPlace],
- basis->fields[FieldBells],
- basis->fields[FieldPracticeNight]);
+
+ if (gps_working)
+ {
+ gchar *distance = distance_to_tower (basis);
+ result->displayname = g_strdup_printf ("%s, %s (%s, %s) (%s)",
+ basis->fields[FieldDedication],
+ basis->fields[FieldPlace],
+ basis->fields[FieldBells],
+ basis->fields[FieldPracticeNight],
+ distance);
+ g_free (distance);
+ }
+ else
+ {
+ result->displayname = g_strdup_printf ("%s, %s (%s, %s)",
+ basis->fields[FieldDedication],
+ basis->fields[FieldPlace],
+ basis->fields[FieldBells],
+ basis->fields[FieldPracticeNight]);
+ }
return result;
}
static void
nearby_towers (void)
{
- char buffer[4096];
- LocationGPSDevice *device;
- device = g_object_new (LOCATION_TYPE_GPS_DEVICE, NULL);
-
- sprintf(buffer, "%f %f %x",
- device->fix->latitude,
- device->fix->longitude,
- device->fix->fields);
- show_message (buffer);
-
- if (device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET)
- {
- show_message ("I know where you are!");
- }
- else
+ if (!gps_working)
{
show_message ("I don't know where you are!");
+ return;
}
-
- g_object_unref (device);
}
static void
if (!list->next)
{
/* only one; don't bother showing the list */
+ FoundTower* found = (FoundTower*) list->data;
+
hildon_banner_show_information(window,
NULL,
"One tower found.");
- show_tower (list->data);
+ show_tower (found->primarykey);
/* FIXME: and free the list */
return;
static void
show_bookmarks (void)
{
- GSList *test = NULL;
- show_towers_from_list (test);
}
static void
tower_search (void)
{
- GSList *test = NULL;
- test = g_slist_append (test, "NORTON HE");
+ GtkWidget *terms = gtk_dialog_new_with_buttons ("What are you looking for?",
+ GTK_WINDOW (window),
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ "Search",
+ GTK_RESPONSE_OK,
+ NULL);
+ GtkWidget *entry = gtk_entry_new ();
+ GSList *matches = NULL;
+
+ gtk_box_pack_end (GTK_BOX (GTK_DIALOG (terms)->vbox),
+ entry, TRUE, TRUE, 0);
+
+ gtk_widget_show_all (GTK_WIDGET (terms));
+
+ if (gtk_dialog_run (GTK_DIALOG (terms))==GTK_RESPONSE_OK)
+ {
+ GSList *matches = NULL;
+
+ parse_dove (get_towers_by_search_cb,
+ &matches,
+ (char*) gtk_entry_get_text (GTK_ENTRY (entry)));
+
+ show_towers_from_list (matches);
+ }
- show_towers_from_list (test);
+ gtk_widget_destroy (GTK_WIDGET (terms));
}
static void
recent_towers (void)
{
- GSList *test = NULL;
- test = g_slist_append (test, "BARFORD");
- test = g_slist_append (test, "BRAUGHING");
+}
+
+static void
+grab_gps (void)
+{
+ gps_working = (device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET)!=0;
- show_towers_from_list (test);
+ if (gps_working)
+ {
+ current_lat = device->fix->latitude;
+ current_long = device->fix->longitude;
+ }
}
int
gtk_init (&argc, &argv);
g_set_application_name ("Belltower");
+ device = g_object_new (LOCATION_TYPE_GPS_DEVICE, NULL);
+ grab_gps ();
+ /* FIXME and call that when the location changes, too */
+
window = hildon_stackable_window_new ();
gtk_window_set_title (GTK_WINDOW (window), "Belltower");
g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL);