X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/111fa174c552ff8c8fd7e983b228cc3a65475c98..7114e87955b0a009e3fcc406dbe97c88e67eaf8a:/src/dialog.c diff --git a/src/dialog.c b/src/dialog.c index 0e6da62f..95b9f3ea 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -21,6 +21,10 @@ #include "viking.h" #include "thumbnails.h" +#include "garminsymbols.h" +#include "degrees_converters.h" +#include "authors.h" +#include "googlesearch.h" #include #include @@ -71,8 +75,8 @@ gboolean a_dialog_goto_latlon ( GtkWindow *parent, struct LatLon *ll, const stru if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) { - ll->lat = atof ( gtk_entry_get_text ( GTK_ENTRY(lat) ) ); - ll->lon = atof ( gtk_entry_get_text ( GTK_ENTRY(lon) ) ); + ll->lat = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(lat) ) ); + ll->lon = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(lon) ) ); gtk_widget_destroy ( dialog ); return TRUE; } @@ -168,7 +172,12 @@ gboolean a_dialog_new_waypoint ( GtkWindow *parent, gchar **dest, VikWaypoint *w GTK_RESPONSE_ACCEPT, NULL); struct LatLon ll; - GtkWidget *latlabel, *lonlabel, *namelabel, *latentry, *lonentry, *altentry, *altlabel, *nameentry, *commentlabel, *commententry, *imagelabel, *imageentry; + GtkWidget *latlabel, *lonlabel, *namelabel, *latentry, *lonentry, *altentry, *altlabel, *nameentry, *commentlabel, + *commententry, *imagelabel, *imageentry, *symbollabel, *symbolentry; + GtkListStore *store; + + + gchar *lat, *lon, *alt; @@ -204,17 +213,55 @@ gboolean a_dialog_new_waypoint ( GtkWindow *parent, gchar **dest, VikWaypoint *w commentlabel = gtk_label_new ("Comment:"); commententry = gtk_entry_new (); + gchar *cmt = a_googlesearch_get_search_string_for_this_place(parent); + if (cmt) + gtk_entry_set_text(GTK_ENTRY(commententry), cmt); imagelabel = gtk_label_new ("Image:"); imageentry = vik_file_entry_new (); + { + GtkCellRenderer *r; + symbollabel = gtk_label_new ("Symbol:"); + GtkTreeIter iter; + + store = gtk_list_store_new(3, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING); + symbolentry = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)); + gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(symbolentry), 3); + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, 0, NULL, 1, NULL, 2, "(none)", -1); + a_populate_sym_list(store); + + r = gtk_cell_renderer_pixbuf_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (symbolentry), r, FALSE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (symbolentry), r, "pixbuf", 1, NULL); + + r = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (symbolentry), r, FALSE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (symbolentry), r, "text", 2, NULL); + + if ( dest == NULL && wp->symbol ) { + gboolean ok; + gchar *sym; + for (ok = gtk_tree_model_get_iter_first ( GTK_TREE_MODEL(store), &iter ); ok; ok = gtk_tree_model_iter_next ( GTK_TREE_MODEL(store), &iter)) { + gtk_tree_model_get ( GTK_TREE_MODEL(store), &iter, 0, (void *)&sym, -1 ); + if (sym && !strcmp(sym, wp->symbol)) { + g_free(sym); + break; + } else { + g_free(sym); + } + } + gtk_combo_box_set_active_iter(GTK_COMBO_BOX(symbolentry), &iter); + } + } + if ( dest == NULL && wp->comment ) gtk_entry_set_text ( GTK_ENTRY(commententry), wp->comment ); if ( dest == NULL && wp->image ) vik_file_entry_set_filename ( VIK_FILE_ENTRY(imageentry), wp->image ); - gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), latlabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), latentry, FALSE, FALSE, 0); @@ -226,9 +273,11 @@ gboolean a_dialog_new_waypoint ( GtkWindow *parent, gchar **dest, VikWaypoint *w gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), commententry, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), imagelabel, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), imageentry, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), symbollabel, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(symbolentry), FALSE, FALSE, 0); gtk_widget_show_all ( GTK_DIALOG(dialog)->vbox ); - + while ( gtk_dialog_run ( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) { if ( dest ) @@ -249,14 +298,28 @@ gboolean a_dialog_new_waypoint ( GtkWindow *parent, gchar **dest, VikWaypoint *w { /* Do It */ *dest = name; - ll.lat = atof ( gtk_entry_get_text ( GTK_ENTRY(latentry) ) ); - ll.lon = atof ( gtk_entry_get_text ( GTK_ENTRY(lonentry) ) ); + ll.lat = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(latentry) ) ); + ll.lon = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(lonentry) ) ); vik_coord_load_from_latlon ( &(wp->coord), coord_mode, &ll ); wp->altitude = atof ( gtk_entry_get_text ( GTK_ENTRY(altentry) ) ); vik_waypoint_set_comment ( wp, gtk_entry_get_text ( GTK_ENTRY(commententry) ) ); vik_waypoint_set_image ( wp, vik_file_entry_get_filename ( VIK_FILE_ENTRY(imageentry) ) ); if ( wp->image && *(wp->image) && (!a_thumbnails_exists(wp->image)) ) a_thumbnails_create ( wp->image ); + + { + GtkTreeIter iter, first; + gtk_tree_model_get_iter_first ( GTK_TREE_MODEL(store), &first ); + if ( !gtk_combo_box_get_active_iter ( GTK_COMBO_BOX(symbolentry), &iter ) || !memcmp(&iter, &first, sizeof(GtkTreeIter)) ) { + vik_waypoint_set_symbol ( wp, NULL ); + } else { + gchar *sym; + gtk_tree_model_get ( GTK_TREE_MODEL(store), &iter, 0, (void *)&sym, -1 ); + vik_waypoint_set_symbol ( wp, sym ); + g_free(sym); + } + } + gtk_widget_destroy ( dialog ); return TRUE; } @@ -264,8 +327,8 @@ gboolean a_dialog_new_waypoint ( GtkWindow *parent, gchar **dest, VikWaypoint *w } else { - ll.lat = atof ( gtk_entry_get_text ( GTK_ENTRY(latentry) ) ); - ll.lon = atof ( gtk_entry_get_text ( GTK_ENTRY(lonentry) ) ); + ll.lat = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(latentry) ) ); + ll.lon = convert_dms_to_dec ( gtk_entry_get_text ( GTK_ENTRY(lonentry) ) ); vik_coord_load_from_latlon ( &(wp->coord), coord_mode, &ll ); wp->altitude = atof ( gtk_entry_get_text ( GTK_ENTRY(altentry) ) ); if ( (! wp->comment) || strcmp ( wp->comment, gtk_entry_get_text ( GTK_ENTRY(commententry) ) ) != 0 ) @@ -277,6 +340,19 @@ gboolean a_dialog_new_waypoint ( GtkWindow *parent, gchar **dest, VikWaypoint *w a_thumbnails_create ( wp->image ); } + { + GtkTreeIter iter, first; + gtk_tree_model_get_iter_first ( GTK_TREE_MODEL(store), &first ); + if ( !gtk_combo_box_get_active_iter ( GTK_COMBO_BOX(symbolentry), &iter ) || !memcmp(&iter, &first, sizeof(GtkTreeIter)) ) { + vik_waypoint_set_symbol ( wp, NULL ); + } else { + gchar *sym; + gtk_tree_model_get ( GTK_TREE_MODEL(store), &iter, 0, (void *)&sym, -1 ); + vik_waypoint_set_symbol ( wp, sym ); + g_free(sym); + } + } + gtk_widget_destroy ( dialog ); return TRUE; @@ -492,3 +568,84 @@ gboolean a_dialog_time_threshold ( GtkWindow *parent, gchar *title_text, gchar * gtk_widget_destroy ( dialog ); return FALSE; } + + +void a_dialog_about ( GtkWindow *parent ) +{ + int re; + char *msg = g_markup_printf_escaped ( + "Viking %s\n\n" + "GPS Data and Topo Analyzer, Explorer, and Manager.\n\n" + "(C) 2003-2007, Evan Battaglia\n\n" + "Web site: %s", + VIKING_VERSION, VIKING_URL); + GtkWidget *msgbox = gtk_message_dialog_new_with_markup ( parent, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_NONE, + msg); + + gtk_dialog_add_buttons (GTK_DIALOG(msgbox), "Credits", 1, "License", 2, "Close", 3, NULL, NULL); + + while ((re = gtk_dialog_run ( GTK_DIALOG(msgbox))) != 3) { + if (re==1) { + /* creds */ + a_dialog_info_msg(parent, AUTHORS); + } + if (re==2) { + a_dialog_info_msg(parent, "\n\n" + "This program is free software; you can redistribute it and/or modify " + "it under the terms of the GNU General Public License as published by " + "the Free Software Foundation; either version 2 of the License, or " + "(at your option) any later version." + "\n\n" + "This program is distributed in the hope that it will be useful, " + "but WITHOUT ANY WARRANTY; without even the implied warranty of " + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the " + "GNU General Public License for more details." + "\n\n" + "You should have received a copy of the GNU General Public License " + "along with this program; if not, write to the Free Software " + "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA"); + } + } + gtk_widget_destroy ( msgbox ); +} + +gboolean a_dialog_map_n_zoom(GtkWindow *parent, gchar *mapnames[], gint default_map, gchar *zoom_list[], gint default_zoom, gint *selected_map, gint *selected_zoom) +{ + gchar **s; + + GtkWidget *dialog = gtk_dialog_new_with_buttons ( "Download along track", parent, 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL ); + + GtkWidget *map_label = gtk_label_new("Map type:"); + GtkWidget *map_combo = GTK_COMBO_BOX(gtk_combo_box_new_text()); + for (s = mapnames; *s; s++) + gtk_combo_box_append_text(map_combo, *s); + gtk_combo_box_set_active (map_combo, default_map); + GtkWidget *zoom_label = gtk_label_new("Zoom level:"); + GtkWidget *zoom_combo = GTK_COMBO_BOX(gtk_combo_box_new_text()); + for (s = zoom_list; *s; s++) + gtk_combo_box_append_text(zoom_combo, *s); + gtk_combo_box_set_active (zoom_combo, default_zoom); + + GtkTable *box = GTK_TABLE(gtk_table_new(2, 2, FALSE)); + gtk_table_attach_defaults(box, GTK_WIDGET(map_label), 0, 1, 0, 1); + gtk_table_attach_defaults(box, GTK_WIDGET(map_combo), 1, 2, 0, 1); + gtk_table_attach_defaults(box, GTK_WIDGET(zoom_label), 0, 1, 1, 2); + gtk_table_attach_defaults(box, GTK_WIDGET(zoom_combo), 1, 2, 1, 2); + + gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(box), FALSE, FALSE, 5 ); + + gtk_widget_show_all ( dialog ); + if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) != GTK_RESPONSE_ACCEPT ) { + gtk_widget_destroy(dialog); + return FALSE; + } + + *selected_map = gtk_combo_box_get_active(map_combo); + *selected_zoom = gtk_combo_box_get_active(zoom_combo); + + gtk_widget_destroy(dialog); + return TRUE; +}