void a_geonames_search(VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp) { VikCoord new_center; gchar *s_str; gboolean more = TRUE; int ret; do { s_str = a_prompt_for_search_string(vw); if ((!s_str) || (s_str[0] == 0)) { more = FALSE; } else { ret = geonames_search_get_coord(vw, vvp, s_str, &new_center); if (ret == 1) { vik_viewport_set_center_coord(vvp, &new_center); vik_layers_panel_emit_update(vlp); more = FALSE; } else { if (ret == 3) { if (!prompt_try_again(vw)) { more = FALSE; } } } } if (s_str) { g_free(s_str); } } while (more); }
void a_vik_goto(VikWindow *vw, VikViewport *vvp) { VikCoord new_center; gchar *s_str; gboolean more = TRUE; if (goto_tools_list == NULL) { /* Empty list */ display_no_tool(vw); return; } do { s_str = a_prompt_for_goto_string(vw); if ((!s_str) || (s_str[0] == 0)) { more = FALSE; } else if (!vik_goto_tool_get_coord(g_list_nth_data (goto_tools_list, last_goto_tool), vw, vvp, s_str, &new_center)) { if (last_coord) g_free(last_coord); last_coord = g_malloc(sizeof(VikCoord)); *last_coord = new_center; if (last_successful_goto_str) g_free(last_successful_goto_str); last_successful_goto_str = g_strdup(last_goto_str); vik_viewport_set_center_coord(vvp, &new_center, TRUE); more = FALSE; } else if (!prompt_try_again(vw)) more = FALSE; g_free(s_str); } while (more); }
static void trw_layer_waypoint_view ( menu_array_values values ) { VikTrwLayer *vtl = VIK_TRW_LAYER(values[MA_VTL]); VikWaypoint *wpt = VIK_WAYPOINT(values[MA_WPT]); VikViewport *vvp = VIK_VIEWPORT(values[MA_VVP]); vik_viewport_set_center_coord ( vvp, &(wpt->coord), TRUE ); trw_layer_waypoint_select (values); vik_layer_emit_update ( VIK_LAYER(vtl) ); }
static void goto_center_ll ( VikViewport *vp, struct LatLon ll_tl, struct LatLon ll_br ) { VikCoord vc_center; struct LatLon ll_center; ll_center.lat = (ll_tl.lat + ll_br.lat) / 2.0; ll_center.lon = (ll_tl.lon + ll_br.lon) / 2.0; vik_coord_load_from_latlon ( &vc_center, vik_viewport_get_coord_mode (vp), &ll_center ); vik_viewport_set_center_coord ( vp, &vc_center, TRUE ); }
void vik_viewport_set_center_screen ( VikViewport *vvp, int x, int y ) { g_return_if_fail ( vvp != NULL ); if ( vvp->coord_mode == VIK_COORD_UTM ) { /* slightly optimized */ vvp->center.east_west += vvp->xmpp * (x - (vvp->width/2)); vvp->center.north_south += vvp->ympp * ((vvp->height/2) - y); viewport_utm_zone_check ( vvp ); } else { VikCoord tmp; vik_viewport_screen_to_coord ( vvp, x, y, &tmp ); vik_viewport_set_center_coord ( vvp, &tmp ); } }
static void georef_layer_goto_center ( gpointer vgl_vlp[2] ) { VikGeorefLayer *vgl = VIK_GEOREF_LAYER ( vgl_vlp[0] ); VikViewport *vp = vik_layers_panel_get_viewport(VIK_LAYERS_PANEL(vgl_vlp[1])); struct UTM utm; VikCoord coord; vik_coord_to_utm ( vik_viewport_get_center ( vp ), &utm ); utm.easting = vgl->corner.easting + (vgl->width * vgl->mpp_easting / 2); /* only an approximation */ utm.northing = vgl->corner.northing - (vgl->height * vgl->mpp_northing / 2); vik_coord_load_from_utm ( &coord, vik_viewport_get_coord_mode ( vp ), &utm ); vik_viewport_set_center_coord ( vp, &coord ); vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(vgl_vlp[1]) ); }
void a_vik_goto(VikWindow *vw, VikViewport *vvp) { VikCoord new_center; gchar *s_str; gboolean more = TRUE; if (goto_tools_list == NULL) { /* Empty list */ display_no_tool(vw); return; } do { s_str = a_prompt_for_goto_string(vw); if ((!s_str) || (s_str[0] == 0)) { more = FALSE; } else { int ans = vik_goto_tool_get_coord(g_list_nth_data (goto_tools_list, last_goto_tool), vw, vvp, s_str, &new_center); if ( ans == 0 ) { if (last_coord) g_free(last_coord); last_coord = g_malloc(sizeof(VikCoord)); *last_coord = new_center; if (last_successful_goto_str) g_free(last_successful_goto_str); last_successful_goto_str = g_strdup(last_goto_str); vik_viewport_set_center_coord(vvp, &new_center, TRUE); more = FALSE; } else if ( ans == -1 ) { if (!prompt_try_again(vw, _("I don't know that place. Do you want another goto?"))) more = FALSE; } else if (!prompt_try_again(vw, _("Service request failure. Do you want another goto?"))) more = FALSE; } g_free(s_str); } while (more); }