]> git.street.me.uk Git - andy/viking.git/commitdiff
Merge branch 'Geotagging'
authorRob Norris <rw_norris@hotmail.com>
Mon, 19 Dec 2011 22:15:02 +0000 (22:15 +0000)
committerRob Norris <rw_norris@hotmail.com>
Mon, 19 Dec 2011 22:15:02 +0000 (22:15 +0000)
Conflicts:
src/file.c

Resolve KML units setting with babel function parameter ordering from commits:
60dbd0ad7333bcc0502106e003ce321dfbf75ea2 + 9181183a2880930d694fddef2582c75ffffa3d53

src/file.c
src/globals.c
src/globals.h
src/viktrwlayer.c
src/viktrwlayer_propwin.c

index da26c5a2c3b0c0e1ee61d7987d0a317e96f7b2a9..3fb200b36e7d6bb960b9a29db88af079e8bd8943 100644 (file)
@@ -711,8 +711,19 @@ gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t
         case FILE_TYPE_KML:
          fclose ( f );
          f = NULL;
-          return a_babel_convert_to ( vtl, "-o kml", filename, NULL, NULL );
-          break;
+         switch ( a_vik_get_kml_export_units () ) {
+           case VIK_KML_EXPORT_UNITS_STATUTE:
+             return a_babel_convert_to ( vtl, "-o kml", filename, NULL, NULL );
+             break;
+           case VIK_KML_EXPORT_UNITS_NAUTICAL:
+             return a_babel_convert_to ( vtl, "-o kml,units=n", filename, NULL, NULL );
+             break;
+           default:
+             // VIK_KML_EXPORT_UNITS_METRIC:
+             return a_babel_convert_to ( vtl, "-o kml,units=m", filename, NULL, NULL );
+             break;
+         }
+         break;
         default:
           g_critical("Houston, we've had a problem. file_type=%d", file_type);
       }
index 700dcede4d491df23df42bc0f076e0356efcc03a..67d6b19daf902c2dea06fd1b48d6d5427435bec8 100644 (file)
@@ -41,34 +41,51 @@ 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 },
+  { VIKING_PREFERENCES_NAMESPACE "degree_format", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Degree format:"), VIK_LAYER_WIDGET_COMBOBOX, params_degree_formats, NULL },
 };
 
 static VikLayerParam prefs2[] = {
-  { VIKING_PREFERENCES_NAMESPACE "units_distance", VIK_LAYER_PARAM_UINT, VIK_UNITS_DISTANCE_KILOMETRES, N_("Distance units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_distance, NULL },
+  { VIKING_PREFERENCES_NAMESPACE "units_distance", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Distance units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_distance, NULL },
 };
 
 static VikLayerParam prefs3[] = {
-  { VIKING_PREFERENCES_NAMESPACE "units_speed", VIK_LAYER_PARAM_UINT, VIK_UNITS_SPEED_KILOMETRES_PER_HOUR, N_("Speed units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_speed, NULL },
+  { VIKING_PREFERENCES_NAMESPACE "units_speed", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Speed units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_speed, NULL },
 };
 
 static VikLayerParam prefs4[] = {
-  { VIKING_PREFERENCES_NAMESPACE "units_height", VIK_LAYER_PARAM_UINT, VIK_UNITS_HEIGHT_METRES, N_("Height units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_height, NULL },
+  { VIKING_PREFERENCES_NAMESPACE "units_height", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Height units:"), VIK_LAYER_WIDGET_COMBOBOX, params_units_height, NULL },
 };
 
 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 },
+  { VIKING_PREFERENCES_NAMESPACE "use_large_waypoint_icons", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_GROUP_NONE, 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 },
+  { VIKING_PREFERENCES_NAMESPACE "default_latitude", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_GROUP_NONE, 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 },
+  { VIKING_PREFERENCES_NAMESPACE "default_longitude", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_GROUP_NONE, N_("Default longitude:"),  VIK_LAYER_WIDGET_SPINBUTTON, params_scales_long, NULL },
 };
 
+/* External/Export Options */
+
+static gchar * params_kml_export_units[] = {"Metric", "Statute", "Nautical", NULL};
+
+static VikLayerParam io_prefs[] = {
+  { VIKING_PREFERENCES_IO_NAMESPACE "kml_export_units", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("KML File Export Units:"), VIK_LAYER_WIDGET_COMBOBOX, params_kml_export_units, NULL },
+};
+
+#ifndef WINDOWS
+static VikLayerParam io_prefs_non_windows[] = {
+  { VIKING_PREFERENCES_IO_NAMESPACE "image_viewer", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Image Viewer:"), VIK_LAYER_WIDGET_FILEENTRY, NULL, NULL },
+};
+#endif
+
+/* End of Options static stuff */
+
 void a_vik_preferences_init ()
 {
+  // Defaults for the options are setup here
   a_preferences_register_group ( VIKING_PREFERENCES_GROUP_KEY, _("General") );
 
   VikLayerParamData tmp;
@@ -92,6 +109,17 @@ void a_vik_preferences_init ()
   a_preferences_register(prefs6, tmp, VIKING_PREFERENCES_GROUP_KEY);
   tmp.d = -74.007130;
   a_preferences_register(prefs7, tmp, VIKING_PREFERENCES_GROUP_KEY);
+
+  // New Tab
+  a_preferences_register_group ( VIKING_PREFERENCES_IO_GROUP_KEY, _("Export/External") );
+
+  tmp.u = VIK_KML_EXPORT_UNITS_METRIC;
+  a_preferences_register(&io_prefs[0], tmp, VIKING_PREFERENCES_IO_GROUP_KEY);
+
+#ifndef WINDOWS
+  tmp.s = "xdg-open";
+  a_preferences_register(&io_prefs_non_windows[0], tmp, VIKING_PREFERENCES_IO_GROUP_KEY);
+#endif
 }
 
 vik_degree_format_t a_vik_get_degree_format ( )
@@ -142,3 +170,19 @@ gdouble a_vik_get_default_long ( )
   data = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "default_longitude")->d;
   return data;
 }
+
+/* External/Export Options */
+
+vik_kml_export_units_t a_vik_get_kml_export_units ( )
+{
+  vik_kml_export_units_t units;
+  units = a_preferences_get(VIKING_PREFERENCES_NAMESPACE "kml_export_units")->u;
+  return units;
+}
+
+#ifndef WINDOWS
+const gchar* a_vik_get_image_viewer ( )
+{
+  return a_preferences_get(VIKING_PREFERENCES_IO_NAMESPACE "image_viewer")->s;
+}
+#endif
index 40d58d58260c0e075dec679b899fecfa7a1dd5a6..ece936b6afa369759a42b7efc623ed808cdb05e8 100644 (file)
@@ -122,8 +122,29 @@ typedef enum {
 gdouble a_vik_get_default_lat ( );
 gdouble a_vik_get_default_long ( );
 
+/* KML export preferences */
+typedef enum {
+  VIK_KML_EXPORT_UNITS_METRIC,
+  VIK_KML_EXPORT_UNITS_STATUTE,
+  VIK_KML_EXPORT_UNITS_NAUTICAL,
+} vik_kml_export_units_t;
+
+vik_kml_export_units_t a_vik_get_kml_export_units ( );
+
+#ifndef WINDOWS
+/* Windows automatically uses the system defined viewer
+   ATM for other systems need to specify the program to use */
+const gchar* a_vik_get_image_viewer ( );
+#endif
+
 /* Group for global preferences */
 #define VIKING_PREFERENCES_GROUP_KEY "viking.globals"
 #define VIKING_PREFERENCES_NAMESPACE "viking.globals."
 
+/* Another group of global preferences,
+  but in a separate section to try to keep things organized */
+/* AKA Export/External Prefs */
+#define VIKING_PREFERENCES_IO_GROUP_KEY "viking.io"
+#define VIKING_PREFERENCES_IO_NAMESPACE "viking.io."
+
 #endif
index 2d04a94d3c37cb2bab551cb24228c64f88d90d86..3b2df1dec1a2a184d4a5dde6fde2c7e128281ed1 100644 (file)
@@ -1183,16 +1183,39 @@ static void trw_layer_draw_track ( const gchar *name, VikTrack *track, struct Dr
       {
         vik_viewport_coord_to_screen ( dp->vp, &(tp->coord), &x, &y );
 
+       /*
+        * If points are the same in display coordinates, don't draw.
+        */
+       if ( useoldvals && x == oldx && y == oldy )
+       {
+         // Still need to process points to ensure 'stops' are drawn if required
+         if ( drawstops && drawpoints && ! drawing_white_background && list->next &&
+              (VIK_TRACKPOINT(list->next->data)->timestamp - VIK_TRACKPOINT(list->data)->timestamp > dp->vtl->stop_length) )
+           vik_viewport_draw_arc ( dp->vp, g_array_index(dp->vtl->track_gc, GdkGC *, 11), TRUE, x-(3*tp_size), y-(3*tp_size), 6*tp_size, 6*tp_size, 0, 360*64 );
+
+         goto skip;
+       }
+
         if ( drawpoints && ! drawing_white_background )
         {
           if ( list->next ) {
-            vik_viewport_draw_rectangle ( dp->vp, main_gc, TRUE, x-tp_size, y-tp_size, 2*tp_size, 2*tp_size );
-
+           /*
+            * The concept of drawing stops is that a trackpoint
+            * that is if the next trackpoint has a timestamp far into
+            * the future, we draw a circle of 6x trackpoint size,
+            * instead of a rectangle of 2x trackpoint size.
+            * This is drawn first so the trackpoint will be drawn on top
+            */
             /* stops */
             if ( drawstops && VIK_TRACKPOINT(list->next->data)->timestamp - VIK_TRACKPOINT(list->data)->timestamp > dp->vtl->stop_length )
+             /* Stop point.  Draw 6x circle. */
               vik_viewport_draw_arc ( dp->vp, g_array_index(dp->vtl->track_gc, GdkGC *, 11), TRUE, x-(3*tp_size), y-(3*tp_size), 6*tp_size, 6*tp_size, 0, 360*64 );
+
+           /* Regular point - draw 2x square. */
+           vik_viewport_draw_rectangle ( dp->vp, main_gc, TRUE, x-tp_size, y-tp_size, 2*tp_size, 2*tp_size );
           }
           else
+           /* Final point - draw 4x circle. */
             vik_viewport_draw_arc ( dp->vp, main_gc, TRUE, x-(2*tp_size), y-(2*tp_size), 4*tp_size, 4*tp_size, 0, 360*64 );
         }
 
@@ -1243,6 +1266,7 @@ static void trw_layer_draw_track ( const gchar *name, VikTrack *track, struct Dr
           }
         }
 
+      skip:
         oldx = x;
         oldy = y;
         useoldvals = TRUE;
@@ -1259,15 +1283,27 @@ static void trw_layer_draw_track ( const gchar *name, VikTrack *track, struct Dr
               main_gc = g_array_index(dp->vtl->track_gc, GdkGC *, dp->track_gc_iter);
             }
 
-            if ( drawing_white_background )
-              vik_viewport_draw_line ( dp->vp, dp->vtl->track_bg_gc, oldx, oldy, x, y);
-            else
-              vik_viewport_draw_line ( dp->vp, main_gc, oldx, oldy, x, y);
+           /*
+            * If points are the same in display coordinates, don't draw.
+            */
+           if ( x != oldx || y != oldy )
+             {
+               if ( drawing_white_background )
+                 vik_viewport_draw_line ( dp->vp, dp->vtl->track_bg_gc, oldx, oldy, x, y);
+               else
+                 vik_viewport_draw_line ( dp->vp, main_gc, oldx, oldy, x, y);
+             }
           }
           else 
           {
-            vik_viewport_coord_to_screen ( dp->vp, &(tp2->coord), &x, &y );
-            draw_utm_skip_insignia ( dp->vp, main_gc, x, y );
+           /*
+            * If points are the same in display coordinates, don't draw.
+            */
+           if ( x != oldx && y != oldy )
+             {
+               vik_viewport_coord_to_screen ( dp->vp, &(tp2->coord), &x, &y );
+               draw_utm_skip_insignia ( dp->vp, main_gc, x, y );
+             }
           }
         }
         useoldvals = FALSE;
@@ -5658,11 +5694,11 @@ static void trw_layer_show_picture ( gpointer pass_along[6] )
 #else /* WINDOWS */
   GError *err = NULL;
   gchar *quoted_file = g_shell_quote ( (gchar *) pass_along[5] );
-  gchar *cmd = g_strdup_printf ( "eog %s", quoted_file );
+  gchar *cmd = g_strdup_printf ( "%s %s", a_vik_get_image_viewer(), quoted_file );
   g_free ( quoted_file );
   if ( ! g_spawn_command_line_async ( cmd, &err ) )
     {
-      a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_LAYER( pass_along[0]), _("Could not launch eog to open file.") );
+      a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_LAYER( pass_along[0]), _("Could not launch %s to open file."), a_vik_get_image_viewer() );
       g_error_free ( err );
     }
   g_free ( cmd );
index 89a013dfcb81e4c85b8ce808f2ac065d381e44e7..87edaf87a835e8dc8e7ab9f6a2b2104f028ba8bb 100644 (file)
@@ -1082,7 +1082,7 @@ static void draw_dem_alt_speed_dist(VikTrack *tr,
        // No conversion needed if already in metres
 
        // consider chunk size
-       int y_alt = height - ((height * (elev-alt_offset))/(chunksa[cia]*LINES) );
+       int y_alt = height - ((height * elev)/(chunksa[cia]*LINES) );
        gdk_draw_rectangle(GDK_DRAWABLE(pix), alt_gc, TRUE, x-2, y_alt-2, 4, 4);
       }
     }