City changed code
This updates the coordinates on the Edit tab, too
This commit is contained in:
		
							
								
								
									
										118
									
								
								src/ag-window.c
									
									
									
									
									
								
							
							
						
						
									
										118
									
								
								src/ag-window.c
									
									
									
									
									
								
							| @@ -60,6 +60,7 @@ struct _AgWindowPrivate { | |||||||
|     GtkEntryCompletion *country_comp; |     GtkEntryCompletion *country_comp; | ||||||
|     GtkEntryCompletion *city_comp; |     GtkEntryCompletion *city_comp; | ||||||
|     gchar              *selected_country; |     gchar              *selected_country; | ||||||
|  |     gchar              *selected_city; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| struct cc_search { | struct cc_search { | ||||||
| @@ -75,7 +76,7 @@ G_DEFINE_TYPE_WITH_PRIVATE(AgWindow, ag_window, GTK_TYPE_APPLICATION_WINDOW); | |||||||
| static void | static void | ||||||
| ag_window_gear_menu_action(GSimpleAction *action, | ag_window_gear_menu_action(GSimpleAction *action, | ||||||
|                            GVariant      *parameter, |                            GVariant      *parameter, | ||||||
|                            gpointer user_data) |                            gpointer      user_data) | ||||||
| { | { | ||||||
|     GVariant *state; |     GVariant *state; | ||||||
|  |  | ||||||
| @@ -1682,9 +1683,124 @@ ag_window_country_changed_callback(GtkSearchEntry *country, AgWindow *window) | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static gboolean | ||||||
|  | ag_window_find_city(GtkTreeModel     *model, | ||||||
|  |                     GtkTreePath      *path, | ||||||
|  |                     GtkTreeIter      *iter, | ||||||
|  |                     struct cc_search *search) | ||||||
|  | { | ||||||
|  |     gchar    *name, | ||||||
|  |              *ccode; | ||||||
|  |     gboolean found = FALSE; | ||||||
|  |  | ||||||
|  |     gtk_tree_model_get( | ||||||
|  |             model, iter, | ||||||
|  |             AG_CITY_NAME, &name, | ||||||
|  |             AG_CITY_COUNTRY, &ccode, | ||||||
|  |             -1 | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |     if (g_utf8_collate(search->target, name) == 0) { | ||||||
|  |         found = TRUE; | ||||||
|  |         search->ret_iter = gtk_tree_iter_copy(iter); | ||||||
|  |         search->ret_code = ccode; | ||||||
|  |     } else { | ||||||
|  |         g_free(ccode); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return found; | ||||||
|  | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| ag_window_city_changed_callback(GtkSearchEntry *city, AgWindow *window) | ag_window_city_changed_callback(GtkSearchEntry *city, AgWindow *window) | ||||||
| { | { | ||||||
|  |     struct cc_search search; | ||||||
|  |     AgWindowPrivate  *priv = ag_window_get_instance_private(window); | ||||||
|  |  | ||||||
|  |     search.target   = gtk_entry_get_text(GTK_ENTRY(city)); | ||||||
|  |     search.ret_iter = NULL; | ||||||
|  |  | ||||||
|  |     gtk_tree_model_foreach( | ||||||
|  |             city_list, | ||||||
|  |             (GtkTreeModelForeachFunc)ag_window_find_city, | ||||||
|  |             &search | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |     g_free(priv->selected_city); | ||||||
|  |  | ||||||
|  |     if (search.ret_iter != NULL) { | ||||||
|  |         gdouble longitude, | ||||||
|  |                 latitude, | ||||||
|  |                 altitude; | ||||||
|  |         gchar   *name, | ||||||
|  |                 *ccode; | ||||||
|  |  | ||||||
|  |         gtk_tree_model_get( | ||||||
|  |                 city_list, search.ret_iter, | ||||||
|  |                 AG_CITY_COUNTRY, &ccode, | ||||||
|  |                 AG_CITY_NAME,    &name, | ||||||
|  |                 AG_CITY_LAT,     &latitude, | ||||||
|  |                 AG_CITY_LONG,    &longitude, | ||||||
|  |                 AG_CITY_ALT,     &altitude, | ||||||
|  |                 -1 | ||||||
|  |             ); | ||||||
|  |  | ||||||
|  |         if ( | ||||||
|  |                     (priv->selected_country != NULL) | ||||||
|  |                     && (strcmp(priv->selected_country, ccode) != 0) | ||||||
|  |                 ) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (latitude < 0.0) { | ||||||
|  |             gtk_toggle_button_set_active( | ||||||
|  |                     GTK_TOGGLE_BUTTON(priv->south_lat), | ||||||
|  |                     TRUE | ||||||
|  |                 ); | ||||||
|  |             gtk_spin_button_set_value( | ||||||
|  |                     GTK_SPIN_BUTTON(priv->latitude), | ||||||
|  |                     -latitude | ||||||
|  |                 ); | ||||||
|  |         } else { | ||||||
|  |             gtk_toggle_button_set_active( | ||||||
|  |                     GTK_TOGGLE_BUTTON(priv->north_lat), | ||||||
|  |                     TRUE | ||||||
|  |                 ); | ||||||
|  |             gtk_spin_button_set_value( | ||||||
|  |                     GTK_SPIN_BUTTON(priv->latitude), | ||||||
|  |                     latitude | ||||||
|  |                 ); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (longitude < 0.0) { | ||||||
|  |             gtk_toggle_button_set_active( | ||||||
|  |                     GTK_TOGGLE_BUTTON(priv->west_long), | ||||||
|  |                     TRUE | ||||||
|  |                 ); | ||||||
|  |             gtk_spin_button_set_value( | ||||||
|  |                     GTK_SPIN_BUTTON(priv->longitude), | ||||||
|  |                     -longitude | ||||||
|  |                 ); | ||||||
|  |         } else { | ||||||
|  |             gtk_toggle_button_set_active( | ||||||
|  |                     GTK_TOGGLE_BUTTON(priv->east_long), | ||||||
|  |                     TRUE | ||||||
|  |                 ); | ||||||
|  |             gtk_spin_button_set_value( | ||||||
|  |                     GTK_SPIN_BUTTON(priv->longitude), | ||||||
|  |                     longitude | ||||||
|  |                 ); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // TODO: implement setting altitude maybe? Is that really necessary? | ||||||
|  |  | ||||||
|  |         g_debug("City (entry-changed): %s (%s); %.6f, %.6f, %.6f", name, search.ret_code, longitude, latitude, altitude); | ||||||
|  |         g_free(name); | ||||||
|  |         gtk_tree_iter_free(search.ret_iter); | ||||||
|  |         priv->selected_city = search.ret_code; | ||||||
|  |     } else { | ||||||
|  |         priv->selected_city = NULL; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user