#define MAX_FIELDS 50
#define MAX_RECENT 5
#define CONFIG_GENERAL_GROUP "General"
+#define CONFIG_DISTANCES_KEY "Distances"
+#define CONFIG_TOWERSORT_KEY "Towersort"
#define CONFIG_BOOKMARK_GROUP "Bookmarks"
#define CONFIG_RECENT_GROUP "Recent"
#define CONFIG_SEEN_CREDITS_KEY "seen_credits"
*/
#define MANY_BELLTOWERS 10
+char *distances_settings[] = {
+ CONFIG_DISTANCES_KEY,
+ "Distances are measured in...",
+ "Miles",
+ "Kilometres",
+ NULL
+};
+
+char *towersort_settings[] = {
+ CONFIG_TOWERSORT_KEY,
+ "Towers are sorted by...",
+ "Name of town",
+ "Distance from you",
+ "Days until practice night",
+ "Weight of tenor",
+ NULL
+};
+
+char **settings[] = {
+ distances_settings,
+ towersort_settings
+};
+
+gint settings_value[G_N_ELEMENTS (settings)] = { 0, };
+
+typedef enum {
+ DISTANCES_MILES,
+ DISTANCES_KILOMETRES
+} DistancesSetting;
+
+typedef enum {
+ TOWERSORT_TOWN,
+ TOWERSORT_DISTANCE,
+ TOWERSORT_PRACTICE,
+ TOWERSORT_WEIGHT
+} TowersortSetting;
+
GtkWidget *window;
LocationGPSDevice *device;
GKeyFile *static_content;
static void
load_config (void)
{
+ gint i;
+
static_content = g_key_file_new ();
if (!g_key_file_load_from_file (static_content,
CONFIG_FILENAME,
G_KEY_FILE_KEEP_COMMENTS,
NULL);
+
+ for (i=0; i<G_N_ELEMENTS (settings); i++)
+ {
+ gchar *value = g_key_file_get_string (config,
+ CONFIG_GENERAL_GROUP,
+ settings[i][0],
+ NULL);
+
+ settings_value[i] = 0;
+
+ if (value)
+ {
+ gint j=0;
+ char **cursor = settings[i]+2;
+
+ while (*cursor)
+ {
+ if (strcmp (value, *cursor)==0)
+ {
+ settings_value[i] = j;
+ break;
+ }
+ cursor++;
+ j++;
+ }
+ }
+ }
}
/**
}
static void
+show_tower_directions (void)
+{
+ if (tower_directions)
+ {
+ show_browser (tower_directions);
+ }
+ else
+ {
+ show_message ("I don't know where you are!");
+ }
+}
+
+static void
show_peals_list (void)
{
show_browser (peals_list);
}
add_button ("Peals", show_peals_list);
add_button ("Map", show_tower_map);
- add_button ("Directions", NULL);
+ add_button ("Directions", show_tower_directions);
/* don't use a toggle button: it looks stupid */
button = hildon_button_new_with_text (HILDON_SIZE_AUTO_WIDTH | HILDON_SIZE_FINGER_HEIGHT,
tower_map = g_strdup_printf ("http://maps.google.com/maps?q=%s,%s",
details->fields[FieldLat],
details->fields[FieldLong]);
+ g_free (tower_directions);
+ if (device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET)
+ {
+ tower_directions = g_strdup_printf ("http://maps.google.com/maps?q=%f,%f+to+%s,%s",
+ device->fix->latitude,
+ device->fix->longitude,
+ details->fields[FieldLat],
+ details->fields[FieldLong]);
+ }
g_free (tower_displayed);
tower_displayed = g_strdup (details->fields[FieldPrimaryKey]);
save_config ();
}
+static void
+settings_dialogue (GtkButton *source,
+ gpointer dummy)
+{
+ GtkWidget *dialog, *button;
+ GtkWidget *selector[G_N_ELEMENTS (settings)];
+ gint i;
+
+ dialog = gtk_dialog_new_with_buttons ("Settings",
+ GTK_WINDOW (window),
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ NULL
+ );
+
+ for (i=0; i<G_N_ELEMENTS (settings); i++)
+ {
+ char **cursor = settings[i]+2;
+ selector[i] = hildon_touch_selector_new_text ();
+
+ while (*cursor)
+ {
+ hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector[i]), *cursor);
+ cursor++;
+ }
+
+ hildon_touch_selector_set_active (HILDON_TOUCH_SELECTOR (selector[i]), 0, settings_value[i]);
+
+ button = hildon_picker_button_new (HILDON_SIZE_AUTO, HILDON_BUTTON_ARRANGEMENT_VERTICAL);
+ hildon_button_set_title (HILDON_BUTTON (button), settings[i][1]);
+ hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
+ HILDON_TOUCH_SELECTOR (selector[i]));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
+ button,
+ TRUE, TRUE, 0);
+ }
+
+ gtk_widget_show_all (GTK_WIDGET (dialog));
+ gtk_dialog_run (GTK_DIALOG (dialog));
+
+ for (i=0; i<G_N_ELEMENTS (settings); i++)
+ {
+ GList *rows = hildon_touch_selector_get_selected_rows (HILDON_TOUCH_SELECTOR (selector[i]),
+ 0);
+ GtkTreePath *path = (GtkTreePath*) rows->data;
+ gint *indices = gtk_tree_path_get_indices (path);
+
+ g_key_file_set_string (config,
+ CONFIG_GENERAL_GROUP,
+ settings[i][0],
+ hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector[i])));
+
+ settings_value[i] = *indices;
+ }
+ save_config ();
+
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
int
main(int argc, char **argv)
{
add_button ("Bookmarks", show_bookmarks);
add_button ("By area", towers_by_area);
add_button ("Search", tower_search);
+ add_button ("(temp) settings", settings_dialogue);
/* extra buttons for the app menu */
button = gtk_button_new_with_label ("Credits");