/** stop scanning the database */
FILTER_STOP,
/** ignore this one */
- FILTER_PASS,
+ FILTER_IGNORE,
/** add this one to the list */
FILTER_ACCEPT
} FilterResult;
url);
}
-typedef gboolean (*ParseDoveCallback)(tower *details, gpointer data);
+typedef FilterResult (*ParseDoveCallback)(tower *details, gpointer data);
typedef void (*ButtonCallback)(void);
GtkWidget *tower_window, *buttons, *tower_table;
show_browser (peals_list);
}
-static gboolean
+static FilterResult
get_countries_cb (tower *details,
gpointer data)
{
g_strdup (details->fields[FieldCountry]));
}
- return FILTER_PASS;
+ return FILTER_IGNORE;
}
typedef struct {
gchar *country_name;
} country_cb_data;
-static gboolean
+typedef struct {
+ char *country;
+ char *county;
+} country_and_county;
+
+static FilterResult
get_counties_cb (tower *details,
gpointer data)
{
country_cb_data *d = (country_cb_data *)data;
if (details->serial==0)
- return FILTER_PASS; /* header row */
+ return FILTER_IGNORE; /* header row */
if (strcmp(details->fields[FieldCountry], d->country_name)!=0)
- return FILTER_PASS; /* wrong country */
+ return FILTER_IGNORE; /* wrong country */
if (!g_hash_table_lookup_extended (d->hash,
details->fields[FieldCounty],
g_strdup (details->fields[FieldCounty]));
}
- return FILTER_PASS;
+ return FILTER_IGNORE;
+}
+
+static FilterResult
+get_towers_by_county_cb (tower *details,
+ gpointer data)
+{
+ country_and_county *cac = (country_and_county *) data;
+
+ if ((!cac->county || strcmp (cac->county, details->fields[FieldCounty])==0) &&
+ (!cac->country || strcmp (cac->country, details->fields[FieldCountry])==0))
+ {
+ return FILTER_ACCEPT;
+ }
+ else
+ {
+ return FILTER_IGNORE;
+ }
}
-static gboolean
+static FilterResult
single_tower_cb (tower *details,
gpointer data)
{
if (strcmp(details->fields[FieldPrimaryKey], primary_key)!=0)
{
/* not this one; keep going */
- return FILTER_PASS;
+ return FILTER_IGNORE;
}
tower_window = hildon_stackable_window_new ();
switch (callback (&result, data))
{
- case FILTER_PASS:
+ case FILTER_IGNORE:
/* nothing */
break;
if (filter_results)
{
*filter_results = g_slist_append (*filter_results,
- result.fields[FieldPrimaryKey]);
+ g_strdup (result.fields[FieldPrimaryKey]));
}
}
parse_dove (single_tower_cb, NULL, primary_key);
}
+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 gint strcmp_f (gconstpointer a,
gconstpointer b)
{
towers_by_subarea (gchar *area)
{
GtkWidget *dialog = hildon_picker_dialog_new (GTK_WINDOW (window));
-
GtkWidget *selector = hildon_touch_selector_new_text ();
-
GHashTable *hash = g_hash_table_new_full (g_str_hash,
g_str_equal,
g_free,
g_free);
-
GSList *list=NULL, *cursor;
-
gchar *title = g_strdup_printf ("Areas of %s", area);
-
country_cb_data d = { hash, area };
+ country_and_county cac = { area, NULL };
gtk_window_set_title (GTK_WINDOW (dialog), title);
g_free (title);
if (gtk_dialog_run (GTK_DIALOG (dialog))==GTK_RESPONSE_OK)
{
- show_message (hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector)));
+ GSList *matches = NULL;
+ cac.county = strdup (hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector)));
+
+ parse_dove (get_towers_by_county_cb,
+ &matches,
+ &cac);
+ g_free (cac.county);
+
+ show_towers_from_list (matches);
}
g_hash_table_unref (hash);
gtk_widget_destroy (GTK_WIDGET (dialog));
}
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)
{
GSList *test = NULL;