[SCM] gpsprune branch, master, updated. debian/15.1-1-6-g71d1716

Mònica Ramírez Arceda monica at debian.org
Mon Dec 9 11:54:53 UTC 2013


The following commit has been merged in the master branch:
commit eac6a08b7a1e6b465bac681c5964d3776b7d1e13
Author: Mònica Ramírez Arceda <monica at debian.org>
Date:   Mon Dec 9 11:13:50 2013 +0100

    Imported Upstream version 15.2

diff --git a/build.sh b/build.sh
index 329c51f..076945d 100644
--- a/build.sh
+++ b/build.sh
@@ -1,6 +1,6 @@
 # Build script using external exif library
 # Version number
-PRUNENAME=gpsprune_15.1
+PRUNENAME=gpsprune_15.2
 # remove compile directory
 rm -rf compile
 # remove dist directory
diff --git a/tim/prune/GpsPrune.java b/tim/prune/GpsPrune.java
index 1f4d6c8..5cc5c90 100644
--- a/tim/prune/GpsPrune.java
+++ b/tim/prune/GpsPrune.java
@@ -35,9 +35,9 @@ import tim.prune.gui.profile.ProfileChart;
 public class GpsPrune
 {
 	/** Version number of application, used in about screen and for version check */
-	public static final String VERSION_NUMBER = "15.1";
+	public static final String VERSION_NUMBER = "15.2";
 	/** Build number, just used for about screen */
-	public static final String BUILD_NUMBER = "283a";
+	public static final String BUILD_NUMBER = "283b";
 	/** Static reference to App object */
 	private static App APP = null;
 
diff --git a/tim/prune/function/RearrangeWaypointsFunction.java b/tim/prune/function/RearrangeWaypointsFunction.java
index 9007391..e04aea0 100644
--- a/tim/prune/function/RearrangeWaypointsFunction.java
+++ b/tim/prune/function/RearrangeWaypointsFunction.java
@@ -64,6 +64,7 @@ public class RearrangeWaypointsFunction extends GenericFunction
 		}
 		if (success)
 		{
+			_app.getTrackInfo().getSelection().clearAll(); // clear selected point and range
 			_app.completeFunction(undo, I18nManager.getText("confirm.rearrangewaypoints"));
 		}
 		else
diff --git a/tim/prune/function/compress/DouglasPeuckerAlgorithm.java b/tim/prune/function/compress/DouglasPeuckerAlgorithm.java
index 42d7ece..046e72e 100644
--- a/tim/prune/function/compress/DouglasPeuckerAlgorithm.java
+++ b/tim/prune/function/compress/DouglasPeuckerAlgorithm.java
@@ -107,7 +107,7 @@ public class DouglasPeuckerAlgorithm extends SingleParameterAlgorithm
 	private void compressSegment(int[] inFlags, int inSegStart, int inSegEnd,
 		double inThreshold)
 	{
-		//System.out.println("Compress segment " + inSegStart + "-" + inSegEnd);
+		// System.out.println("Compress segment " + inSegStart + "-" + inSegEnd);
 		final int numPoints = inSegEnd - inSegStart + 1;
 		if (numPoints < 3) {return;} // segment too short to compress
 		// Calculate parameters of straight line between first and last
@@ -118,6 +118,17 @@ public class DouglasPeuckerAlgorithm extends SingleParameterAlgorithm
 		// create unit vector perpendicular to AB
 		final double distAB = ab.len();
 		XYpoint perpendicular = new XYpoint(ab.y/distAB, -ab.x/distAB);
+		// Check whether distAB is 0.0 - if so, find furthest point from startxy and compress from start to here and here to end
+		if (distAB <= 0.0)
+		{
+			final int furthestIndex = getFurthestPointIndex(inSegStart, inSegEnd);
+			if (furthestIndex > inSegStart)
+			{
+				compressSegment(inFlags, inSegStart, furthestIndex, inThreshold);
+				compressSegment(inFlags, furthestIndex, inSegEnd, inThreshold);
+			}
+			return;
+		}
 
 		double maxDist = -1.0, dist = -1.0;
 		int furthestIndex = -1;
@@ -172,4 +183,35 @@ public class DouglasPeuckerAlgorithm extends SingleParameterAlgorithm
 	{
 		return "dialog.compress.douglaspeucker.title";
 	}
+
+	/**
+	 * Find the index of the point furthest away from the start and end points
+	 * @param inStartIndex start index of segment to check
+	 * @param inEndIndex end index of segment to check
+	 * @return index of furthest point, or -1 if none found
+	 */
+	private int getFurthestPointIndex(int inStartIndex, int inEndIndex)
+	{
+		int furthestIndex = -1;
+		if (inStartIndex >= 0 && inEndIndex > inStartIndex)
+		{
+			final DataPoint startPoint = _track.getPoint(inStartIndex);
+			double maxDist = 0.0;
+			// Loop over points between start and end
+			for (int i=inStartIndex+1; i<inEndIndex; i++)
+			{
+				DataPoint p = _track.getPoint(i);
+				if (!p.isWaypoint())
+				{
+					double distFromStart = DataPoint.calculateRadiansBetween(startPoint, p);
+					if (distFromStart > maxDist)
+					{
+						furthestIndex = i;
+						maxDist = distFromStart;
+					}
+				}
+			}
+		}
+		return furthestIndex;
+	}
 }
diff --git a/tim/prune/jpeg/ExifGateway.java b/tim/prune/jpeg/ExifGateway.java
index 9fefadf..c11ba2e 100644
--- a/tim/prune/jpeg/ExifGateway.java
+++ b/tim/prune/jpeg/ExifGateway.java
@@ -47,7 +47,10 @@ public abstract class ExifGateway
 				return data;
 			}
 		}
-		catch (LinkageError nolib) {}
+		catch (LinkageError nolib) {
+			System.err.println("Link: " + nolib.getMessage());
+			nolib.printStackTrace();
+		}
 		// Not successful - warn if necessary
 		if (!_exifFailWarned)
 		{
@@ -69,7 +72,6 @@ public abstract class ExifGateway
 	}
 
 
-
 	/**
 	 * @param inNumerator numerator from Rational
 	 * @param inDenominator denominator from Rational
@@ -88,4 +90,19 @@ public abstract class ExifGateway
 		if (inDenominator < 0) denomDbl += correction;
 		return numeratorDbl / denomDbl;
 	}
+
+
+	/**
+	 * @param inNumerator numerator from Rational
+	 * @param inDenominator denominator from Rational
+	 * @return the value of the specified number as a positive <code>double</code>.
+	 * Forces a positive answer
+	 */
+	public static final double convertToPositiveValue(long inNumerator, long inDenominator)
+	{
+		if (inDenominator == 0L) return 0.0;
+		final double numeratorDbl = inNumerator;
+		final double denomDbl = inDenominator;
+		return numeratorDbl / denomDbl;
+	}
 }
diff --git a/tim/prune/jpeg/ExternalExifLibrary.java b/tim/prune/jpeg/ExternalExifLibrary.java
index 0d94f03..496646e 100644
--- a/tim/prune/jpeg/ExternalExifLibrary.java
+++ b/tim/prune/jpeg/ExternalExifLibrary.java
@@ -2,12 +2,14 @@ package tim.prune.jpeg;
 
 import java.io.File;
 
+import com.drew.imaging.ImageMetadataReader;
 import com.drew.lang.Rational;
 import com.drew.metadata.Directory;
 import com.drew.metadata.Metadata;
-import com.drew.metadata.MetadataException;
-import com.drew.metadata.exif.ExifDirectory;
+import com.drew.metadata.exif.ExifSubIFDDirectory;
+import com.drew.metadata.exif.ExifIFD0Directory;
 import com.drew.metadata.exif.ExifReader;
+import com.drew.metadata.exif.ExifThumbnailDirectory;
 import com.drew.metadata.exif.GpsDirectory;
 
 /**
@@ -31,8 +33,7 @@ public class ExternalExifLibrary implements ExifLibrary
 		// Read exif data from picture
 		try
 		{
-			Metadata metadata = new Metadata();
-			new ExifReader(inFile).extract(metadata);
+			Metadata metadata = ImageMetadataReader.readMetadata(inFile);
 			if (metadata.containsDirectory(GpsDirectory.class))
 			{
 				Directory gpsdir = metadata.getDirectory(GpsDirectory.class);
@@ -61,22 +62,18 @@ public class ExternalExifLibrary implements ExifLibrary
 					data.setAltitudeRef(altRef);
 				}
 
-				try
+				// Timestamp and datestamp (if present)
+				final int TAG_GPS_DATESTAMP = 0x001d;
+				if (gpsdir.containsTag(GpsDirectory.TAG_GPS_TIME_STAMP) && gpsdir.containsTag(TAG_GPS_DATESTAMP))
 				{
-					// Timestamp and datestamp (if present)
-					final int TAG_GPS_DATESTAMP = 0x001d;
-					if (gpsdir.containsTag(GpsDirectory.TAG_GPS_TIME_STAMP) && gpsdir.containsTag(TAG_GPS_DATESTAMP))
-					{
-						Rational[] times = gpsdir.getRationalArray(GpsDirectory.TAG_GPS_TIME_STAMP);
-						data.setGpsTimestamp(new int[] {times[0].intValue(), times[1].intValue(),
-							times[2].intValue()});
-						Rational[] dates = gpsdir.getRationalArray(TAG_GPS_DATESTAMP);
-						if (dates != null) {
-							data.setGpsDatestamp(new int[] {dates[0].intValue(), dates[1].intValue(), dates[2].intValue()});
-						}
+					Rational[] times = gpsdir.getRationalArray(GpsDirectory.TAG_GPS_TIME_STAMP);
+					data.setGpsTimestamp(new int[] {times[0].intValue(), times[1].intValue(),
+						times[2].intValue()});
+					Rational[] dates = gpsdir.getRationalArray(TAG_GPS_DATESTAMP);
+					if (dates != null) {
+						data.setGpsDatestamp(new int[] {dates[0].intValue(), dates[1].intValue(), dates[2].intValue()});
 					}
 				}
-				catch (MetadataException me) {} // ignore, use other tags instead
 
 				// Image bearing (if present)
 				if (gpsdir.containsTag(GpsDirectory.TAG_GPS_IMG_DIRECTION) && gpsdir.containsTag(GpsDirectory.TAG_GPS_IMG_DIRECTION_REF))
@@ -89,30 +86,39 @@ public class ExternalExifLibrary implements ExifLibrary
 			}
 
 			// Tags from Exif directory
-			if (metadata.containsDirectory(ExifDirectory.class))
+			if (metadata.containsDirectory(ExifSubIFDDirectory.class))
 			{
-				Directory exifdir = metadata.getDirectory(ExifDirectory.class);
+				Directory exifdir = metadata.getDirectory(ExifSubIFDDirectory.class);
 
 				// Take time and date from exif tags
-				if (exifdir.containsTag(ExifDirectory.TAG_DATETIME_ORIGINAL)) {
-					data.setOriginalTimestamp(exifdir.getString(ExifDirectory.TAG_DATETIME_ORIGINAL));
+				if (exifdir.containsTag(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL)) {
+					data.setOriginalTimestamp(exifdir.getString(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL));
 				}
 				// Also take "digitized" timestamp
-				if (exifdir.containsTag(ExifDirectory.TAG_DATETIME_DIGITIZED)) {
-					data.setDigitizedTimestamp(exifdir.getString(ExifDirectory.TAG_DATETIME_DIGITIZED));
+				if (exifdir.containsTag(ExifSubIFDDirectory.TAG_DATETIME_DIGITIZED)) {
+					data.setDigitizedTimestamp(exifdir.getString(ExifSubIFDDirectory.TAG_DATETIME_DIGITIZED));
 				}
+			}
+			if (metadata.containsDirectory(ExifIFD0Directory.class))
+			{
+				Directory exifdir = metadata.getDirectory(ExifIFD0Directory.class);
 
 				// Photo rotation code
-				if (exifdir.containsTag(ExifDirectory.TAG_ORIENTATION)) {
-					data.setOrientationCode(exifdir.getInt(ExifDirectory.TAG_ORIENTATION));
+				if (exifdir.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) {
+					data.setOrientationCode(exifdir.getInt(ExifIFD0Directory.TAG_ORIENTATION));
 					// NOTE: this presumably takes the _last_ orientation value found, not the first.
 				}
+			}
+
+			if (metadata.containsDirectory(ExifThumbnailDirectory.class))
+			{
+				ExifThumbnailDirectory exifdir = metadata.getDirectory(ExifThumbnailDirectory.class);
 
-				// Thumbnail
-				if (exifdir.containsTag(ExifDirectory.TAG_THUMBNAIL_DATA))
+				// TODO: Check this thumbnail stuff
+				if (exifdir.hasThumbnailData())
 				{
-					// Make a copy of the byte data rather than keeping a reference to extracted array
-					byte[] tdata = exifdir.getByteArray(ExifDirectory.TAG_THUMBNAIL_DATA);
+					// Make a copy of the byte data
+					byte[] tdata = exifdir.getThumbnailData();
 					byte[] thumb = new byte[tdata.length];
 					System.arraycopy(tdata, 0, thumb, 0, tdata.length);
 					data.setThumbnailImage(thumb);
diff --git a/tim/prune/lang/prune-texts_af.properties b/tim/prune/lang/prune-texts_af.properties
index cc8f6b5..c99a13b 100644
--- a/tim/prune/lang/prune-texts_af.properties
+++ b/tim/prune/lang/prune-texts_af.properties
@@ -29,7 +29,7 @@ menu.point=Punt
 menu.point.editpoint=Redigeer Punt
 menu.point.deletepoint=Punt Uitvee
 menu.photo=Foto
-menu.photo.saveexif=Stoor na EXIF
+menu.photo.saveexif=Stoor na Exif
 menu.audio=Audio
 menu.view=Kyk
 menu.view.showsidebars=Wys kantstawe
@@ -109,7 +109,7 @@ function.correlatephotos=Korreleer Fotos
 function.rearrangephotos=Herrangskik fotos
 function.rotatephotoleft=Roteer foto links
 function.rotatephotoright=Roteer foto regs
-function.ignoreexifthumb=Ignoreer EXIF thumbnail
+function.ignoreexifthumb=Ignoreer Exif thumbnail
 function.help=Hulp
 function.showkeys=Wys Kortpad sleutels
 function.about=Omtrent GpsPrune
diff --git a/tim/prune/lang/prune-texts_cz.properties b/tim/prune/lang/prune-texts_cz.properties
index 931a00d..8057356 100644
--- a/tim/prune/lang/prune-texts_cz.properties
+++ b/tim/prune/lang/prune-texts_cz.properties
@@ -785,7 +785,7 @@ error.jpegload.dialogtitle=Chyba p\u0159i na\u010d\u00edt\u00e1n\u00ed fotografi
 error.jpegload.nofilesfound=Nenalezeny \u017e\u00e1dn\u00e9 soubory
 error.jpegload.nojpegsfound=Nenalezeny \u017e\u00e1dn\u00e9 soubory jpeg
 error.jpegload.nogpsfound=Nenalezena informace GPS
-error.jpegload.exifreadfailed=Nepoda\u0159ilo se na\u010d\u00edst informaci EXIF. Tu nelze na\u010d\u00edst\nbez intern\u00ed nebo extern\u00ed knihovny.
+error.jpegload.exifreadfailed=Nepoda\u0159ilo se na\u010d\u00edst informaci Exif. Tu nelze na\u010d\u00edst\nbez intern\u00ed nebo extern\u00ed knihovny.
 error.audioload.nofilesfound=Nebyly nalezeny \u017e\u00e1dn\u00e9 zvukov\u00e9 soubory.
 error.gpsload.unknown=Nezn\u00e1m\u00e1 chyba
 error.undofailed.title=Selhalo undo
diff --git a/tim/prune/lang/prune-texts_de_CH.properties b/tim/prune/lang/prune-texts_de_CH.properties
index 808bfae..27f3c7e 100644
--- a/tim/prune/lang/prune-texts_de_CH.properties
+++ b/tim/prune/lang/prune-texts_de_CH.properties
@@ -778,7 +778,7 @@ error.jpegload.dialogtitle=F\u00e4hle bim Lade von F\u00f6telis
 error.jpegload.nofilesfound=Kei Files gfunde
 error.jpegload.nojpegsfound=Kei Jpegs gfunde
 error.jpegload.nogpsfound=Kei GPS Information gfunde
-error.jpegload.exifreadfailed=EXIF Uufruef isch fehlgschlage. Kei EXIF Infos k\u00f6nnet gl\u00e4se werde\nohni nen interni oder ext\u00e4rni Bibliothek.
+error.jpegload.exifreadfailed=Exif Uufruef isch fehlgschlage. Kei Exif Infos k\u00f6nnet gl\u00e4se werde\nohni nen interni oder ext\u00e4rni Bibliothek.
 error.audioload.nofilesfound=Kei Audiofiles gfunde
 error.gpsload.unknown=Unbekannts F\u00e4hler
 error.undofailed.title=Undo isch fehlgschlage worde
diff --git a/tim/prune/lang/prune-texts_en.properties b/tim/prune/lang/prune-texts_en.properties
index 0102075..925419c 100644
--- a/tim/prune/lang/prune-texts_en.properties
+++ b/tim/prune/lang/prune-texts_en.properties
@@ -785,7 +785,7 @@ error.jpegload.dialogtitle=Error loading photos
 error.jpegload.nofilesfound=No files found
 error.jpegload.nojpegsfound=No jpeg files found
 error.jpegload.nogpsfound=No GPS information found
-error.jpegload.exifreadfailed=Failed to read EXIF information. No EXIF information can be read\nwithout either an internal or external library.
+error.jpegload.exifreadfailed=Failed to read Exif information. No Exif information can be read\nwithout either an internal or external library.
 error.audioload.nofilesfound=No audio clips found
 error.gpsload.unknown=Unknown error
 error.undofailed.title=Undo failed
diff --git a/tim/prune/lang/prune-texts_es.properties b/tim/prune/lang/prune-texts_es.properties
index ffe8f1f..4ddc66b 100644
--- a/tim/prune/lang/prune-texts_es.properties
+++ b/tim/prune/lang/prune-texts_es.properties
@@ -23,7 +23,7 @@ menu.range.start=Fijar comienzo
 menu.range.end=Fijar final
 menu.range.average=Crear punto a la media del rango
 menu.range.reverse=Invertir rango
-menu.range.mergetracksegments=Unir los segmentos de track
+menu.range.mergetracksegments=Unir los segmentos del track
 menu.range.cutandmove=Cortar y mover selecci\u00f3n
 menu.point=Punto
 menu.point.editpoint=Editar punto
@@ -49,7 +49,7 @@ menu.map.zoomout=Reducir zoom
 menu.map.zoomfull=Mostrar todo
 menu.map.newpoint=Crear un punto nuevo
 menu.map.drawpoints=Crear series de puntos
-menu.map.connect=Conectar puntos de track
+menu.map.connect=Conectar puntos del track
 menu.map.autopan=Posicionar autom\u00e1ticamente
 menu.map.showmap=Mostrar el mapa
 menu.map.showscalebar=Mostrar barra de escala
@@ -88,6 +88,7 @@ function.exportimage=Exportar imagen
 function.editwaypointname=Editar nombre de waypoint
 function.compress=Comprimir track
 function.deleterange=Eliminar rango
+function.croptrack=Truncar track
 function.interpolate=Interpolar puntos
 function.addtimeoffset=A\u00f1adir compensar tiempo
 function.addaltitudeoffset=A\u00f1adir compensar altitud
@@ -99,6 +100,7 @@ function.charts=Diagramas
 function.show3d=Mostrar en 3-D
 function.distances=Distancias
 function.fullrangedetails=Detalles adicionales de rango
+function.estimatetime=Estimar duraci\u00f3n
 function.setmapbg=Configurar fondo de mapa
 function.setpaths=Configurar rutas del programas
 function.getgpsies=Bajar ruta de Gpsies
@@ -210,7 +212,7 @@ dialog.exportgpx.copysource=Copiar la fuente
 dialog.exportgpx.encoding=Codificaci\u00f3n
 dialog.exportgpx.encoding.system=Sistema
 dialog.exportgpx.encoding.utf8=UTF-8
-dialog.exportpov.text=Introdzca los Parametros para exportar
+dialog.exportpov.text=Introduca los par\u00e1metros para exportar
 dialog.exportpov.font=Fuente
 dialog.exportpov.camerax=C\u00e1mara X
 dialog.exportpov.cameray=C\u00e1mara Y
@@ -219,7 +221,11 @@ dialog.exportpov.modelstyle=Estilo
 dialog.exportpov.ballsandsticks=Balas en palos
 dialog.exportpov.tubesandwalls=Tubos y paredes
 dialog.3d.warningtracksize=Este track contiene un gran numero de puntos. Puede ser que Java3D no los pueda visualizar. Est\u00e1 seguro de que desea continuar?
+dialog.baseimage.title=Imagen de mapa
+dialog.baseimage.mapsource=Proveedor de mapas
+dialog.baseimage.useimage=Usar imagen
 dialog.baseimage.zoom=Zoom
+dialog.baseimage.incomplete=Imagen incompleta
 dialog.baseimage.tiles=Recuadros
 dialog.baseimage.size=Tama\u00f1o de la imagen
 dialog.exportsvg.text=Seleccione los par\u00e1metros para exportar a SVG
@@ -227,7 +233,7 @@ dialog.exportsvg.phi=\u00c1ngulo de azimuth \u03d5
 dialog.exportsvg.theta=\u00c1ngulo de elevaci\u00f3n
 dialog.exportsvg.gradients=Usar degradado para sombras
 dialog.pointtype.desc=Salvar los siguientes tipos de puntos:
-dialog.pointtype.track=Puntos de track
+dialog.pointtype.track=Puntos del track
 dialog.pointtype.waypoint=Waypoints
 dialog.pointtype.photo=Puntos de foto
 dialog.pointtype.audio=Puntos de audio
@@ -242,7 +248,7 @@ dialog.undo.pretext=Por favor, seleccione la operaci\u00f3n(es) a deshacer
 dialog.undo.none.title=No se puede deshacer
 dialog.undo.none.text=Ninguna operaci\u00f3n a deshacer
 dialog.clearundo.title=Despejar la lista de deshacer
-dialog.clearundo.text=\u00bfEsta seguro que desea despejar la lista de deshacer?, ¡se perder\u00e1 toda la informaci\u00f3n!
+dialog.clearundo.text=\u00bfEsta seguro que desea despejar la lista de deshacer?, \u00a1se perder\u00e1 toda la informaci\u00f3n!
 dialog.pointedit.title=Editar punto
 dialog.pointedit.intro=Seleccione cada campo para modificar el valor
 dialog.pointedit.table.field=Campo
@@ -289,7 +295,10 @@ dialog.fullrangedetails.intro=Aqui estan los detalles para la selecci\u00f3n de
 dialog.estimatetime.details=Detalles
 dialog.estimatetime.climb=Ascenso
 dialog.estimatetime.descent=Descenso
+dialog.estimatetime.parameters=Par\u00e1metros
 dialog.estimatetime.results=Resultados
+dialog.estimatetime.results.estimatedtime=Duraci\u00f3n estimada
+dialog.estimatetime.results.actualtime=Duraci\u00f3n real
 dialog.setmapbg.intro=Seleccione un proveedor de mapas o a\u00f1ada uno nuevo
 dialog.addmapsource.title=A\u00f1adir un proveedor de mapas
 dialog.addmapsource.sourcename=Nombre del proveedor
@@ -408,7 +417,7 @@ dialog.about.credits.thanks=Gracias a
 dialog.about.readme=Readme
 dialog.checkversion.error=El numero de versi\u00f3n no pudo ser verificada.\n Por favor verificar la conexi\u00f3n de Internet
 dialog.checkversion.uptodate=Esta usted utilizando la \u00faltima versi\u00f3n de GpsPrune
-dialog.checkversion.newversion1=¡Una nueva versi\u00f3n de GpsPrune est\u00e1 disponible! La \u00faltima es ahora la versi\u00f3n
+dialog.checkversion.newversion1=\u00a1Una nueva versi\u00f3n de GpsPrune est\u00e1 disponible! La \u00faltima es ahora la versi\u00f3n
 dialog.checkversion.newversion2=.
 dialog.checkversion.releasedate1=La nueva versi\u00f3n fue lanzada en
 dialog.checkversion.releasedate2=.
@@ -477,6 +486,7 @@ dialog.diskcache.deleteall=Borrar todos los recuadros
 dialog.diskcache.deleted1=Borrado
 dialog.diskcache.deleted2=Archivos del cache
 dialog.deletefieldvalues.intro=Seleccionar el campo a eliminar para el rango actual
+dialog.deletefieldvalues.nofields=No hay campos a eliminar para el rango actual
 dialog.setlinewidth.text=Introduzca la anchura de las l\u00edneas a dibujar para los recorridos (1-4)
 dialog.downloadosm.desc=Confirmar la descarga de datos en bruto de OSM para el \u00e1rea especificada.
 dialog.searchwikipedianames.search=Buscar:
@@ -572,6 +582,7 @@ filetype.audio=Archivos MP3, OGG, WAV
 display.nodata=Ning\u00fan dato cargado
 display.noaltitudes=Los datos del track no incluyen altitudes
 display.notimestamps=Los datos de recorrido no incluyen marcas de tiempo
+display.novalues=Los datos de recorrido no incluyen valores para este campo
 details.trackdetails=Detalles del track
 details.notrack=Ning\u00fan track cargado
 details.track.points=Puntos
@@ -686,10 +697,11 @@ undo.deletepoint=eliminar punto
 undo.removephoto=eliminar foto
 undo.removeaudio=eliminar archivos de audio
 undo.deleterange=eliminar rango
+undo.croptrack=truncar track
 undo.deletemarked=eliminar puntos
 undo.insert=insertar puntos
 undo.reverse=invertir rango
-undo.mergetracksegments=unir los segmentos de track
+undo.mergetracksegments=unir los segmentos del track
 undo.addtimeoffset=a\u00f1adir margen de tiempo
 undo.addaltitudeoffset=a\u00f1adir margen de altitud
 undo.rearrangewaypoints=reordenar waypoints
@@ -726,7 +738,7 @@ error.jpegload.dialogtitle=Error cargando fotos
 error.jpegload.nofilesfound=No se encuentra ning\u00fan archivo
 error.jpegload.nojpegsfound=No se encuentra ning\u00fan archivo jpeg
 error.jpegload.nogpsfound=No se encuentra informaci\u00f3n GPS
-error.jpegload.exifreadfailed=Fallo al leer la informaci\u00f3n EXIF. No se puede leer ninguna informaci\u00f3n EXIF\ncon las librer\u00edas internas ni externas.
+error.jpegload.exifreadfailed=Fallo al leer la informaci\u00f3n Exif. No se puede leer ninguna informaci\u00f3n Exif\ncon las librer\u00edas internas ni externas.
 error.audioload.nofilesfound=No se encontraron archivos de audio
 error.gpsload.unknown=Error desconocido
 error.undofailed.title=Fallo al deshacer
diff --git a/tim/prune/lang/prune-texts_fr.properties b/tim/prune/lang/prune-texts_fr.properties
index 1cfdf1e..7d744f8 100644
--- a/tim/prune/lang/prune-texts_fr.properties
+++ b/tim/prune/lang/prune-texts_fr.properties
@@ -179,6 +179,18 @@ dialog.gpsload.save=Enregistrer dans un fichier
 dialog.gpssend.sendwaypoints=Envoyer les waypoints
 dialog.gpssend.sendtracks=Envoyer les traces
 dialog.gpssend.trackname=Nom de la trace
+dialog.gpsbabel.filters=Filtres
+dialog.gpsbabel.filter.discard=Jeter
+dialog.gpsbabel.filter.simplify=Simplifier
+dialog.gpsbabel.filter.interpolate=Interpoler
+dialog.gpsbabel.filter.discard.intro=Jeter les points si
+dialog.gpsbabel.filter.discard.hdop=Hdop >
+dialog.gpsbabel.filter.discard.vdop=Vdop >
+dialog.gpsbabel.filter.distance=Distance
+dialog.gpsbabel.filter.distance.distance=Si la distance <
+dialog.gpsbabel.filter.distance.time=et difference de temps <
+dialog.gpsbabel.filter.interpolate.distance=Si la distance >
+dialog.gpsbabel.filter.interpolate.time=ou difference de temps >
 dialog.saveoptions.title=Enregistrer le fichier
 dialog.save.fieldstosave=Champs \u00e0 enregistrer
 dialog.save.table.field=Champ
@@ -197,6 +209,8 @@ dialog.exportkml.kmz=Compresser au format kmz
 dialog.exportkml.exportimages=Exporter les vignettes au format kmz
 dialog.exportkml.imagesize=Taille des images
 dialog.exportkml.trackcolour=Couleur de la trace
+dialog.exportkml.standardkml=KML standard
+dialog.exportkml.extendedkml=KML enrichi avec l'heure
 dialog.exportgpx.name=Nom
 dialog.exportgpx.desc=L\u00e9gende
 dialog.exportgpx.includetimestamps=Inclure l'heure pour chaque point
@@ -243,7 +257,7 @@ dialog.undo.none.text=Pas d'op\u00e9ration \u00e0 annuler !
 dialog.clearundo.title=Purger la liste d'annulation
 dialog.clearundo.text=\u00cates-vous s\u00fbr de vouloir effacer la liste d'annulation ?\nToutes les informations d'annulation seront perdues !
 dialog.pointedit.title=\u00c9diter le point
-dialog.pointedit.intro=S\u00e9lectionner chaque champ pour changer la valeur
+dialog.pointedit.intro=S\u00e9lectionner chaque champ pour voire et changer la valeur
 dialog.pointedit.table.field=Champ
 dialog.pointedit.table.value=Valeur
 dialog.pointnameedit.name=Nom de waypoint
@@ -557,6 +571,7 @@ button.browse=Naviguer...
 button.addnew=Ajouter nouveau...
 button.delete=Supprimer
 button.manage=G\u00e9rer
+button.combine=Combiner
 
 # File types
 filetype.txt=Fichiers TXT
@@ -729,7 +744,7 @@ error.jpegload.dialogtitle=Erreur au chargement des photos
 error.jpegload.nofilesfound=Aucun fichier trouv\u00e9
 error.jpegload.nojpegsfound=Aucun fichier jpeg trouv\u00e9
 error.jpegload.nogpsfound=Aucune information GPS trouv\u00e9e
-error.jpegload.exifreadfailed=Information EXIF illisible. Aucune information EXIF ne peut \u00eatre lue\nsans une librairie interne ou externe.
+error.jpegload.exifreadfailed=Information Exif illisible. Aucune information Exif ne peut \u00eatre lue\nsans une librairie interne ou externe.
 error.audioload.nofilesfound=Aucun fichier audio trouv\u00e9
 error.gpsload.unknown=Erreur inconnue
 error.undofailed.title=\u00c9chec de l'annulation
diff --git a/tim/prune/lang/prune-texts_hu.properties b/tim/prune/lang/prune-texts_hu.properties
index ea53142..8b2b35b 100644
--- a/tim/prune/lang/prune-texts_hu.properties
+++ b/tim/prune/lang/prune-texts_hu.properties
@@ -1,5 +1,5 @@
 # Text entries for the GpsPrune application
-# Hungarian entries thanks to Gy\u00f6rgy Ball\u00f3
+# Hungarian entries thanks to Gy\u00f6rgy Ball\u00f3 and Peter Bathory
 
 # Menu entries
 menu.file=F\u00e1jl
@@ -10,6 +10,7 @@ menu.file.exit=Kil\u00e9p\u00e9s
 menu.track=Nyomvonal
 menu.track.undo=Visszavon\u00e1s
 menu.track.clearundo=Visszavon\u00e1si lista t\u00f6rl\u00e9se
+menu.track.markrectangle=N\u00e9gyzeten bel\u00fcli pontok megjel\u00f6l\u00e9se
 menu.track.deletemarked=Jel\u00f6lt pontok t\u00f6rl\u00e9se
 menu.track.rearrange=\u00datpontok \u00fajrarendez\u00e9se
 menu.track.rearrange.start=\u00d6sszes a f\u00e1jl elej\u00e9re
@@ -20,8 +21,6 @@ menu.range.all=Mindet kijel\u00f6l
 menu.range.none=Kijel\u00f6l\u00e9s megsz\u00fcntet\u00e9se
 menu.range.start=Tartom\u00e1ny kezdet\u00e9nek be\u00e1ll\u00edt\u00e1sa
 menu.range.end=Tartom\u00e1ny v\u00e9g\u00e9nek be\u00e1ll\u00edt\u00e1sa
-function.deleterange=Tartom\u00e1ny t\u00f6rl\u00e9se
-function.interpolate=Pontok interpol\u00e1l\u00e1sa
 menu.range.average=Kijel\u00f6l\u00e9s \u00e1tlaga
 menu.range.reverse=Tartom\u00e1ny megford\u00edt\u00e1sa
 menu.range.mergetracksegments=Nyomvonalszakaszok egyes\u00edt\u00e9se
@@ -41,7 +40,7 @@ menu.view.browser.mapquest=Mapquest
 menu.view.browser.yahoo=Yahoo! Maps
 menu.view.browser.bing=Bing Maps
 menu.settings=Be\u00e1ll\u00edt\u00e1sok
-menu.settings.onlinemode=T\u00e9rk\u00e9pek bet\u00f6lt\u00e9se az internetr\u0151l
+menu.settings.onlinemode=T\u00e9rk\u00e9pek bet\u00f6lt\u00e9se internetr\u0151l
 menu.settings.autosave=Be\u00e1ll\u00edt\u00e1sok automatikus ment\u00e9se kil\u00e9p\u00e9skor
 menu.help=S\u00fag\u00f3
 # Popup menu for map
@@ -54,6 +53,7 @@ menu.map.connect=Nyompontok \u00f6sszek\u00f6t\u00e9se
 menu.map.autopan=Automatikus mozgat\u00e1s
 menu.map.showmap=T\u00e9rk\u00e9p megjelen\u00edt\u00e9se
 menu.map.showscalebar=M\u00e9retar\u00e1ny megjelen\u00edt\u00e9se
+menu.map.editmode=Szerkeszt\u00e9s m\u00f3d
 
 # Alt keys for menus
 altkey.menu.file=F
@@ -86,6 +86,9 @@ function.exportpov=Export\u00e1l\u00e1s POV-ba
 function.exportsvg=Export\u00e1l\u00e1s SVG-be
 function.editwaypointname=\u00datpont nev\u00e9nek szerkeszt\u00e9se
 function.compress=Nyomvonal t\u00f6m\u00f6r\u00edt\u00e9se
+function.deleterange=Tartom\u00e1ny t\u00f6rl\u00e9se
+function.croptrack=Nyomvonal k\u00f6rbev\u00e1g\u00e1sa
+function.interpolate=Pontok interpol\u00e1l\u00e1sa
 function.addtimeoffset=Id\u0151eltol\u00e1s hozz\u00e1ad\u00e1sa
 function.addaltitudeoffset=Magass\u00e1geltol\u00e1s hozz\u00e1ad\u00e1sa
 function.convertnamestotimes=\u00datpontok neveinek konvert\u00e1l\u00e1sa id\u0151pontokk\u00e1
@@ -139,6 +142,7 @@ dialog.deletepoint.title=Pont t\u00f6rl\u00e9se
 dialog.deletepoint.deletephoto=T\u00f6rli a f\u00e9nyk\u00e9pet, amely ehhez a ponthoz tartozik?
 dialog.deletephoto.title=F\u00e9nyk\u00e9p t\u00f6rl\u00e9se
 dialog.deletephoto.deletepoint=T\u00f6rli a pontot, amely ehhez a f\u00e9nyk\u00e9phez tartozik?
+dialog.deleteaudio.deletepoint=T\u00f6rli a pontot, amely ehhez a hangf\u00e1jlhoz tartozik?
 dialog.openoptions.title=Be\u00e1ll\u00edt\u00e1sok megnyit\u00e1sa
 dialog.openoptions.filesnippet=F\u00e1jl kivonata
 dialog.load.table.field=Mez\u0151
@@ -219,6 +223,7 @@ dialog.confirmreversetrack.text=Ez a nyomvonal id\u0151b\u00e9lyeg-inform\u00e1c
 dialog.confirmcutandmove.title=Kiv\u00e1g\u00e1s \u00e9s mozgat\u00e1s meger\u0151s\u00edt\u00e9se
 dialog.confirmcutandmove.text=Ez a nyomvonal id\u0151b\u00e9lyeg-inform\u00e1ci\u00f3t tartalmaz, amely sorrendje mozgat\u00e1s ut\u00e1n megv\u00e1ltozik.\n Biztos benne, hogy mozgatja a kijel\u00f6l\u00e9st?
 dialog.interpolate.parameter.text=Pontok sz\u00e1ma, amely a k\u00e9t kiv\u00e1lasztott pont k\u00f6z\u00e9 besz\u00farand\u00f3
+dialog.interpolate.betweenwaypoints=Interpol\u00e1l az \u00fatpontok k\u00f6z\u00f6tt?
 dialog.undo.title=M\u0171velet(ek) visszavon\u00e1sa
 dialog.undo.pretext=V\u00e1lassza ki a visszavonand\u00f3 m\u0171velet(ek)et
 dialog.undo.none.title=Nem vonhat\u00f3 vissza
@@ -268,6 +273,8 @@ dialog.distances.column.to=V\u00e9gpont
 dialog.distances.currentpoint=Jelenlegi pont
 dialog.distances.toofewpoints=Ehhez a funkci\u00f3hoz \u00fatpontok kellenek, amelyek k\u00f6z\u00f6tt a t\u00e1vols\u00e1g sz\u00e1m\u00edt\u00e1sra ker\u00fcl
 dialog.fullrangedetails.intro=Itt vannak a r\u00e9szletei a kiv\u00e1lasztott tartom\u00e1nynak
+dialog.fullrangedetails.coltotal=R\u00e9sekkel egy\u00fctt
+dialog.fullrangedetails.colsegments=R\u00e9sek n\u00e9lk\u00fcl
 dialog.setmapbg.intro=V\u00e1lassza ki az egyik t\u00e9rk\u00e9pforr\u00e1st, vagy adjon hozz\u00e1 egy \u00fajat
 dialog.addmapsource.title=\u00daj t\u00e9rk\u00e9pforr\u00e1s hozz\u00e1ad\u00e1sa
 dialog.addmapsource.sourcename=Forr\u00e1s neve
@@ -298,6 +305,7 @@ dialog.wikipedia.column.name=Sz\u00f3cikk neve
 dialog.wikipedia.column.distance=T\u00e1vols\u00e1g
 dialog.correlate.notimestamps=Nincsenek id\u0151b\u00e9lyegek az adatpontokon, \u00edgy nem feleltethet\u0151 meg semmi a f\u00e9nyk\u00e9pekkel.
 dialog.correlate.nouncorrelatedphotos=Nincsenek megfeleltetlen f\u00e9nyk\u00e9pek.\nBiztos benne, hogy folytatja?
+dialog.correlate.nouncorrelatedaudios=Nincsenek megfeleltetlen hangok.\nBiztos benne, hogy folytatja?
 dialog.correlate.photoselect.intro=V\u00e1lasszon egyet ezek k\u00f6z\u00fcl a megfeleltetett f\u00e9nyk\u00e9pek k\u00f6z\u00fcl az id\u0151eltol\u00e1s haszn\u00e1lat\u00e1hoz
 dialog.correlate.select.photoname=F\u00e9nyk\u00e9p neve
 dialog.correlate.select.timediff=Id\u0151k\u00fcl\u00f6nbs\u00e9g
@@ -346,9 +354,11 @@ dialog.compress.duplicates.title=Kett\u0151z\u00f6tt pontok elt\u00e1vol\u00edt\
 dialog.compress.douglaspeucker.title=Douglas-Peucker t\u00f6m\u00f6r\u00edt\u00e9s
 dialog.compress.douglaspeucker.paramdesc=T\u00f6m\u00f6r\u00edt\u00e9si t\u00e9nyez\u0151
 dialog.compress.summarylabel=T\u00f6rlend\u0151 pontok
+dialog.compress.confirmnone=egy pont sem lett megjel\u00f6lve
+dialog.deletemarked.nonefound=Nem t\u00e1vol\u00edthat\u00f3 el adatpont
 dialog.pastecoordinates.desc=Adja meg vagy illessze be a koordin\u00e1t\u00e1kat ide
 dialog.pastecoordinates.coords=Koordin\u00e1t\u00e1k
-dialog.pastecoordinates.nothingfound=Ellen\u0151rizze a koordin\u00e1t\u00e1kat, \u00e9s pr\u00f3b\u00e1lja \u00f3jra
+dialog.pastecoordinates.nothingfound=Ellen\u0151rizze a koordin\u00e1t\u00e1kat, \u00e9s pr\u00f3b\u00e1lja \u00fajra
 dialog.help.help=Tov\u00e1bbi inform\u00e1ci\u00f3k\u00e9rt \u00e9s kezel\u00e9si \u00fatmutat\u00f3\u00e9rt l\u00e1sd a \n http://activityworkshop.net/software/gpsprune/\nwebhelyet.
 dialog.about.version=Verzi\u00f3
 dialog.about.build=Build
@@ -386,7 +396,7 @@ dialog.checkversion.error=A verzi\u00f3sz\u00e1m nem ellen\u0151rizhet\u0151.\nE
 dialog.checkversion.uptodate=A GpsPrune leg\u00fajabb verzi\u00f3j\u00e1t haszn\u00e1lja.
 dialog.checkversion.newversion1=El\u00e9rhet\u0151 a GpsPrune \u00faj verzi\u00f3ja! A leg\u00fajabb verzi\u00f3 most:
 dialog.checkversion.newversion2=.
-dialog.checkversion.releasedate1=Ez az \u00faj verzi\u00f3 kiad\u00e1sra ker\u00fclt:
+dialog.checkversion.releasedate1=Az \u00faj verzi\u00f3 ekkor lett kiadva:
 dialog.checkversion.releasedate2=.
 dialog.checkversion.download=Az \u00faj verzi\u00f3 let\u00f6lt\u00e9s\u00e9hez keresse fel a http://activityworkshop.net/software/gpsprune/download.html webhelyet.
 dialog.keys.intro=A k\u00f6vetkez\u0151 gyorsbillenty\u0171k haszn\u00e1lhat\u00f3k az eg\u00e9r haszn\u00e1lata helyett
@@ -440,6 +450,7 @@ dialog.diskcache.save=T\u00e9rk\u00e9pek ment\u00e9se a lemezre
 dialog.diskcache.dir=Gyors\u00edt\u00f3t\u00e1r k\u00f6nyvt\u00e1ra
 dialog.diskcache.createdir=K\u00f6nyvt\u00e1r l\u00e9trehoz\u00e1sa
 dialog.diskcache.nocreate=A gyors\u00edt\u00f3t\u00e1r k\u00f6nyvt\u00e1ra nem ker\u00fclt l\u00e9trehoz\u00e1sra
+dialog.diskcache.cannotwrite=A t\u00e9rk\u00e9pcsemp\u00e9k nem menthet\u0151ek a kiv\u00e1lasztott k\u00f6nyvt\u00e1rba
 dialog.diskcache.table.path=El\u00e9r\u00e9si \u00fat
 dialog.diskcache.table.usedby=Haszn\u00e1lja
 dialog.diskcache.table.zoom=Nagy\u00edt\u00e1s
@@ -475,6 +486,7 @@ confirm.addaltitudeoffset=Magass\u00e1geltol\u00e1s hozz\u00e1adva
 confirm.rearrangewaypoints=\u00datpontok \u00fajrarendezve
 confirm.rearrangephotos=F\u00e9nyk\u00e9pek \u00fajrarendezve
 confirm.cutandmove=Kijel\u00f6l\u00e9s \u00e1thelyezve
+confirm.interpolate=Pontok hozz\u00e1adva
 confirm.convertnamestotimes=\u00datpont nevei konvert\u00e1lva
 confirm.saveexif.ok1=Mentve
 confirm.saveexif.ok2=k\u00e9pf\u00e1jl
@@ -582,6 +594,7 @@ details.nophoto=Nincs f\u00e9nyk\u00e9p kiv\u00e1lasztva
 details.photo.loading=Bet\u00f6lt\u00e9s
 details.photo.bearing=Ir\u00e1ny
 details.media.connected=\u00d6sszekapcsolva
+details.media.fullpath=Teljes el\u00e9r\u00e9si \u00fat
 details.audiodetails=Hang r\u00e9szletei
 details.noaudio=Nincs hangf\u00e1jl kiv\u00e1lasztva
 details.audio.file=Hangf\u00e1jl
@@ -615,9 +628,13 @@ units.feet=l\u00e1b
 units.feet.short=ft
 units.kilometres=kilom\u00e9ter
 units.kilometres.short=km
+units.kilometresperhour.short=km/h
 units.miles=m\u00e9rf\u00f6ld
 units.miles.short=mi
 units.milesperhour.short=mph
+units.nauticalmiles=Tengeri m\u00e9rf\u00f6ld
+units.nauticalmiles.short=nmi
+units.nauticalmilesperhour.short=csom\u00f3
 units.metrespersec.short=m/s
 units.feetpersec.short=ft/s
 units.hours=\u00f3ra
@@ -645,6 +662,7 @@ undo.deletepoint=pont t\u00f6rl\u00e9se
 undo.removephoto=f\u00e9nyk\u00e9p elt\u00e1vol\u00edt\u00e1sa
 undo.removeaudio=hangf\u00e1jl elt\u00e1vol\u00edt\u00e1sa
 undo.deleterange=tartom\u00e1ny t\u00f6rl\u00e9se
+undo.croptrack=nyomvonal k\u00f6rbev\u00e1g\u00e1sa
 undo.deletemarked=nyomvonal t\u00f6m\u00f6r\u00edt\u00e9se
 undo.insert=pontok besz\u00far\u00e1sa
 undo.reverse=tartom\u00e1ny megford\u00edt\u00e1sa
@@ -685,7 +703,7 @@ error.jpegload.dialogtitle=Hiba a k\u00e9pek bet\u00f6lt\u00e9sekor
 error.jpegload.nofilesfound=Nem tal\u00e1lhat\u00f3 f\u00e1jl
 error.jpegload.nojpegsfound=Nem tal\u00e1lhat\u00f3 jpeg f\u00e1jl
 error.jpegload.nogpsfound=Nem tal\u00e1lhat\u00f3 GPS inform\u00e1ci\u00f3
-error.jpegload.exifreadfailed=Az EXIF inform\u00e1ci\u00f3 olvas\u00e1sa nem siker\u00fclt. Nem olvasat\u00f3 EXIF inform\u00e1ci\u00f3\nbe\u00e9p\u00edtett vagy k\u00fcls\u0151 f\u00fcggv\u00e9nyk\u00f6nyvt\u00e1r n\u00e9lk\u00fcl.
+error.jpegload.exifreadfailed=Az Exif inform\u00e1ci\u00f3 olvas\u00e1sa nem siker\u00fclt. Nem olvasat\u00f3 Exif inform\u00e1ci\u00f3\nbe\u00e9p\u00edtett vagy k\u00fcls\u0151 f\u00fcggv\u00e9nyk\u00f6nyvt\u00e1r n\u00e9lk\u00fcl.
 error.audioload.nofilesfound=Nem tal\u00e1lhat\u00f3 hangf\u00e1jl
 error.gpsload.unknown=Ismeretlen hiba
 error.undofailed.title=A visszavon\u00e1s nem siker\u00fclt
@@ -704,7 +722,9 @@ error.lookupsrtm.nonefound=Nem \u00e9rhet\u0151 el magass\u00e1gi \u00e9rt\u00e9
 error.lookupsrtm.nonerequired=Az \u00f6sszes pont m\u00e1r rendelkezik magass\u00e1gadatokkal, \u00edgy nincs mit keresni
 error.gpsies.uploadnotok=A gpsies szerver a k\u00f6vetkez\u0151 \u00fczenetet adta vissza
 error.gpsies.uploadfailed=A felt\u00f6lt\u00e9s nem siker\u00fclt a k\u00f6vetkez\u0151 hib\u00e1val
+error.showphoto.failed=F\u00e9nyk\u00e9p bet\u00f6lt\u00e9se sikertelen
 error.playaudiofailed=A hangf\u00e1jl lej\u00e1tsz\u00e1sa nem siker\u00fclt
 error.cache.notthere=A csempegyors\u00edt\u00f3t\u00e1r k\u00f6nyvt\u00e1ra nem tal\u00e1lhat\u00f3
 error.cache.empty=A csempegyors\u00edt\u00f3t\u00e1r k\u00f6nyvt\u00e1ra \u00fcres
 error.cache.cannotdelete=Nincs t\u00f6r\u00f6lhet\u0151 csempe
+error.interpolate.invalidparameter=A pontok sz\u00e1ma 1 \u00e9s 1000 k\u00f6z\u00f6tt kell legyen
diff --git a/tim/prune/lang/prune-texts_it.properties b/tim/prune/lang/prune-texts_it.properties
index 719b791..5ee22f0 100644
--- a/tim/prune/lang/prune-texts_it.properties
+++ b/tim/prune/lang/prune-texts_it.properties
@@ -785,7 +785,7 @@ error.jpegload.dialogtitle=Errore nel caricamento delle foto
 error.jpegload.nofilesfound=File non trovato
 error.jpegload.nojpegsfound=File jpeg non trovato
 error.jpegload.nogpsfound=Informazioni GPS non trovate
-error.jpegload.exifreadfailed=Lettera dei dati EXIF fallita. I dati EXIF non possono\n essere letti senza una libreria interna o esterna.
+error.jpegload.exifreadfailed=Lettera dei dati Exif fallita. I dati Exif non possono\n essere letti senza una libreria interna o esterna.
 error.audioload.nofilesfound=Riprese audio non trovate
 error.gpsload.unknown=Errore sconosciuto
 error.undofailed.title=Impossibile annullare
diff --git a/tim/prune/lang/prune-texts_ja.properties b/tim/prune/lang/prune-texts_ja.properties
index 142ae84..78f2dc4 100644
--- a/tim/prune/lang/prune-texts_ja.properties
+++ b/tim/prune/lang/prune-texts_ja.properties
@@ -118,7 +118,7 @@ function.rearrangephotos=\u5199\u771f\u306e\u4e26\u3079\u76f4\u3057
 function.rotatephotoleft=\u5199\u771f\u3092\u5de6\u306b\u56de\u3059
 function.rotatephotoright=\u5199\u771f\u3092\u53f3\u306b\u56de\u3059
 function.photopopup=\u5199\u771f\u306e\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3092\u8868\u793a
-function.ignoreexifthumb=EXIF\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u7121\u8996
+function.ignoreexifthumb=Exif\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u7121\u8996
 function.loadaudio=\u30aa\u30fc\u30c7\u30a3\u30aa\u30d5\u30a1\u30a4\u30eb\u3092\u8ffd\u52a0
 function.removeaudio=\u4e00\u89a7\u304b\u3089\u73fe\u5728\u306e\u30aa\u30fc\u30c7\u30a3\u30aa\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664
 function.correlateaudios=\u30aa\u30fc\u30c7\u30a3\u30aa\u3092\u95a2\u9023\u4ed8\u3051\u308b
@@ -240,7 +240,7 @@ dialog.addtimeoffset.minutes=\u5206
 dialog.addtimeoffset.notimestamps=\u3053\u306e\u9078\u629e\u7bc4\u56f2\u306f\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u6301\u3063\u3066\u306a\u3044\u306e\u3067\u3001\u504f\u4f4d\u3092\u8db3\u305b\u307e\u305b\u3093\u3002
 dialog.findwaypoint.intro=\u30a6\u30a7\u30a4\u30dd\u30a4\u30f3\u30c8\u540d\u306e\u4e00\u90e8\u3092\u5165\u529b
 dialog.findwaypoint.search=\u691c\u7d22
-dialog.saveexif.title=EXIF\u3092\u4fdd\u5b58
+dialog.saveexif.title=Exif\u3092\u4fdd\u5b58
 dialog.saveexif.intro=\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u4f7f\u3063\u3066\u3001\u4fdd\u5b58\u3059\u308b\u5199\u771f\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 dialog.saveexif.nothingtosave=\u5ea7\u6a19\u60c5\u5831\u306f\u7121\u5909\u66f4\u3067\u3059\u3002\u4fdd\u5b58\u3059\u308b\u3082\u306e\u306f\u3042\u308a\u307e\u305b\u3093\u3002
 dialog.saveexif.noexiftool=exiftool \u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u7d9a\u3051\u307e\u3059\u304b\uff1f
diff --git a/tim/prune/lang/prune-texts_ko.properties b/tim/prune/lang/prune-texts_ko.properties
index 2904a27..70f895c 100644
--- a/tim/prune/lang/prune-texts_ko.properties
+++ b/tim/prune/lang/prune-texts_ko.properties
@@ -659,7 +659,7 @@ error.jpegload.dialogtitle=\uc0ac\uc9c4 \ubd88\ub7ec\uc624\ub294 \uc911 \uc5d0\u
 error.jpegload.nofilesfound=\ucc3e\uc740 \ud30c\uc77c \uc5c6\uc74c.
 error.jpegload.nojpegsfound=\ucc3e\uc740 jpeg\ud30c\uc77c \uc5c6\uc74c.
 error.jpegload.nogpsfound=GPS \uc815\ubcf4\ub97c \ucc3e\uc9c0 \ubabb\ud568.
-error.jpegload.exifreadfailed=EXIF\uc815\ubcf4 \uc77d\uae30 \uc2e4\ud328./n\ub0b4\uc7a5\uc774\ub098 \uc678\uc7a5 \ub77c\uc774\ube0c\ub7ec\uc774\uac00 \uc5c6\uc73c\uba74/nEXIF\uc815\ubcf4\ub97c \uc77d\uc744 \uc218 \uc5c6\uc5b4\uc694.
+error.jpegload.exifreadfailed=Exif\uc815\ubcf4 \uc77d\uae30 \uc2e4\ud328./n\ub0b4\uc7a5\uc774\ub098 \uc678\uc7a5 \ub77c\uc774\ube0c\ub7ec\uc774\uac00 \uc5c6\uc73c\uba74/nExif\uc815\ubcf4\ub97c \uc77d\uc744 \uc218 \uc5c6\uc5b4\uc694.
 error.audioload.nofilesfound=\ucc3e\uc740 \uc18c\ub9ac\ud30c\uc77c \uc5c6\uc74c.
 error.gpsload.unknown=\uc54c\ub824\uc9c0\uc9c0 \uc54a\uc740 \uc624\ub958.
 error.undofailed.title=\ub418\ub3cc\ub9ac\uae30 \uc2e4\ud328.
diff --git a/tim/prune/lang/prune-texts_nl.properties b/tim/prune/lang/prune-texts_nl.properties
index 8915ccb..1ec6b81 100644
--- a/tim/prune/lang/prune-texts_nl.properties
+++ b/tim/prune/lang/prune-texts_nl.properties
@@ -785,7 +785,7 @@ error.jpegload.dialogtitle=Fout bij inlezen foto's
 error.jpegload.nofilesfound=Bestanden niet gevonden
 error.jpegload.nojpegsfound=Geen jpeg-bestanden gevonden
 error.jpegload.nogpsfound=Geen GPS informatie gevonden
-error.jpegload.exifreadfailed=Kon geen EXIF informatie inlezen. EXIF informatie kan niet worden gelezen\n zonder interne of externe bibliotheek.
+error.jpegload.exifreadfailed=Kon geen Exif informatie inlezen. Exif informatie kan niet worden gelezen\n zonder interne of externe bibliotheek.
 error.audioload.nofilesfound=Geen audiobestanden gevonden
 error.gpsload.unknown=Onbekende fout
 error.undofailed.title=Terugdraaien mislukt
diff --git a/tim/prune/lang/prune-texts_pl.properties b/tim/prune/lang/prune-texts_pl.properties
index 339c395..333caa7 100644
--- a/tim/prune/lang/prune-texts_pl.properties
+++ b/tim/prune/lang/prune-texts_pl.properties
@@ -101,6 +101,7 @@ function.show3d=Poka\u017c model 3D
 function.distances=Odleg\u0142o\u015bci
 function.fullrangedetails=Wszystkie detale
 function.estimatetime=Przewidywany czas
+function.learnestimationparams=Skoryguj wsp\u00f3\u0142czynniki szacowania czasu
 function.setmapbg=Wybierz map\u0119 t\u0142a
 function.setpaths=Ustaw \u015bcie\u017cki do program\u00f3w
 function.getgpsies=Pobierz \u015bcie\u017cki z Gpsies
@@ -162,6 +163,8 @@ dialog.openoptions.deliminfo.norecords=Brak rekord\u00f3w
 dialog.openoptions.altitudeunits=Jednostki wysoko\u015bci
 dialog.openoptions.speedunits=Jednostki pr\u0119dko\u015bci
 dialog.openoptions.vertspeedunits=Jednostki pr\u0119dko\u015bci pionowej
+dialog.openoptions.vspeed.positiveup=Pr\u0119dko\u015b\u0107 wznoszenia
+dialog.openoptions.vspeed.positivedown=Pr\u0119dko\u015b\u0107 opadania
 dialog.open.contentsdoubled=Ten plik zawiera dwie kopie ka\u017cdego punktu.\nRaz jako punkt po\u015bredni, a raz jako punkt \u015bcie\u017cki.
 dialog.selecttracks.intro=Wybierz \u015bcie\u017ck\u0119 lub \u015bcie\u017cki
 dialog.selecttracks.noname=Nienazwane
@@ -222,7 +225,7 @@ dialog.exportkml.exportimages=Eksportuj miniaturki zdj\u0119\u0107 do KMZ
 dialog.exportkml.imagesize=Rozmiar zdj\u0119\u0107
 dialog.exportkml.trackcolour=Kolor \u015bcie\u017cki
 dialog.exportkml.standardkml=Standardowy KML
-dialog.exportkml.extendedkml=Standardowy KML ze znacznikami czasu (no, *extended*, not standard!)
+dialog.exportkml.extendedkml=KML ze znacznikami czasu
 dialog.exportgpx.name=Nazwa
 dialog.exportgpx.desc=Opis
 dialog.exportgpx.includetimestamps=Do\u0142\u0105cz znaczniki czasu
@@ -322,14 +325,24 @@ dialog.fullrangedetails.colsegments=Bez luk
 dialog.estimatetime.details=Szczeg\u00f3\u0142y
 dialog.estimatetime.gentle=\u0141agodnie
 dialog.estimatetime.steep=Stromo
+dialog.estimatetime.climb=Wznoszenie
+dialog.estimatetime.descent=Opadanie
 dialog.estimatetime.parameters=Parametry
 dialog.estimatetime.parameters.timefor=Czas dla
 dialog.estimatetime.results=Wynik
 dialog.estimatetime.results.estimatedtime=Czas przewidywany
 dialog.estimatetime.results.actualtime=Czas bie\u017c\u0105cy
+dialog.estimatetime.error.nodistance=Aby obliczy\u0107 wsp\u00f3\u0142czynniki szacowania czasu punkty bie\u017c\u0105cej \u015bcie\u017cki musz\u0105 posiada\u0107 informacje o odleg\u0142o\u015bci
+dialog.estimatetime.error.noaltitudes=Bie\u017c\u0105ce zaznaczenie nie zawiera informacji o wysoko\u015bci
+dialog.learnestimationparams.intro=Wsp\u00f3\u0142czynniki obliczone na podstawie bie\u017c\u0105cej \u015bcie\u017cki
 dialog.learnestimationparams.averageerror=B\u0142\u0105d \u015bredni
+dialog.learnestimationparams.combine=Po\u0142\u0105cz powy\u017csze wsp\u00f3\u0142czynniki z ich warto\u015bciami bie\u017c\u0105cymi
+dialog.learnestimationparams.combinedresults=Nowe wsp\u00f3\u0142czynniki
+dialog.learnestimationparams.weight.100pccurrent=Zatrzymaj warto\u015bci bie\u017c\u0105ce
 dialog.learnestimationparams.weight.current=bie\u017c\u0105ce
 dialog.learnestimationparams.weight.calculated=obliczone
+dialog.learnestimationparams.weight.50pc=\u015arednia warto\u015bci bie\u017c\u0105cych i obliczonych
+dialog.learnestimationparams.weight.100pccalculated=U\u017cyj nowe warto\u015bci obliczone
 dialog.setmapbg.intro=Wybierz dostawc\u0119 map t\u0142a lub dodaj nowego
 dialog.addmapsource.title=Dodaj dostawc\u0119 map
 dialog.addmapsource.sourcename=Nazwa dostawcy
@@ -772,7 +785,7 @@ error.jpegload.dialogtitle=B\u0142\u0105d \u0142adowania zdj\u0119cia
 error.jpegload.nofilesfound=Nie znaleziono plik\u00f3w
 error.jpegload.nojpegsfound=Nie znaleziono plik\u00f3w jpeg
 error.jpegload.nogpsfound=Nie znaleziono informacji GPS
-error.jpegload.exifreadfailed=Nie powiod\u0142o si\u0119 odczytanie informacji EXIF\nInformacji tych nie mo\u017cna przeczyta\u0107 bez wewn\u0119trznej lub zewn\u0119trznej biblioteki.
+error.jpegload.exifreadfailed=Nie powiod\u0142o si\u0119 odczytanie informacji Exif\nInformacji tych nie mo\u017cna przeczyta\u0107 bez wewn\u0119trznej lub zewn\u0119trznej biblioteki.
 error.audioload.nofilesfound=Nie znaleziono plik\u00f3w audio
 error.gpsload.unknown=Nieznany b\u0142\u0105d
 error.undofailed.title=Cofnij nie powiod\u0142o si\u0119
@@ -797,3 +810,4 @@ error.cache.notthere=Nie znaleziono katalogu kesza
 error.cache.empty=Katalog kesza jest pusty
 error.cache.cannotdelete=\u017badne p\u0142ytki nie mog\u0142y zosta\u0107 usuni\u0119te
 error.interpolate.invalidparameter=Ilo\u015b\u0107 punkt\u00f3w musi zawiera\u0107 si\u0119 w zakresie od 1 do 1000
+error.learnestimationparams.failed=Oszacowanie wsp\u00f3\u0142czynnik\u00f3w dla danej scie\u017cki nie powiod\u0142o si\u0119.\nSpr\u00f3buj za\u0142adowa\u0107 wi\u0119cej \u015bcie\u017cek.
diff --git a/tim/prune/lang/prune-texts_pt.properties b/tim/prune/lang/prune-texts_pt.properties
index fe7bdc2..dc9a803 100644
--- a/tim/prune/lang/prune-texts_pt.properties
+++ b/tim/prune/lang/prune-texts_pt.properties
@@ -686,7 +686,7 @@ error.jpegload.dialogtitle=Erro ao carregar fotos
 error.jpegload.nofilesfound=Nenhum arquivo encontrado
 error.jpegload.nojpegsfound=Nenhum arquivo jpeg encontrado
 error.jpegload.nogpsfound=Nenhuma informa\u00e7\u00e3o de GPS encontrada
-error.jpegload.exifreadfailed=Falha ao ler informa\u00e7\u00f5es do EXIF. Nenhuma informa\u00e7\u00e3o do EXIF pode ser lida\nseja na biblioteca interna, seja na externa.
+error.jpegload.exifreadfailed=Falha ao ler informa\u00e7\u00f5es do Exif. Nenhuma informa\u00e7\u00e3o do Exif pode ser lida\nseja na biblioteca interna, seja na externa.
 error.audioload.nofilesfound=Nenhum arquivo de \u00e1udio encontrado
 error.gpsload.unknown=Erro desconhecido
 error.undofailed.title=Falha ao desfazer
diff --git a/tim/prune/lang/prune-texts_ru.properties b/tim/prune/lang/prune-texts_ru.properties
index a34b95d..3a691c8 100644
--- a/tim/prune/lang/prune-texts_ru.properties
+++ b/tim/prune/lang/prune-texts_ru.properties
@@ -724,7 +724,7 @@ error.jpegload.dialogtitle=\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u04
 error.jpegload.nofilesfound=\u0424\u0430\u0439\u043b\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b
 error.jpegload.nojpegsfound=JEPG-\u0444\u0430\u0439\u043b\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b
 error.jpegload.nogpsfound=\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 GPS-\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
-error.jpegload.exifreadfailed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c EXIF-\u200b\u200b\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041d\u0435\u0442 EXIF-\u200b\u200b\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u200b\u200b\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c\n\u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.
+error.jpegload.exifreadfailed=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c Exif-\u200b\u200b\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041d\u0435\u0442 Exif-\u200b\u200b\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u200b\u200b\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c\n\u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.
 error.audioload.nofilesfound=\u0417\u0432\u0443\u043a\u043e\u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b
 error.gpsload.unknown=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430
 error.undofailed.title=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c
diff --git a/tim/prune/load/FileCacher.java b/tim/prune/load/FileCacher.java
index da354aa..22383c6 100644
--- a/tim/prune/load/FileCacher.java
+++ b/tim/prune/load/FileCacher.java
@@ -47,7 +47,9 @@ public class FileCacher
 				}
 				while (currLine != null)
 				{
-					if (currLine.indexOf('\0') >= 0) {
+					if (currLine.indexOf('\0') >= 0)
+					{
+						try {reader.close();} catch (IOException ioe2) {}
 						return; // it's a binary file, shouldn't use this cacher
 					}
 					if (currLine.trim().length() > 0)
diff --git a/tim/prune/readme.txt b/tim/prune/readme.txt
index 8a47ebe..4bf30f1 100644
--- a/tim/prune/readme.txt
+++ b/tim/prune/readme.txt
@@ -1,4 +1,4 @@
-GpsPrune version 15.1
+GpsPrune version 15.2
 =====================
 
 GpsPrune is an application for viewing, editing and managing coordinate data from GPS systems,
@@ -17,7 +17,7 @@ Running
 =======
 
 To run GpsPrune from the jar file, simply call it from a command prompt or shell:
-   java -jar gpsprune_15.1.jar
+   java -jar gpsprune_15.2.jar
 
 If the jar file is saved in a different directory, you will need to include the path.
 Depending on your system settings, you may be able to click or double-click on the jar file
@@ -25,10 +25,10 @@ in a file manager window to execute it.  A shortcut, menu item, alias, desktop i
 or other link can of course be made should you wish.
 
 To specify a language other than the default, use an additional parameter, eg:
-   java -jar gpsprune_15.1.jar --lang=DE
+   java -jar gpsprune_15.2.jar --lang=DE
 
 
-New with version 15.1
+New with version 15.2
 =====================
 The following features were added since version 15:
   - Improved translations
diff --git a/tim/prune/save/KmlExporter.java b/tim/prune/save/KmlExporter.java
index 6fbf749..8021834 100644
--- a/tim/prune/save/KmlExporter.java
+++ b/tim/prune/save/KmlExporter.java
@@ -525,7 +525,7 @@ public class KmlExporter extends GenericFunction implements Runnable
 			}
 			// Make a blob with description for each photo
 			// Photos have already been written so picture sizes already known
-			if (point.getPhoto() != null && writePhotos && writeCurrentPoint)
+			if (point.getPhoto() != null && point.getPhoto().isValid() && writePhotos && writeCurrentPoint)
 			{
 				if (!writtenPhotoHeader)
 				{
@@ -876,21 +876,21 @@ public class KmlExporter extends GenericFunction implements Runnable
 		ImageWriter imageWriter = writers.next();
 
 		// Check selection checkbox
-		boolean justSelection = _pointTypeSelector.getJustSelection();
+		final boolean justSelection = _pointTypeSelector.getJustSelection();
 		int selStart = -1, selEnd = -1;
 		if (justSelection) {
 			selStart = _trackInfo.getSelection().getStart();
 			selEnd = _trackInfo.getSelection().getEnd();
 		}
 
-		int numPoints = _track.getNumPoints();
+		final int numPoints = _track.getNumPoints();
 		DataPoint point = null;
 		int photoNum = 0;
 		// Loop over all points in track
 		for (int i=0; i<numPoints && !_cancelPressed; i++)
 		{
 			point = _track.getPoint(i);
-			if (point.getPhoto() != null && (!justSelection || (i>=selStart && i<=selEnd)))
+			if (point.getPhoto() != null && point.getPhoto().isValid() && (!justSelection || (i>=selStart && i<=selEnd)))
 			{
 				photoNum++;
 				// Make a new entry in zip file
diff --git a/tim/prune/save/PovExporter.java b/tim/prune/save/PovExporter.java
index ba66058..135ccbb 100644
--- a/tim/prune/save/PovExporter.java
+++ b/tim/prune/save/PovExporter.java
@@ -668,7 +668,6 @@ public class PovExporter extends Export3dFunction implements DataSubscriber
 		inWriter.write("// Data points:");
 		inWriter.write(inLineSeparator);
 		int numPoints = inModel.getNumPoints();
-		int numTrackPoints = 0;
 		// Loop over all points and write out waypoints as balls
 		for (int i=0; i<numPoints; i++)
 		{
@@ -686,7 +685,6 @@ public class PovExporter extends Export3dFunction implements DataSubscriber
 				}
 				inWriter.write(inLineSeparator);
 			}
-			else {numTrackPoints++;}
 		}
 		inWriter.write(inLineSeparator);
 

-- 
Tool to visualize, edit, convert and prune GPS data



More information about the Pkg-grass-devel mailing list