]> git.street.me.uk Git - andy/viking.git/commitdiff
Add a 'home' default location preference.
authorGuilhem Bonnefille <guilhem.bonnefille@gmail.com>
Wed, 19 May 2010 20:33:21 +0000 (22:33 +0200)
committerGuilhem Bonnefille <guilhem.bonnefille@gmail.com>
Wed, 19 May 2010 20:33:21 +0000 (22:33 +0200)
Store the location in lat/long format in the preferences - can set values directly.
Add more user friendly method: can set it to the current position via an Edit menu 'Set Default Position' command.
Add tool bar button to jump to the home location.

src/globals.c
src/globals.h
src/menu.xml.h
src/vikviewport.c
src/vikwindow.c

index ceb016f5315a263761e392a2376f76474a292ae8..2ff38e3ecfa4a8899c6d183faba21e0bc04af9f3 100644 (file)
@@ -35,7 +35,9 @@ static gchar * params_degree_formats[] = {"DDD", "DMM", "DMS", NULL};
 static gchar * params_units_distance[] = {"Kilometres", "Miles", NULL};
 static gchar * params_units_speed[] = {"km/h", "mph", "m/s", NULL};
 static gchar * params_units_height[] = {"Metres", "Feet", NULL};
-
+static VikLayerParamScale params_scales_lat[] = { {-90.0, 90.0, 0.05, 2} };
+static VikLayerParamScale params_scales_long[] = { {-180.0, 180.0, 0.05, 2} };
 static VikLayerParam prefs1[] = {
   { VIKING_PREFERENCES_NAMESPACE "degree_format", VIK_LAYER_PARAM_UINT, VIK_DEGREE_FORMAT_DMS, N_("Degree format:"), VIK_LAYER_WIDGET_COMBOBOX, params_degree_formats, NULL },
 };
@@ -56,6 +58,13 @@ static VikLayerParam prefs5[] = {
   { VIKING_PREFERENCES_NAMESPACE "use_large_waypoint_icons", VIK_LAYER_PARAM_BOOLEAN, TRUE, N_("Use large waypoint icons:"), VIK_LAYER_WIDGET_CHECKBUTTON, NULL, NULL },
 };
 
+static VikLayerParam prefs6[] = {
+  { VIKING_PREFERENCES_NAMESPACE "default_latitude", VIK_LAYER_PARAM_DOUBLE, VIK_LOCATION_LAT, N_("Default latitude:"),  VIK_LAYER_WIDGET_SPINBUTTON, params_scales_lat, NULL },
+};
+static VikLayerParam prefs7[] = {
+  { VIKING_PREFERENCES_NAMESPACE "default_longitude", VIK_LAYER_PARAM_DOUBLE, VIK_LOCATION_LONG, N_("Default longitude:"),  VIK_LAYER_WIDGET_SPINBUTTON, params_scales_long, NULL },
+};
+
 void a_vik_preferences_init ()
 {
   a_preferences_register_group ( VIKING_PREFERENCES_GROUP_KEY, "Global preferences" );
@@ -75,6 +84,12 @@ void a_vik_preferences_init ()
 
   tmp.b = TRUE;
   a_preferences_register(prefs5, tmp, VIKING_PREFERENCES_GROUP_KEY);
+
+  /* Maintain the default location to New York */
+  tmp.d = 40.714490;
+  a_preferences_register(prefs6, tmp, VIKING_PREFERENCES_GROUP_KEY);
+  tmp.d = -74.007130;
+  a_preferences_register(prefs7, tmp, VIKING_PREFERENCES_GROUP_KEY);
 }
 
 vik_degree_format_t a_vik_get_degree_format ( )
@@ -111,3 +126,17 @@ gboolean a_vik_get_use_large_waypoint_icons ( )
   use_large_waypoint_icons = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "use_large_waypoint_icons")->b;
   return use_large_waypoint_icons;
 }
+
+gdouble a_vik_get_default_lat ( )
+{
+  gdouble data;
+  data = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "default_latitude")->d;
+  return data;
+}
+
+gdouble a_vik_get_default_long ( )
+{
+  gdouble data;
+  data = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "default_longitude")->d;
+  return data;
+}
index 2acfce9dbc68a1c75ff075d73a64b2f785687a71..89f8d3840b412c017609ca0f4b935bd4f65554c9 100644 (file)
@@ -89,6 +89,15 @@ vik_units_height_t a_vik_get_units_height ( );
 
 gboolean a_vik_get_use_large_waypoint_icons ( );
 
+/* Location preferences */
+typedef enum {
+  VIK_LOCATION_LAT,
+  VIK_LOCATION_LONG,
+} vik_location_t;
+
+gdouble a_vik_get_default_lat ( );
+gdouble a_vik_get_default_long ( );
+
 /* Group for global preferences */
 #define VIKING_PREFERENCES_GROUP_KEY "viking.globals"
 #define VIKING_PREFERENCES_NAMESPACE "viking.globals."
index a9a8a415645aeb94ecbcd18e0501e991d3104db0..6c874959674b1e41d81665014fc0cf9d89e1a31a 100644 (file)
@@ -37,6 +37,7 @@ static const char *menu_xml =
        "      <menuitem action='DeleteAll'/>"
        "      <separator/>"
        "      <menuitem action='MapCacheFlush'/>"
+       "      <menuitem action='SetDefaultLocation'/>"
        "      <menuitem action='Preferences'/>"
        "    </menu>"
        "    <menu action='View'>"
@@ -46,6 +47,7 @@ static const char *menu_xml =
 #endif
        "      <menuitem action='ModeMercator'/>"
        "      <separator/>"
+       "      <menuitem action='GotoDefaultLocation'/>"
        "      <menuitem action='GotoSearch'/>"
        "      <menuitem action='GotoLL'/>"
        "      <menuitem action='GotoUTM'/>"
@@ -119,6 +121,7 @@ static const char *menu_xml =
        "      <separator/>"
        "    </placeholder>"
        "    <placeholder name='ViewToolItems'>"
+       "      <toolitem action='GotoDefaultLocation'/>"
        "      <toolitem action='GotoSearch'/>"
        "      <separator/>"
        "    </placeholder>"
index cb99566aeeb3d4597c787aae0886d5063e3f151c..3c063b04a90bcfeb719bfc7e7118b6950a367200 100644 (file)
@@ -162,16 +162,22 @@ static void viewport_init ( VikViewport *vvp )
 {
   viewport_init_ra();
 
+  struct UTM utm;
+  struct LatLon ll;
+  ll.lat = a_vik_get_default_lat();
+  ll.lon = a_vik_get_default_long();
+  a_coords_latlon_to_utm ( &ll, &utm );
+
   /* TODO: not static */
   vvp->xmpp = 4.0;
   vvp->ympp = 4.0;
   vvp->coord_mode = VIK_COORD_LATLON;
   vvp->drawmode = VIK_VIEWPORT_DRAWMODE_MERCATOR;
   vvp->center.mode = VIK_COORD_LATLON;
-  vvp->center.north_south = 40.714490;
-  vvp->center.east_west = -74.007130;
-  vvp->center.utm_zone = 31;
-  vvp->center.utm_letter = 'N';
+  vvp->center.north_south = ll.lat;
+  vvp->center.east_west = ll.lon;
+  vvp->center.utm_zone = (int)utm.zone;
+  vvp->center.utm_letter = utm.letter;
   vvp->scr_buffer = NULL;
   vvp->alpha_pixbuf = NULL;
   vvp->alpha_pixbuf_width = vvp->alpha_pixbuf_height = 0;
index 8c5eb39a6b5c1b48bab00420060fc9e15fafede8..9a128668a74593d6d41182f4cc2c7feb55293585 100644 (file)
@@ -1618,6 +1618,16 @@ static void acquire_from_gc ( GtkAction *a, VikWindow *vw )
 }
 #endif
 
+static void goto_default_location( GtkAction *a, VikWindow *vw)
+{
+  struct LatLon ll;
+  ll.lat = a_vik_get_default_lat();
+  ll.lon = a_vik_get_default_long();
+  vik_viewport_set_center_latlon(vw->viking_vvp, &ll);
+  vik_layers_panel_emit_update(vw->viking_vlp);
+}
+
+
 static void goto_address( GtkAction *a, VikWindow *vw)
 {
   a_vik_goto(vw, vw->viking_vlp, vw->viking_vvp);
@@ -1641,6 +1651,43 @@ static void preferences_cb ( GtkAction *a, VikWindow *vw )
   draw_update ( vw );
 }
 
+static void default_location_cb ( GtkAction *a, VikWindow *vw )
+{
+  /* Simplistic repeat of preference setting
+     Only the name & type are important for setting the preference via this 'external' way */
+  VikLayerParam pref_lat[] = {
+    { VIKING_PREFERENCES_NAMESPACE "default_latitude",
+      VIK_LAYER_PARAM_DOUBLE,
+      VIK_LOCATION_LAT,
+      NULL,
+      VIK_LAYER_WIDGET_SPINBUTTON,
+      NULL,
+      NULL },
+  };
+  VikLayerParam pref_lon[] = {
+    { VIKING_PREFERENCES_NAMESPACE "default_longitude",
+      VIK_LAYER_PARAM_DOUBLE,
+      VIK_LOCATION_LONG,
+      NULL,
+      VIK_LAYER_WIDGET_SPINBUTTON,
+      NULL,
+      NULL },
+  };
+
+  /* Get current center */
+  struct LatLon ll;
+  vik_coord_to_latlon ( vik_viewport_get_center ( vw->viking_vvp ), &ll );
+
+  /* Apply to preferences */
+  VikLayerParamData vlp_data;
+  vlp_data.d = ll.lat;
+  a_preferences_run_setparam (vlp_data, pref_lat);
+  vlp_data.d = ll.lon;
+  a_preferences_run_setparam (vlp_data, pref_lon);
+  /* Remember to save */
+  a_preferences_save_to_file();
+}
+
 static void clear_cb ( GtkAction *a, VikWindow *vw )
 {
   vik_layers_panel_clear ( vw->viking_vlp );
@@ -2113,6 +2160,7 @@ static GtkActionEntry entries[] = {
   { "Exit",      GTK_STOCK_QUIT,         N_("E_xit"),                         "<control>W", N_("Exit the program"),                             (GCallback)window_close          },
   { "SaveExit",  GTK_STOCK_QUIT,         N_("Save and Exit"),                 NULL, N_("Save and Exit the program"),                             (GCallback)save_file_and_exit          },
 
+  { "GotoDefaultLocation", GTK_STOCK_HOME, N_("Go to the _Default Location"),  NULL,         N_("Go to the default location"),                     (GCallback)goto_default_location },
   { "GotoSearch", GTK_STOCK_JUMP_TO,     N_("Go to Location..."),            NULL,         N_("Go to address/place using text search"),        (GCallback)goto_address       },
   { "GotoLL",    GTK_STOCK_JUMP_TO,      N_("_Go to Lat/Lon..."),           NULL,         N_("Go to arbitrary lat/lon coordinate"),         (GCallback)draw_goto_cb          },
   { "GotoUTM",   GTK_STOCK_JUMP_TO,      N_("Go to UTM..."),                  NULL,         N_("Go to arbitrary UTM coordinate"),               (GCallback)draw_goto_cb          },
@@ -2150,6 +2198,7 @@ static GtkActionEntry entries[] = {
   { "Delete",    GTK_STOCK_DELETE,       N_("_Delete"),                       NULL,         NULL,                                           (GCallback)menu_delete_layer_cb  },
   { "DeleteAll", NULL,                   N_("Delete All"),                    NULL,         NULL,                                           (GCallback)clear_cb              },
   { "MapCacheFlush",NULL,                N_("_Flush Map Cache"),              NULL,         NULL,                                           (GCallback)mapcache_flush_cb     },
+  { "SetDefaultLocation", GTK_STOCK_GO_FORWARD, N_("_Set the Default Location"), NULL, N_("Set the Default Location to the current position"),(GCallback)default_location_cb },
   { "Preferences",GTK_STOCK_PREFERENCES, N_("_Preferences"),                  NULL,         NULL,                                           (GCallback)preferences_cb              },
   { "Properties",GTK_STOCK_PROPERTIES,   N_("_Properties"),                   NULL,         NULL,                                           (GCallback)menu_properties_cb    },