[Git][debian-gis-team/gpsprune][upstream] New upstream version 19.2
Bas Couwenberg
gitlab at salsa.debian.org
Sat Dec 15 09:12:31 GMT 2018
Bas Couwenberg pushed to branch upstream at Debian GIS Project / gpsprune
Commits:
24d18ba0 by Bas Couwenberg at 2018-12-15T08:55:29Z
New upstream version 19.2
- - - - -
22 changed files:
- build.sh
- tim/prune/GpsPrune.java
- tim/prune/config/Config.java
- tim/prune/data/AltitudeRange.java
- tim/prune/data/FileInfo.java
- tim/prune/data/RangeStats.java
- tim/prune/data/SourceInfo.java
- tim/prune/data/TimestampLocal.java
- tim/prune/data/TrackInfo.java
- tim/prune/gui/map/MapCanvas.java
- tim/prune/gui/map/MapSource.java
- tim/prune/gui/map/MapSourceLibrary.java
- tim/prune/lang/prune-texts_fi.properties
- tim/prune/lang/prune-texts_pl.properties
- tim/prune/lang/prune-texts_sv.properties
- tim/prune/load/xml/GpxHandler.java
- tim/prune/load/xml/XmlFileLoader.java
- tim/prune/load/xml/XmlHandler.java
- tim/prune/readme.txt
- tim/prune/save/GpxExporter.java
- tim/prune/save/PovExporter.java
- tim/prune/threedee/Java3DWindow.java
Changes:
=====================================
build.sh
=====================================
@@ -1,6 +1,6 @@
# Build script
# Version number
-PRUNENAME=gpsprune_19.1
+PRUNENAME=gpsprune_19.2
# remove compile directory
rm -rf compile
# remove dist directory
=====================================
tim/prune/GpsPrune.java
=====================================
@@ -1,14 +1,14 @@
package tim.prune;
-import java.awt.event.WindowAdapter;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Image;
+import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileNotFoundException;
-import java.util.Locale;
import java.util.ArrayList;
+import java.util.Locale;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.JToolBar;
@@ -17,10 +17,10 @@ import javax.swing.WindowConstants;
import tim.prune.config.Config;
import tim.prune.config.ConfigException;
import tim.prune.gui.DetailsDisplay;
-import tim.prune.gui.SidebarController;
import tim.prune.gui.IconManager;
import tim.prune.gui.MenuManager;
import tim.prune.gui.SelectorDisplay;
+import tim.prune.gui.SidebarController;
import tim.prune.gui.StatusBar;
import tim.prune.gui.Viewport;
import tim.prune.gui.map.MapCanvas;
@@ -36,9 +36,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 = "19.1";
+ public static final String VERSION_NUMBER = "19.2";
/** Build number, just used for about screen */
- public static final String BUILD_NUMBER = "363c";
+ public static final String BUILD_NUMBER = "363d";
/** Static reference to App object */
private static App APP = null;
=====================================
tim/prune/config/Config.java
=====================================
@@ -238,7 +238,9 @@ public abstract class Config
return val;
}
- /** @return File from which config was loaded (or null) */
+ /**
+ * @return File from which config was loaded (or null)
+ */
public static File getConfigFile()
{
return _configFile;
=====================================
tim/prune/data/AltitudeRange.java
=====================================
@@ -126,16 +126,6 @@ public class AltitudeRange
_previousValue = altValue;
_gotPreviousValue = true;
}
-
-// if (!_empty)
-// {
-// if (altValue > _previousValue)
-// _climb += (altValue - _previousValue);
-// else
-// _descent += (_previousValue - altValue);
-// }
-// _previousValue = altValue;
-// _empty = false;
}
}
=====================================
tim/prune/data/FileInfo.java
=====================================
@@ -68,16 +68,18 @@ public class FileInfo
*/
public String getFilename()
{
- if (getNumFiles() == 1)
+ if (getNumFiles() == 1) {
return _sources.get(0).getName();
+ }
return "";
}
/**
- * @param inIndex index number
+ * @param inIndex index number, starting from zero
* @return source info object
*/
- public SourceInfo getSource(int inIndex) {
+ public SourceInfo getSource(int inIndex)
+ {
return _sources.get(inIndex);
}
@@ -88,7 +90,8 @@ public class FileInfo
*/
public SourceInfo getSourceForPoint(DataPoint inPoint)
{
- for (SourceInfo source : _sources) {
+ for (SourceInfo source : _sources)
+ {
if (source.getIndex(inPoint) >= 0) {
return source;
}
@@ -96,6 +99,43 @@ public class FileInfo
return null;
}
+ /**
+ * @return the info about the last file loaded, if any
+ */
+ public SourceInfo getLastFileInfo()
+ {
+ if (getNumFiles() == 0)
+ {
+ return null;
+ }
+ return getSource(getNumFiles()-1);
+ }
+
+ /**
+ * @return the most recent file title loaded, if any
+ */
+ public String getLastFileTitle()
+ {
+ final int numFiles = getNumFiles();
+ if (numFiles == 0)
+ {
+ return null;
+ }
+ for (int i=(numFiles-1); i>=0; i--)
+ {
+ SourceInfo info = getSource(i);
+ if (info != null)
+ {
+ String title = info.getFileTitle();
+ if (title != null && !title.equals(""))
+ {
+ return title;
+ }
+ }
+ }
+ return null;
+ }
+
/**
* Clone contents of file info
*/
=====================================
tim/prune/data/RangeStats.java
=====================================
@@ -21,7 +21,7 @@ public class RangeStats
private boolean _timesIncomplete = false;
private boolean _timesOutOfSequence = false;
private double _totalDistanceRads = 0.0, _movingDistanceRads = 0.0;
- // Note, maximum speed is not calculated here, use the SpeedData method instead
+ // Note, maximum speed is not calculated here, use the SpeedData class instead
private static final double STEEP_ANGLE = 0.15; // gradient steeper than 15% counts as steep
@@ -50,7 +50,8 @@ public class RangeStats
*/
private boolean calculateStats(Track inTrack, int inStartIndex, int inEndIndex)
{
- _startIndex = inStartIndex; _endIndex = inEndIndex;
+ _startIndex = inStartIndex;
+ _endIndex = inEndIndex;
_numPoints = inEndIndex - inStartIndex + 1;
_totalAltitudeRange = new AltitudeRange();
_movingAltitudeRange = new AltitudeRange();
@@ -70,7 +71,9 @@ public class RangeStats
// ignore all waypoints
if (p.isWaypoint()) continue;
- if (p.getSegmentStart()) {_numSegments++;}
+ if (p.getSegmentStart()) {
+ _numSegments++;
+ }
// Get the distance to the previous track point
if (prevPoint != null)
{
=====================================
tim/prune/data/SourceInfo.java
=====================================
@@ -17,6 +17,8 @@ public class SourceInfo
private String _sourceName = null;
/** File type */
private FILE_TYPE _fileType = null;
+ /** File title, if any */
+ private String _fileTitle = null;
/** Array of datapoints */
private DataPoint[] _points = null;
@@ -50,6 +52,14 @@ public class SourceInfo
_fileType = inType;
}
+ /**
+ * @param inTitle title of file, eg from <name> tag in gpx
+ */
+ public void setFileTitle(String inTitle)
+ {
+ _fileTitle = inTitle;
+ }
+
/**
* @return source file
*/
@@ -74,6 +84,14 @@ public class SourceInfo
return _fileType;
}
+ /**
+ * @return title of file
+ */
+ public String getFileTitle()
+ {
+ return _fileTitle;
+ }
+
/**
* @return number of points from this source
*/
=====================================
tim/prune/data/TimestampLocal.java
=====================================
@@ -91,14 +91,17 @@ public class TimestampLocal extends Timestamp
/**
* Utility method for formatting dates / times
* @param inFormat formatter object
- * @param inTimezone timezone to use
+ * @param inTimezone timezone to use, or null
* @return formatted String
*/
@Override
protected String format(DateFormat inFormat, TimeZone inTimezone)
{
Calendar cal = getCalendar(inTimezone);
- inFormat.setTimeZone(inTimezone);
+ if (inTimezone != null)
+ {
+ inFormat.setTimeZone(inTimezone);
+ }
return inFormat.format(cal.getTime());
}
}
=====================================
tim/prune/data/TrackInfo.java
=====================================
@@ -306,7 +306,8 @@ public class TrackInfo
{
boolean firstTrackPoint = true;
// Loop between start and end
- for (int i=inStart; i<=inEnd; i++) {
+ for (int i=inStart; i<=inEnd; i++)
+ {
DataPoint point = _track.getPoint(i);
// Set all segments to false apart from first track point
if (point != null && !point.isWaypoint()) {
@@ -316,7 +317,9 @@ public class TrackInfo
}
// Find following track point, if any
DataPoint nextPoint = _track.getNextTrackPoint(inEnd+1);
- if (nextPoint != null) {nextPoint.setSegmentStart(true);}
+ if (nextPoint != null) {
+ nextPoint.setSegmentStart(true);
+ }
_selection.markInvalid();
UpdateMessageBroker.informSubscribers();
return true;
@@ -353,8 +356,10 @@ public class TrackInfo
public void incrementPointIndex(int inPointIncrement)
{
int index = _selection.getCurrentPointIndex() + inPointIncrement;
- if (index < 0) index = 0;
- else if (index >= _track.getNumPoints()) index = _track.getNumPoints()-1;
+ if (index < 0)
+ index = 0;
+ else if (index >= _track.getNumPoints())
+ index = _track.getNumPoints()-1;
selectPoint(index);
}
@@ -364,7 +369,9 @@ public class TrackInfo
*/
public void selectPoint(int inPointIndex)
{
- if (_selection.getCurrentPointIndex() == inPointIndex || inPointIndex >= _track.getNumPoints()) {return;}
+ if (_selection.getCurrentPointIndex() == inPointIndex || inPointIndex >= _track.getNumPoints()) {
+ return;
+ }
DataPoint selectedPoint = _track.getPoint(inPointIndex);
// get the index of the current photo
int photoIndex = _selection.getCurrentPhotoIndex();
@@ -397,7 +404,9 @@ public class TrackInfo
*/
public void selectPhoto(int inPhotoIndex)
{
- if (_selection.getCurrentPhotoIndex() == inPhotoIndex) {return;}
+ if (_selection.getCurrentPhotoIndex() == inPhotoIndex) {
+ return;
+ }
// Photo is primary selection here, not as a result of a point selection
// Therefore the photo selection takes priority, deselecting point if necessary
// Find Photo object
@@ -426,11 +435,13 @@ public class TrackInfo
// Has the new point got an audio clip?
DataPoint selectedPoint = _track.getPoint(pointIndex);
int audioIndex = _selection.getCurrentAudioIndex();
- if (selectedPoint != null && selectedPoint.getAudio() != null) {
+ if (selectedPoint != null && selectedPoint.getAudio() != null)
+ {
// New point has an audio, so select it
audioIndex = _audioList.getAudioIndex(selectedPoint.getAudio());
}
- else if (currPoint != null && selectedPoint != currPoint && currPoint.getAudio() != null) {
+ else if (currPoint != null && selectedPoint != currPoint && currPoint.getAudio() != null)
+ {
// Old point had an audio, so deselect it
audioIndex = -1;
}
@@ -444,7 +455,9 @@ public class TrackInfo
*/
public void selectAudio(int inAudioIndex)
{
- if (_selection.getCurrentAudioIndex() == inAudioIndex) {return;}
+ if (_selection.getCurrentAudioIndex() == inAudioIndex) {
+ return;
+ }
// Audio selection takes priority, deselecting point if necessary
AudioClip audio = _audioList.getAudio(inAudioIndex);
int pointIndex = _selection.getCurrentPointIndex();
=====================================
tim/prune/gui/map/MapCanvas.java
=====================================
@@ -1076,7 +1076,7 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe
{
if (_track != null && _track.getNumPoints() > 0)
{
- // select point if it's a left-click
+ // select point if it's a left-click
if (!inE.isMetaDown())
{
if (inE.getClickCount() == 1)
@@ -1269,9 +1269,27 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe
*/
public void mouseDragged(MouseEvent inE)
{
- if (!inE.isMetaDown())
+ // Note: One would expect inE.isMetaDown() to give information about whether this is a
+ // drag with the right mouse button or not - but since java 9 this is buggy,
+ // so we use the beautifully-named getModifiersEx() instead.
+ // And logically BUTTON3 refers to the secondary mouse button, not the tertiary one!
+ final boolean isRightDrag = (inE.getModifiersEx() & InputEvent.BUTTON3_DOWN_MASK) > 0;
+ if (isRightDrag)
+ {
+ // Right-click and drag - update rectangle
+ _drawMode = MODE_ZOOM_RECT;
+ if (_dragFromX == -1) {
+ _dragFromX = inE.getX();
+ _dragFromY = inE.getY();
+ }
+ _dragToX = inE.getX();
+ _dragToY = inE.getY();
+ repaint();
+ }
+ else
{
- // Left mouse drag - either drag the point or pan the map
+ // Left mouse drag - decide whether to drag the point, drag the
+ // marking rectangle or pan the map
if (_drawMode == MODE_DRAG_POINT || _drawMode == MODE_CREATE_MIDPOINT)
{
// move point
@@ -1302,18 +1320,6 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe
_dragFromY = _dragToY = inE.getY();
}
}
- else
- {
- // Right-click and drag - update rectangle
- _drawMode = MODE_ZOOM_RECT;
- if (_dragFromX == -1) {
- _dragFromX = inE.getX();
- _dragFromY = inE.getY();
- }
- _dragToX = inE.getX();
- _dragToY = inE.getY();
- repaint();
- }
}
/**
=====================================
tim/prune/gui/map/MapSource.java
=====================================
@@ -89,7 +89,7 @@ public abstract class MapSource
// check prefix
try
{
- urlOk = new URL(urlstr.replace('[', 'w').replace(']', 'w')) != null;
+ urlOk = new URL(urlstr.replace('[', 'w').replace(']', 'w')).toString() != null;
}
catch (MalformedURLException e)
{
=====================================
tim/prune/gui/map/MapSourceLibrary.java
=====================================
@@ -38,14 +38,9 @@ public abstract class MapSourceLibrary
*/
private static void addFixedSources()
{
- final String THUNDERFOREST_APIKEY = "c32212f10b13496786b98dc6c42e5c3c";
- _sourceList.add(new OsmMapSource("Mapnik", "http://[abc].tile.openstreetmap.org/"));
- OsmMapSource cycleSource = new OsmMapSource("OpenCycleMap", "http://[abc].tile.thunderforest.com/cycle/");
- cycleSource.setApiKey(THUNDERFOREST_APIKEY);
- _sourceList.add(cycleSource);
- OsmMapSource outdoorsSource = new OsmMapSource("Outdoors", "http://[abc].tile.thunderforest.com/outdoors/");
- outdoorsSource.setApiKey(THUNDERFOREST_APIKEY);
- _sourceList.add(outdoorsSource);
+ _sourceList.add(new OsmMapSource("Mapnik", "https://[abc].tile.openstreetmap.org/"));
+ _sourceList.add(new OsmMapSource("Cycling Trails", "https://[abc].tile.openstreetmap.org/", "png",
+ "https://tile.waymarkedtrails.org/cycling/", "png", 18));
_sourceList.add(new OsmMapSource("Reitkarte", "http://topo[234].wanderreitkarte.de/topo/"));
_sourceList.add(new MffMapSource("Mapsforfree", "http://maps-for-free.com/layer/relief/", "jpg",
"http://maps-for-free.com/layer/water/", "gif", 11));
=====================================
tim/prune/lang/prune-texts_fi.properties
=====================================
@@ -127,7 +127,6 @@ function.rearrangephotos=J\u00e4rjest\u00e4 kuvat...
function.rotatephotoleft=Kierr\u00e4 kuvaa vasemmalle
function.rotatephotoright=Kierr\u00e4 kuvaa oikealle
function.photopopup=N\u00e4yt\u00e4 kuvaikkunassa
-function.ignoreexifthumb=Ignore exif thumbnail
function.loadaudio=Lis\u00e4\u00e4 \u00e4\u00e4nileikkeet...
function.removeaudio=Poista \u00e4\u00e4nileike
function.correlateaudios=Korreloi \u00e4\u00e4net
@@ -205,12 +204,9 @@ dialog.gpsbabel.filter.discard.intro=Hylk\u00e4\u00e4 pisteet, jos
dialog.gpsbabel.filter.discard.hdop=Hdop >
dialog.gpsbabel.filter.discard.vdop=Vdop >
dialog.gpsbabel.filter.discard.numsats=Sateliittien lukum\u00e4\u00e4r\u00e4 <
-dialog.gpsbabel.filter.discard.nofix=Point has no fix
-dialog.gpsbabel.filter.discard.unknownfix=Point has unknown fix
dialog.gpsbabel.filter.simplify.intro=Poista pisteit\u00e4, kunnes
dialog.gpsbabel.filter.simplify.maxpoints=Pisteiden m\u00e4\u00e4r\u00e4 <
dialog.gpsbabel.filter.simplify.maxerror=tai virhev\u00e4limatka <
-dialog.gpsbabel.filter.simplify.crosstrack=cross-track
dialog.gpsbabel.filter.simplify.length=pituusero
dialog.gpsbabel.filter.simplify.relative=suhteessa hdop:iin
dialog.gpsbabel.filter.distance.intro=Poista sellaiset pisteet, jotka l\u00e4hell\u00e4 jotain edellist\u00e4 pistett\u00e4
@@ -275,7 +271,6 @@ dialog.pointtype.track=Reittipisteet
dialog.pointtype.waypoint=Kohdepisteet
dialog.pointtype.photo=Kuvien pisteet
dialog.pointtype.audio=\u00c4\u00e4nien pisteet
-dialog.pointtype.selection=Just selection
dialog.confirmreversetrack.title=Vahvista k\u00e4\u00e4nteisj\u00e4rjest\u00e4minen
dialog.confirmreversetrack.text=T\u00e4m\u00e4 reitti sis\u00e4lt\u00e4\u00e4 aikaleimoja, joiden aikaj\u00e4rjestys ei ole oikea pisteiden k\u00e4\u00e4teisj\u00e4rjestelyn j\u00e4lkeen.\nHaluatko varmasti k\u00e4\u00e4nteisj\u00e4rjest\u00e4\u00e4 t\u00e4m\u00e4n alueen?
dialog.confirmcutandmove.title=Vahvista leikkaa ja siirr\u00e4
@@ -370,7 +365,6 @@ dialog.gpsies.nonefound=Reittej\u00e4 ei l\u00f6ytynyt
dialog.gpsies.username=Gpsies.com:n k\u00e4ytt\u00e4j\u00e4nimi
dialog.gpsies.password=Gpsies.com:n salasana
dialog.gpsies.keepprivate=Pid\u00e4 reitti yksityisen\u00e4
-dialog.gpsies.confirmopenpage=Open the web page for the uploaded track?
dialog.gpsies.activities=Aktiviteettityypit
dialog.gpsies.activity.trekking=Patikointi
dialog.gpsies.activity.walking=K\u00e4vely
@@ -548,12 +542,10 @@ dialog.diskcache.createdir=Luodaanko hakemisto
dialog.diskcache.nocreate=V\u00e4limuistin hakemistoa ei luotu
dialog.diskcache.cannotwrite=Karttapaloja ei voida tallentaa valittuun hakemistoon
dialog.diskcache.table.path=Hakemistoolku
-dialog.diskcache.table.usedby=Used by
dialog.diskcache.table.zoom=Zoom
dialog.diskcache.table.tiles=Tiles
dialog.diskcache.table.megabytes=Megabytes
dialog.diskcache.tileset=Tileset
-dialog.diskcache.tileset.multiple=multiple
dialog.diskcache.deleteold=Poista vanhan karttapalat
dialog.diskcache.maximumage=Enimm\u00e4isik\u00e4 (p\u00e4ivi\u00e4)
dialog.diskcache.deleteall=Poista kaikki kartapalat
@@ -620,27 +612,9 @@ dialog.3d.altitudefactor=Korkeuden liioittelukerroin
# Confirm messages
confirm.loadfile=Paikkatieto ladattu tiedostosta
-confirm.save.ok1=Successfully saved
-confirm.save.ok2=points to file
-confirm.deletepoint.single=data point was removed
-confirm.deletepoint.multi=data points were removed
-confirm.point.edit=point edited
-confirm.mergetracksegments=Track segments merged
-confirm.reverserange=Range reversed
-confirm.addtimeoffset=Time offset added
-confirm.addaltitudeoffset=Altitude offset added
confirm.rearrangewaypoints=Kohdepisteet j\u00e4rjestetty uudelleen
confirm.rearrangephotos=Kuvat j\u00e4rjestetty uudelleen
-confirm.splitsegments=%d segment splits were made
-confirm.sewsegments=%d segment joins were made
-confirm.cutandmove=Selection moved
-confirm.interpolate=Points added
confirm.convertnamestotimes=V\u00e4lipisteiden nimet muunnettu
-confirm.saveexif.ok=Saved %d photo files
-confirm.undo.single=operation undone
-confirm.undo.multi=operations undone
-confirm.jpegload.single=photo was added
-confirm.jpegload.multi=photos were added
confirm.media.connect=media liitetty
confirm.photo.disconnect=kuva liitt\u00e4m\u00e4t\u00e6n
confirm.audio.disconnect=\u00e4\u00e4ni liitt\u00e4m\u00e4t\u00e6n
@@ -755,7 +729,6 @@ details.photo.loading=Lataan
details.photo.bearing=Suunta
details.media.connected=Liitetty
details.media.fullpath=Tiedostopolku
-details.audiodetails=Audio details
details.noaudio=\u00c4\u00e4nileikett\u00e4 ei valittuna
details.audio.file=\u00c4\u00e4nitiedosto
details.audio.playing=toistetaan...
@@ -819,9 +792,9 @@ logic.and=ja
logic.or=tai
# External urls
-url.googlemaps=maps.google.co.uk
-wikipedia.lang=en
-openweathermap.lang=en
+url.googlemaps=maps.google.fi
+wikipedia.lang=fi
+openweathermap.lang=fi
webservice.peakfinder=Avaa Peakfinder.org
webservice.geohack=Avaa Geohack-sivu
@@ -858,7 +831,6 @@ undo.rearrangephotos=j\u00e4rjest\u00e4 kuvat
undo.rotatephoto=kierr\u00e4 kuvaa
undo.createpoint=luo piste
undo.convertnamestotimes=muunna nimet ajoiksi
-undo.lookupsrtm=lookup altitudes from SRTM
undo.deletefieldvalues=poista kentt\u00e4arvot
undo.correlateaudios=korreloi \u00e4\u00e4nileikkeet
=====================================
tim/prune/lang/prune-texts_pl.properties
=====================================
@@ -146,6 +146,7 @@ function.diskcache=Zapisz mapy na dysk
function.managetilecache=Zarz\u0105dzaj keszem p\u0142ytek
function.getweatherforecast=Pobierz prognoz\u0119 pogody
function.setaltitudetolerance=Ustaw tolerancj\u0119 wysoko\u015bci
+function.selecttimezone=Ustaw stref\u0119 czasow\u0105
# Dialogs
dialog.exit.confirm.title=Zako\u0144cz GpsPrune
@@ -383,6 +384,7 @@ dialog.wikipedia.column.name=Tytu\u0142 artyku\u0142u
dialog.wikipedia.column.distance=Odleg\u0142o\u015b\u0107
dialog.wikipedia.nonefound=Brak wpis\u00f3w w wikipedii
dialog.wikipedia.gallery=Galeria
+dialog.osmpois.column.name=Nazwa
dialog.geocaching.nonefound=Nic nie zosta\u0142o znalezione
dialog.correlate.notimestamps=Punkty nie maj\u0105 znacznik\u00f3w czasu, nie mo\u017cna ich powi\u0105za\u0107 ze zdj\u0119ciami.
dialog.correlate.nouncorrelatedphotos=Nie ma nie powi\u0105zanych zdj\u0119\u0107.\nCzy na pewno chcesz kontynuowa\u0107?
@@ -442,7 +444,7 @@ dialog.deletemarked.nonefound=Nie mo\u017cna usun\u0105\u0107 \u017cadnych punkt
dialog.pastecoordinates.desc=Wprowad\u017a lub wklej wsp\u00f3\u0142rz\u0119dne
dialog.pastecoordinates.coords=Wsp\u00f3\u0142rz\u0119dne
dialog.pastecoordinates.nothingfound=Sprawd\u017a wsp\u00f3\u0142rz\u0119dne i spr\u00f3buj jeszcze raz
-dialog.help.help=Na stronie\nhttp://gpsprune.activityworkshop.net/\nznajdziesz wi\u0119cej informacji i porad\noraz mo\u017cliwo\u015b\u0107 kupna podr\u0119cznika u\u017cytkownika w formacie PDF.
+dialog.help.help=Na stronie\nhttps://gpsprune.activityworkshop.net/\nznajdziesz wi\u0119cej informacji i porad\noraz mo\u017cliwo\u015b\u0107 kupna podr\u0119cznika u\u017cytkownika w formacie PDF.
dialog.about.version=Wersja
dialog.about.build=Build
dialog.about.summarytext1=GpsPrune s\u0142u\u017cy do pobierania, wy\u015bwietlania i edycji danych z odbiornik\u00f3w GPS.
@@ -476,7 +478,7 @@ dialog.checkversion.newversion1=Dost\u0119pna jest nowa wersja GpsPrune! Najnows
dialog.checkversion.newversion2=.
dialog.checkversion.releasedate1=Nowa wersja zosta\u0142a opublikowana
dialog.checkversion.releasedate2=.
-dialog.checkversion.download=Aby \u015bci\u0105gn\u0105\u0107 now\u0105 wersj\u0119 przejd\u017a na http://gpsprune.activityworkshop.net/download.html.
+dialog.checkversion.download=Aby \u015bci\u0105gn\u0105\u0107 now\u0105 wersj\u0119 przejd\u017a na https://gpsprune.activityworkshop.net/download.html.
dialog.keys.intro=U\u017cuwaj nast\u0119puj\u0105cych klawiszy skr\u00f3t\u00f3w zamiast myszki
dialog.keys.keylist=<table><tr><td>klawisze strza\u0142ek</td><td>Przesuwa map\u0119 w lewo, w prawo, w g\u00f3r\u0119, w d\u00f3\u0142</td></tr><tr><td>Ctrl + lewa, prawa strza\u0142ka</td><td>Wybierz punkt poprzedni lub nast\u0119pny</td></tr><tr><td>Ctrl + strza\u0142ka w g\u00f3r\u0119, w d\u00f3\u0142</td><td>Powi\u0119ksz, pomniejsz</td></tr><tr><td>Del</td><td>Usun bie\u017c\u0105cy punkt</td></tr></table>
dialog.keys.normalmodifier=Ctrl
@@ -591,6 +593,7 @@ dialog.deletebydate.column.keep=Zostaw
dialog.deletebydate.column.delete=Usu\u0144
dialog.setaltitudetolerance.text.metres=Limit (w metrach) poni\u017cej kt\u00f3rego, ma\u0142e spadki wzniosy b\u0119d\u0105 ignorowane
dialog.setaltitudetolerance.text.feet=Limit (w stopach) poni\u017cej kt\u00f3rego, ma\u0142e spadki wzniosy b\u0119d\u0105 ignorowane
+dialog.settimezone.selectedzone=Wybrana strefa czasowa
dialog.autoplay.duration=Czas trwania (sek)
dialog.autoplay.usetimestamps=U\u017Cyj znacznik\u00f3w czasowych
dialog.autoplay.rewind=Przewin\u0105\u0107
=====================================
tim/prune/lang/prune-texts_sv.properties
=====================================
@@ -7,15 +7,11 @@ menu.file.addphotos=L\u00e4gg till foto
menu.file.recentfiles=Senaste filer
menu.file.save=Spara som text
menu.file.exit=Avsluta
+menu.online=Online
menu.track=Sp\u00e5r
menu.track.undo=\u00c5ngra
menu.track.clearundo=Rensa \u00e5ngra-historik
menu.track.markrectangle=Markera punkter i rektangel
-function.deletemarked=Radera markerade punkter
-function.rearrangewaypoints=Ordna waypoints
-dialog.rearrange.tostart=Alla till b\u00f6rjan av fil
-dialog.rearrange.toend=Alla till slut av fil
-dialog.rearrange.tonearest=Varje till n\u00e4rmaste sp\u00e5rpunkt
menu.range=Intervall
menu.range.all=V\u00e4lj alla
menu.range.none=V\u00e4lj ingen
@@ -43,6 +39,7 @@ menu.settings=Inst\u00e4llningar
menu.settings.onlinemode=H\u00e4mta kartor fr\u00e5n Internet
menu.settings.autosave=Autospara inst\u00e4llningar vid avslut
menu.help=Hj\u00e4lp
+
# Popup menu for map
menu.map.zoomin=Zooma ut
menu.map.zoomout=Zooma in
@@ -57,6 +54,7 @@ menu.map.editmode=Redigeringsl\u00e4ge
# Alt keys for menus
altkey.menu.file=A
+altkey.menu.online=N
altkey.menu.track=S
altkey.menu.range=I
altkey.menu.point=P
@@ -71,6 +69,7 @@ shortcut.menu.file.open=O
shortcut.menu.file.load=L
shortcut.menu.file.save=S
shortcut.menu.track.undo=Z
+shortcut.menu.track.compress=K
shortcut.menu.range.all=A
shortcut.menu.help.help=H
@@ -85,17 +84,334 @@ function.exportpov=Exportera POV
function.exportimage=Exportera bildfil
function.editwaypointname=Redigera namn p\u00e5 waypoint
function.compress=Komprimera sp\u00e5r
+function.deletemarked=Radera markerade punkter
+function.marklifts=Markera liftar
function.deleterange=Radera intervall
function.croptrack=Besk\u00e4r sp\u00e5r till intervall
function.interpolate=Interpolera punkter
+function.deletebydate=Ta bort punkter datumvis
function.addtimeoffset=Infoga tidsoffset
function.addaltitudeoffset=Infoga h\u00f6jdoffset
+function.rearrangewaypoints=Ordna waypoints
function.convertnamestotimes=Omvandla waypointnamn till tidpunkter
+function.deletefieldvalues=Ta bort f\u00e4lt-v\u00e4rden
function.findwaypoint=S\u00f6k waypoint
function.pastecoordinates=Infoga koordinater
function.charts=Diagram
function.show3d=3D-vy
function.distances=Avst\u00e5nd
+function.fullrangedetails=Alla intevall-detaljer
function.estimatetime=Uppskatta tid
+function.learnestimationparams=L\u00e4r upp tidsuppskattningsparametrar
+function.setmapbg=V\u00e4lj bakgrundskarta
+function.setpaths=V\u00e4lj s\u00f6kv\u00e4gar f\u00f6r program
+function.selectsegment=Markera aktuellt segment
+function.splitsegments=Dela upp sp\u00e5ret i segment
+function.sewsegments=Sy ihop sp\u00e5r-segment
+function.createmarkerwaypoints=Skapa markerings-waypoints
+function.getgpsies=H\u00e4mta Gpsies-sp\u00e5r
+function.uploadgpsies=Ladda upp sp\u00e5r till Gpsies
+function.lookupsrtm=H\u00e4mta h\u00f6jddata fr\u00e5n SRTM
+function.downloadsrtm=Ladda ner SRTM-h\u00f6jddata
+function.getwikipedia=H\u00e4mta n\u00e4rliggande Wikipedia-artiklar
+function.searchwikipedianames=S\u00f6k i Wikipedia p\u00e5 namn
+function.searchosmpois=H\u00e4mta n\u00e4rliggande OSM-punkter
+function.searchopencachingde=S\u00f6k p\u00e5 OpenCaching.de
+function.mapillary=S\u00f6k efter foton i Mapillary
+function.downloadosm=Ladda ner OSM-data f\u00f6r omr\u00e5det
+function.duplicatepoint=Duplicera punkt
+function.setcolours=V\u00e4lj f\u00e4rger
+function.setdisplaysettings=V\u00e4lj visningsalternativ
+function.setlanguage=V\u00e4lj spr\u00e5k
+function.connecttopoint=Koppla till punkt
+function.disconnectfrompoint=Ta bort koppling till punkt
+function.removephoto=Ta bort foto
+function.correlatephotos=Korrelera foton
+function.rearrangephotos=Arrangera om foton
+function.rotatephotoleft=Rotera foto moturs
+function.rotatephotoright=Rotera foto medurs
+function.photopopup=Visa foto i eget f\u00f6nster
+function.ignoreexifthumb=Ignorera miniatyrbild i exif
+function.loadaudio=L\u00e4gg till ljudklipp
+function.removeaudio=Ta bort ljudklipp
+function.correlateaudios=Korrelera ljudklipp
+function.playaudio=Spela upp ljudklipp
+function.stopaudio=Stoppa ljudklipp
+function.help=Hj\u00e4lp
+function.showkeys=Visa snabbkommandon
+function.about=Om GpsPrune
+function.checkversion=Kolla efter ny version
+function.saveconfig=Spara inst\u00e4llningar
+function.diskcache=Spara kartor p\u00e5 h\u00e5rddisken
+function.managetilecache=Hantera kart-cache
+function.getweatherforecast=H\u00e4mta v\u00e4derprognos
+function.setaltitudetolerance=S\u00e4tt toleransniv\u00e5 f\u00f6r h\u00f6jd
+function.selecttimezone=V\u00e4lj tidszon
+
+# Dialogs
+dialog.exit.confirm.title=Avsluta GpsPrune
+dialog.exit.confirm.text=Ditt arbete har inte sparats \u00e4n. \u00c4r du s\u00e4ker p\u00e5 att du vill avsluta?
+dialog.openappend.title=L\u00e4gg till datan till existerande data
+dialog.openappend.text=L\u00e4gg till denna datan till datan som redan \u00e4r laddad?
+dialog.deletepoint.title=Ta bort punkt
+dialog.deletepoint.deletephoto=Ta bort fotot som \u00e4r bifogat till denna punkt?
+dialog.deletephoto.title=Ta bort foto
+dialog.deletephoto.deletepoint=Ta bort punkten som \u00e4r bifogad till detta foto?
+dialog.deleteaudio.deletepoint=Ta bort punkten som \u00e4r bifogad till detta ljudklipp?
+dialog.openoptions.title=\u00d6ppna inst\u00e4llningar
+dialog.openoptions.filesnippet=Filextrakt
+dialog.load.table.field=F\u00e4lt
+dialog.load.table.datatype=Datatyp
+dialog.load.table.description=Beskrivning
+dialog.delimiter.comma=Komma ,
+dialog.delimiter.space=Mellanslag
+dialog.delimiter.other=Annat
+dialog.openoptions.altitudeunits=H\u00f6jdenhet
+dialog.openoptions.speedunits=Hastighetsenheter
+dialog.openoptions.vertspeedunits=Enheter f\u00f6r vertikal hastighet
+dialog.openoptions.vspeed.positiveup=Positiv hastighet upp\u00e5t
+dialog.openoptions.vspeed.positivedown=Positiv hastighet ned\u00e5t
+dialog.open.contentsdoubled=Denna filen inneh\u00e5ller tv\u00e5 kopior av varje punkt,\nen g\u00e5ng som waypoint och en g\u00e5ng som punkt i ett sp\u00e5r.
+dialog.selecttracks.intro=V\u00e4lj sp\u00e5r att ladda in
+dialog.selecttracks.noname=Namnl\u00f6s
+dialog.jpegload.subdirectories=Inkludera undermappar
+dialog.jpegload.loadjpegswithoutcoords=Inkludera foton utan koordinater
+dialog.jpegload.loadjpegsoutsidearea=Inkludera foton utanf\u00f6r aktuellt omr\u00e5de
+dialog.jpegload.progress.title=Laddar in foton
+dialog.jpegload.progress=V\u00e4nta medan foton s\u00f6ks
+dialog.gpsload.nogpsbabel=Inget GPSBabel-program kunde hittas. Forts\u00e4tt \u00e4nd\u00e5?
+dialog.gpsload.format=Format
+dialog.gpsload.getwaypoints=Ladda in waypoints
+dialog.gpsload.gettracks=Ladda in sp\u00e5r
+dialog.gpsload.save=Spara till fil
+dialog.gpssend.sendwaypoints=Skicka waypoints
+dialog.gpssend.sendtracks=Skicka sp\u00e5r
+dialog.gpssend.trackname=Namn p\u00e5 sp\u00e5r
+dialog.gpsbabel.filters=Filter
+dialog.addfilter.title=L\u00e4gg till filter
+dialog.gpsbabel.filter.discard=Skippa
+dialog.gpsbabel.filter.simplify=F\u00f6renkla
+dialog.gpsbabel.filter.distance=Avst\u00e5nd
+dialog.gpsbabel.filter.interpolate=Interpolera
+dialog.gpsbabel.filter.discard.intro=Skippa punkter om
+dialog.gpsbabel.filter.discard.numsats=Antal satelliter <
+dialog.gpsbabel.filter.simplify.intro=Ta bort punkter tills
+dialog.gpsbabel.filter.simplify.maxpoints=Antal punkter <
+dialog.gpsbabel.filter.simplify.length=l\u00e4ngdskillnad
+dialog.gpsbabel.filter.distance.intro=Ta bort punkter n\u00e4ra f\u00f6reg\u00e5ende punkter
+dialog.gpsbabel.filter.distance.distance=Om avst\u00e5ndet <
+dialog.gpsbabel.filter.distance.time=och tidsskillnaden <
+dialog.gpsbabel.filter.interpolate.intro=L\u00e4gg till extra punkter inemellan sp\u00e5rets punkter
+dialog.gpsbabel.filter.interpolate.distance=Om avst\u00e5ndet >
+dialog.gpsbabel.filter.interpolate.time=eller tidsskillnaden >
+dialog.saveoptions.title=Spara fil
+dialog.save.fieldstosave=F\u00e4lt att spara
+dialog.save.table.field=F\u00e4lt
+dialog.save.table.hasdata=Har data
+dialog.save.table.save=Spara
+dialog.save.headerrow=Skriv ut titelrad
+dialog.save.coordinateunits=Koordinat-format
+dialog.save.altitudeunits=H\u00f6jdenhet
+dialog.save.timestampformat=Tidsst\u00e4mpel-format
+dialog.save.overwrite.title=Filen existerar redan
+dialog.save.overwrite.text=Denna filen existerar redan. \u00c4r du s\u00e4ker p\u00e5 att du vill skriva \u00f6ver den?
+dialog.save.notypesselected=Inga punkt-typer har valts
+dialog.exportkml.text=Titel f\u00f6r datan
+dialog.exportkml.altitude=Absolut h\u00f6jddata (f\u00f6r flyg)
+dialog.exportkml.kmz=Komprimera till kmz-fil
+dialog.exportkml.imagesize=Bild-storlek
+dialog.exportkml.trackcolour=F\u00e4rg p\u00e5 sp\u00e5r
+dialog.exportkml.standardkml=Standard KML
+dialog.exportkml.extendedkml=KML ut\u00f6kad med tidsst\u00e4mplar
+dialog.exportgpx.name=Namn
+dialog.exportgpx.desc=Beskrivning
+dialog.exportgpx.includetimestamps=Inkludera tidsst\u00e4mplar
+dialog.exportgpx.copysource=Kopiera k\u00e4ll-xml
+dialog.exportgpx.encoding=Teckenkodning
+dialog.exportgpx.encoding.system=System
+dialog.exportgpx.encoding.utf8=UTF-8
+dialog.exportpov.text=Fyll i parametrar f\u00f6r POV-export
+dialog.exportpov.font=Font
+dialog.exportpov.camerax=Kamera X
+dialog.exportpov.cameray=Kamera Y
+dialog.exportpov.cameraz=Kamera Z
+dialog.exportpov.modelstyle=Modell-typ
+dialog.exportpov.ballsandsticks=Kulor och stavar
+dialog.exportpov.tubesandwalls=R\u00f6r och v\u00e4ggar
+dialog.3d.warningtracksize=Detta sp\u00e5r har v\u00e4ldigt m\u00e5nga punkter som Java3D kan ha problem med att visa.\n\u00c4r du s\u00e4ker p\u00e5 att du vill forts\u00e4tta?
+dialog.3d.useterrain=Visa terr\u00e4ng
+dialog.3d.terraingridsize=Storlek p\u00e5 rutn\u00e4t
+dialog.exportpov.baseimage=Bild f\u00f6r basplanet
+dialog.exportpov.cannotmakebaseimage=Kunde inte skriva bild f\u00f6r basplanet
+dialog.baseimage.title=Kart-bild
+dialog.baseimage.useimage=Anv\u00e4nd bild
+dialog.baseimage.mapsource=Kart-k\u00e4lla
+dialog.baseimage.zoom=Zoom-niv\u00e5
+dialog.baseimage.incomplete=Bilden ofullst\u00e4ndig
+dialog.baseimage.tiles=Rutor
+dialog.baseimage.size=Bild-storlek
+dialog.exportimage.noimagepossible=Kart-bilder m\u00e5ste cachas f\u00f6r att kunna anv\u00e4nda dom i en export.
+dialog.exportimage.drawtrack=Rita ut sp\u00e5ret p\u00e5 kartan
+dialog.exportimage.drawtrackpoints=Rita ut sp\u00e5r-punkterna
+dialog.exportimage.textscalepercent=Textstorleksfaktor (%)
+dialog.pointtype.desc=Spara f\u00f6ljande punkt-typer:
+dialog.pointtype.track=Sp\u00e5r-punkter
+dialog.pointtype.waypoint=Waypoints
+dialog.pointtype.photo=Foto-punkter
+dialog.pointtype.audio=Ljud-punkter
+dialog.pointtype.selection=Endast markerat omr\u00e5de
+dialog.confirmreversetrack.title=Bekr\u00e4fta riktningsbyte p\u00e5 sp\u00e5ret
+dialog.confirmreversetrack.text=Detta sp\u00e5r inneh\u00e5ller tidsst\u00e4mplar som kommer hamna i oordning efter en v\u00e4ndning av sp\u00e5r-sektionen.\n\u00c4r du s\u00e4ker p\u00e5 att du vill v\u00e4nda riktning p\u00e5 denna sp\u00e5r-sektion?
+dialog.confirmcutandmove.title=Bekr\u00e4fta urklippning och flytt
+dialog.confirmcutandmove.text=Detta sp\u00e5r inneh\u00e5ller tidsst\u00e4mplar som kommer hamna i oordning efter en flytt av sp\u00e5r-sektionen.\n\u00c4r du s\u00e4ker p\u00e5 att du vill flytta sp\u00e5r-sektionen?
+dialog.interpolate.parameter.text=Antal punkter att infoga mellan varje nuvarande punkt
+dialog.interpolate.betweenwaypoints=Interpolera mellan waypoints?
+dialog.undo.title=\u00c5ngra \u00e4ndring(ar)
+dialog.undo.pretext=V\u00e4lj \u00e4ndring(ar) att \u00e5ngra
+dialog.undo.none.title=Kan inte \u00e5ngra
+dialog.undo.none.text=Inga \u00e4ndringar att \u00e5ngra!
+dialog.clearundo.title=T\u00f6m \u00e5ngringslistan
+dialog.clearundo.text=\u00c4r du s\u00e4ker p\u00e5 att du vill t\u00f6mma \u00e5ngringslistan?\nAll \u00e5ngerinformation kommer att f\u00f6rsvinna!
+dialog.pointedit.title=Redigera punkt
+dialog.pointedit.intro=V\u00e4lj varje f\u00e4lt var f\u00f6r sig f\u00f6r att se och \u00e4ndra v\u00e4rde
+dialog.pointedit.table.field=F\u00e4lt
+dialog.pointedit.nofield=Inget f\u00e4lt valt
+dialog.pointedit.table.value=V\u00e4rde
+dialog.pointnameedit.name=Waypoint-namn
+dialog.pointnameedit.uppercase=STORA BOKST\u00c4VER
+dialog.pointnameedit.lowercase=sm\u00e5 bokst\u00e4ver
+dialog.pointnameedit.titlecase=F\u00f6rsta Stor
+dialog.addtimeoffset.add=L\u00e4gg till tid
+dialog.addtimeoffset.subtract=Dra ifr\u00e5n tid
+dialog.addtimeoffset.days=Dagar
+dialog.addtimeoffset.hours=Timmar
+dialog.addtimeoffset.minutes=Minuter
+dialog.addtimeoffset.notimestamps=Kan inte utf\u00f6ra en tidsoffset eftersom detta intervall inte inneh\u00e5ller n\u00e5gra tidsst\u00e4mplar
+dialog.findwaypoint.intro=Fyll i del av waypoint-namnet
+dialog.findwaypoint.search=S\u00f6k
+dialog.saveexif.title=Spara Exif
+dialog.saveexif.intro=V\u00e4lj foton att spara med kryssrutorna
+dialog.saveexif.nothingtosave=Koordinat-data of\u00f6r\u00e4ndrat, ingen \u00e4ndring att spara
+dialog.saveexif.noexiftool=Inget exiftool-program kunde hittas. Forts\u00e4tt?
+dialog.saveexif.table.photoname=Foto-namn
+dialog.saveexif.table.status=Status
+dialog.saveexif.table.save=Spara
+dialog.saveexif.photostatus.connected=Kopplad
+dialog.saveexif.photostatus.disconnected=Bortkopplad
+dialog.saveexif.photostatus.modified=\u00c4ndrad
+dialog.saveexif.overwrite=Skriv \u00f6ver filer
+dialog.saveexif.force=Tvinga trots mindre fel
+dialog.charts.xaxis=X-axel
+dialog.charts.yaxis=Y-axlar
+dialog.charts.output=Utdata
+dialog.charts.screen=Utdata till bildsk\u00e4rm
+dialog.charts.svg=Utdata till SVG-fil
+dialog.charts.svgwidth=SVG bredd
+dialog.charts.svgheight=SVG h\u00f6jd
+dialog.charts.needaltitudeortimes=Sp\u00e5ret m\u00e5ste ha antingen h\u00f6jd- eller tidsdata f\u00f6r att kunna skapa grafer
+dialog.charts.gnuplotnotfound=Kunde inte hitta gnuplot p\u00e5 angiven s\u00f6kv\u00e4g
+dialog.distances.intro=F\u00e5gelv\u00e4g mellan punkter
+dialog.distances.column.from=Fr\u00e5n punkt
+dialog.distances.column.to=Till punkt
+dialog.distances.currentpoint=Nuvarande punkt
+dialog.distances.toofewpoints=Denna funktion beh\u00f6ver waypoints f\u00f6r att ber\u00e4kna avst\u00e5nden d\u00e4remellan
+dialog.fullrangedetails.intro=H\u00e4r \u00e4r alla detaljer f\u00f6r det markerade intervallet
+dialog.fullrangedetails.coltotal=Inklusive gap
+dialog.fullrangedetails.colsegments=Utan gap
+dialog.estimatetime.details=Detaljer
+dialog.estimatetime.gentle=Flackt
+dialog.estimatetime.steep=Brant
+dialog.estimatetime.climb=Kl\u00e4ttring
+dialog.estimatetime.descent=Nedf\u00f6r
+dialog.estimatetime.parameters=Parametrar
+dialog.estimatetime.parameters.timefor=Tid f\u00f6r
+dialog.estimatetime.results=Resultat
+dialog.estimatetime.results.estimatedtime=Ber\u00e4knad tid
+dialog.estimatetime.results.actualtime=Faktisk tid
+dialog.estimatetime.error.nodistance=Tidsuppskattningen kr\u00e4ver kopplade sp\u00e5rpunkter f\u00f6r att f\u00e5 avst\u00e5nd
+dialog.estimatetime.error.noaltitudes=Intervallet har ingen h\u00f6jd-data
+dialog.learnestimationparams.intro=Detta \u00e4r parametrarna ber\u00e4knade fr\u00e5n detta sp\u00e5ret
+dialog.rearrange.tostart=Alla till b\u00f6rjan av fil
+dialog.rearrange.toend=Alla till slut av fil
+dialog.rearrange.tonearest=Varje till n\u00e4rmaste sp\u00e5rpunkt
+
+# Buttons
+button.ok=OK
+button.back=Bak\u00e5t
+button.next=N\u00e4sta
+button.cancel=Avbryt
+button.overwrite=Skriv \u00f6ver
+button.moveup=Flytta upp
+button.movedown=Flytta ner
+button.edit=Redigera
+button.exit=Avsluta
+button.close=St\u00e4ng
+button.yes=Ja
+button.no=Nej
+button.yestoall=Ja till alla
+button.notoall=Nej till alla
+button.always=Alltid
+button.select=Markera
+button.selectall=Markera alla
+button.selectnone=Markera inget
+button.preview=F\u00f6rhandsvisa
+button.load=Ladda in
+button.upload=Ladda upp
+button.guessfields=Gissa f\u00e4lt
+button.showwebpage=Visa hemsida
+button.resettodefaults=\u00c5terst\u00e4ll till default
+button.browse=Bl\u00e4ddra...
+button.addnew=L\u00e4gg till ny
+button.delete=Ta bort
+button.manage=Hantera
+button.combine=Kombinera
+
+# Display components
+display.nodata=Ingen data laddad
+display.noaltitudes=Sp\u00e5rdatan saknar h\u00f6jddata
+display.notimestamps=Sp\u00e5rdatan saknar tidsst\u00e4mplar
+display.novalues=Sp\u00e5rdatan saknar v\u00e4rden f\u00f6r detta f\u00e4lt
+details.trackdetails=Sp\u00e5r-detaljer
+details.notrack=Inget sp\u00e5r laddat
+details.track.points=Punkter
+details.track.file=Fil
+details.track.numfiles=Antal filer
+details.pointdetails=Punkt-detaljer
+details.index.selected=Index
+details.index.of=av
+details.nopointselection=Ingen punkt markerad
+details.photofile=Foto-fil
+details.norangeselection=Inget intervall markerat
+details.rangedetails=Intervall-detaljer
+details.range.selected=Markerat
+details.range.to=till
+details.altitude.to=till
+details.range.climb=Uppf\u00f6r
+details.range.descent=Nedf\u00f6r
+details.coordformat=Koortinat-format
+details.distanceunits=Distans-enhet
+display.range.time.secs=s
+display.range.time.mins=m
+display.range.time.hours=h
+display.range.time.days=d
+details.range.avespeed=Medelhastighet
+details.range.maxspeed=Maxhastighet
+details.range.numsegments=Antal segment
+details.range.gradient=Gradient
+details.lists.waypoints=Waypoints
+details.lists.photos=Foton
+details.lists.audio=Ljud
+details.photodetails=Foto-detaljer
+details.nophoto=Inget foto valt
+details.photo.loading=Laddar
+details.photo.bearing=B\u00e4ring
+details.media.connected=Kopplad
+details.media.fullpath=Fullst\u00e4ndig s\u00f6kv\u00e4g
+details.audiodetails=Ljud-detaljer
+details.noaudio=Inget ljudklipp valt
+details.audio.file=Ljudfil
+details.audio.playing=spelar...
+map.overzoom=Inga kartor tillg\u00e4ngliga p\u00e5 denna zoom-niv\u00e5
+# External urls and services
openweathermap.lang=se
=====================================
tim/prune/load/xml/GpxHandler.java
=====================================
@@ -19,7 +19,8 @@ public class GpxHandler extends XmlHandler
private boolean _startSegment = true;
private boolean _isTrackPoint = false;
private int _trackNum = -1;
- private GpxTag _name = new GpxTag(), _trackName = new GpxTag();
+ private GpxTag _fileTitle = new GpxTag();
+ private GpxTag _pointName = new GpxTag(), _trackName = new GpxTag();
private String _latitude = null, _longitude = null;
private GpxTag _elevation = new GpxTag(), _time = new GpxTag();
private GpxTag _type = new GpxTag(), _description = new GpxTag();
@@ -52,7 +53,7 @@ public class GpxHandler extends XmlHandler
else if (att.equals("lon")) {_longitude = attributes.getValue(i);}
}
_elevation.setValue(null);
- _name.setValue(null);
+ _pointName.setValue(null);
_time.setValue(null);
_type.setValue(null);
_link.setValue(null);
@@ -61,8 +62,18 @@ public class GpxHandler extends XmlHandler
else if (tag.equals("ele")) {
_currentTag = _elevation;
}
- else if (tag.equals("name")) {
- _currentTag = (_insidePoint?_name:_trackName);
+ else if (tag.equals("name"))
+ {
+ if (_insidePoint) {
+ _currentTag = _pointName;
+ }
+ else if (_trackNum < 0)
+ {
+ _currentTag = _fileTitle;
+ }
+ else {
+ _currentTag = _trackName;
+ }
}
else if (tag.equals("time")) {
_currentTag = _time;
@@ -146,7 +157,7 @@ public class GpxHandler extends XmlHandler
values[0] = _latitude;
values[1] = _longitude;
values[2] = _elevation.getValue();
- if (_insideWaypoint) {values[3] = _name.getValue();}
+ if (_insideWaypoint) {values[3] = _pointName.getValue();}
values[4] = _time.getValue();
if (_startSegment && !_insideWaypoint)
{
@@ -212,4 +223,11 @@ public class GpxHandler extends XmlHandler
public TrackNameList getTrackNameList() {
return _trackNameList;
}
+
+ /**
+ * @return file title
+ */
+ public String getFileTitle() {
+ return _fileTitle.getValue();
+ }
}
=====================================
tim/prune/load/xml/XmlFileLoader.java
=====================================
@@ -93,9 +93,11 @@ public class XmlFileLoader extends DefaultHandler implements Runnable
}
else
{
+ SourceInfo.FILE_TYPE sourceType = (_handler instanceof GpxHandler ? SourceInfo.FILE_TYPE.GPX : SourceInfo.FILE_TYPE.KML);
+ SourceInfo sourceInfo = new SourceInfo(_file, sourceType);
+ sourceInfo.setFileTitle(_handler.getFileTitle());
+
// Pass information back to app
- SourceInfo sourceInfo = new SourceInfo(_file,
- (_handler instanceof GpxHandler?SourceInfo.FILE_TYPE.GPX:SourceInfo.FILE_TYPE.KML));
_app.informDataLoaded(_handler.getFieldArray(), _handler.getDataArray(),
null, sourceInfo, _handler.getTrackNameList(),
new MediaLinkInfo(_handler.getLinkArray()));
=====================================
tim/prune/load/xml/XmlHandler.java
=====================================
@@ -36,4 +36,12 @@ public abstract class XmlHandler extends DefaultHandler
public String[] getLinkArray() {
return null;
}
+
+ /**
+ * Can be overridden (eg by gpx handler) to provide the title of the file
+ * @return file title, or null
+ */
+ public String getFileTitle() {
+ return null;
+ }
}
=====================================
tim/prune/readme.txt
=====================================
@@ -1,4 +1,4 @@
-GpsPrune version 19.1
+GpsPrune version 19.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_19.1.jar
+ java -jar gpsprune_19.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,9 +25,18 @@ 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_19.1.jar --lang=DE
+ java -jar gpsprune_19.2.jar --lang=DE
+New with version 19.2
+=====================
+The following fixes and additions were made since version 19.1:
+ - Fix right-click-and-drag bug for zooming with Java 9 and Java 10
+ - Fix export of timestamps when photo points don't have timestamps
+ - Lighting of 3d views from the northwest (thanks, PeHar)
+ - Remember the name tag from a loaded gpx file, suggest it again for gpx export
+ - Removal of the Thunderforest tile sources (OpenCycleMap, Outdoors)
+
New with version 19.1
=====================
The following fixes and additions were made since version 19:
=====================================
tim/prune/save/GpxExporter.java
=====================================
@@ -41,6 +41,7 @@ import tim.prune.data.Field;
import tim.prune.data.MediaObject;
import tim.prune.data.Photo;
import tim.prune.data.RecentFile;
+import tim.prune.data.SourceInfo;
import tim.prune.data.Timestamp;
import tim.prune.data.TrackInfo;
import tim.prune.data.UnitSetLibrary;
@@ -66,6 +67,8 @@ public class GpxExporter extends GenericFunction implements Runnable
private JPanel _encodingsPanel = null;
private JRadioButton _useSystemRadio = null, _forceUtf8Radio = null;
private File _exportFile = null;
+ /** Remember the previous sourceInfo object to tell whether it has changed */
+ private SourceInfo _previousSourceInfo = null;
/** this program name */
private static final String GPX_CREATOR = "GpsPrune v" + GpsPrune.VERSION_NUMBER + " activityworkshop.net";
@@ -108,6 +111,7 @@ public class GpxExporter extends GenericFunction implements Runnable
_useSystemRadio.setText(I18nManager.getText("dialog.exportgpx.encoding.system")
+ " (" + (systemEncoding == null ? "unknown" : systemEncoding) + ")");
}
+ setFileTitle();
_dialog.setVisible(true);
}
@@ -196,6 +200,34 @@ public class GpxExporter extends GenericFunction implements Runnable
return dialogPanel;
}
+ /**
+ * Set the suggestion for the name with which to export
+ */
+ private void setFileTitle()
+ {
+ // Get the most recent file info
+ SourceInfo currentSource = _app.getTrackInfo().getFileInfo().getLastFileInfo();
+ if (currentSource != _previousSourceInfo)
+ {
+ String lastTitle = currentSource.getFileTitle();
+ if (lastTitle != null && !lastTitle.equals(""))
+ {
+ // Take the title of the last file loaded
+ _nameField.setText(lastTitle);
+ }
+ }
+ if (_nameField.getText().equals(""))
+ {
+ // no name given in the field already, so try to overwrite it
+ String lastTitle = _app.getTrackInfo().getFileInfo().getLastFileTitle();
+ if (lastTitle != null && !lastTitle.equals(""))
+ {
+ _nameField.setText(lastTitle);
+ }
+ }
+ // Remember this source info so we don't use it again
+ _previousSourceInfo = currentSource;
+ }
/**
* Start the export process based on the input parameters
@@ -758,16 +790,21 @@ public class GpxExporter extends GenericFunction implements Runnable
inWriter.write(inPoint.hasAltitude() ? inPoint.getAltitude().getStringValue(UnitSetLibrary.UNITS_METRES) : "0");
inWriter.write("</ele>\n");
}
+ // Maybe take timestamp from photo if the point hasn't got one
+ Timestamp pointTimestamp = getPointTimestamp(inPoint, inSettings);
// timestamp if available (and selected)
- if (inPoint.hasTimestamp() && inSettings.getExportTimestamps())
+ if (pointTimestamp != null && inSettings.getExportTimestamps())
{
inWriter.write("\t\t\t\t<time>");
- inWriter.write(inPoint.getTimestamp().getText(Timestamp.Format.ISO8601, null));
+ inWriter.write(pointTimestamp.getText(Timestamp.Format.ISO8601, null));
inWriter.write("</time>\n");
}
// photo, audio
- if (inPoint.getPhoto() != null && inSettings.getExportPhotoPoints()) {
+ if (inPoint.getPhoto() != null && inSettings.getExportPhotoPoints())
+ {
+ inWriter.write("\t\t\t\t");
inWriter.write(makeMediaLink(inPoint.getPhoto()));
+ inWriter.write("\n");
}
if (inPoint.getAudio() != null && inSettings.getExportAudioPoints()) {
inWriter.write(makeMediaLink(inPoint.getAudio()));
@@ -825,4 +862,33 @@ public class GpxExporter extends GenericFunction implements Runnable
{
return inPointSource.replaceAll("[ \t]*<time>.*?</time>", "");
}
+
+ /**
+ * Get the timestamp from the point or its media
+ * @param inPoint point object
+ * @param inSettings export settings
+ * @return Timestamp object if available, or null
+ */
+ private static Timestamp getPointTimestamp(DataPoint inPoint, SettingsForExport inSettings)
+ {
+ if (inPoint.hasTimestamp())
+ {
+ return inPoint.getTimestamp();
+ }
+ if (inPoint.getPhoto() != null && inSettings.getExportPhotoPoints())
+ {
+ if (inPoint.getPhoto().hasTimestamp())
+ {
+ return inPoint.getPhoto().getTimestamp();
+ }
+ }
+ if (inPoint.getAudio() != null && inSettings.getExportAudioPoints())
+ {
+ if (inPoint.getAudio().hasTimestamp())
+ {
+ return inPoint.getAudio().getTimestamp();
+ }
+ }
+ return null;
+ }
}
=====================================
tim/prune/save/PovExporter.java
=====================================
@@ -511,6 +511,18 @@ public class PovExporter extends Export3dFunction
// Definition of terrain shape if any
final String terrainDefinition = makeTerrainString(inTerrainFile, inImageFile, inLineSeparator);
+ final String[] pointLights = {
+ "// lights",
+ "light_source { <-1, 9, -4> color rgb <0.5 0.5 0.5>}",
+ "light_source { <1, 6, -14> color rgb <0.6 0.6 0.6>}",
+ "light_source { <11, 12, 8> color rgb <0.3 0.3 0.3>}"
+ };
+ final String[] northwestLight = {
+ "// lights from NW",
+ "light_source { <-10, 10, 10> color rgb <1.5 1.5 1.5> parallel }",
+ };
+ final String[] lightsLines = (inTerrainFile == null ? pointLights : northwestLight);
+
// Set up output
String[] outputLines = {
"global_settings { ambient_light rgb <4, 4, 4> }", "",
@@ -626,21 +638,30 @@ public class PovExporter extends Export3dFunction
" ttf \"" + fontPath + "\" \"" + I18nManager.getText("cardinal.w") + "\" 0.3, 0",
" pigment { color rgb <1 1 1> }",
" translate <-10.3, 0.2, 0>",
- "}", "",
- // MAYBE: Light positions should relate to model size
- "// lights",
- "light_source { <-1, 9, -4> color rgb <0.5 0.5 0.5>}",
- "light_source { <1, 6, -14> color rgb <0.6 0.6 0.6>}",
- "light_source { <11, 12, 8> color rgb <0.3 0.3 0.3>}",
- "",
+ "}"
};
+
// write strings to file
- int numLines = outputLines.length;
- for (int i=0; i<numLines; i++)
+ writeLinesToFile(inWriter, inLineSeparator, outputLines);
+ writeLinesToFile(inWriter, inLineSeparator, lightsLines);
+ }
+
+ /**
+ * Write the given lines to the file
+ * @param inWriter writer object
+ * @param inLineSeparator line separator string
+ * @param lines array of lines to write
+ * @throws IOException
+ */
+ private void writeLinesToFile(FileWriter inWriter, String inLineSeparator, String[] lines)
+ throws IOException
+ {
+ for (int i=0; i<lines.length; i++)
{
- inWriter.write(outputLines[i]);
+ inWriter.write(lines[i]);
inWriter.write(inLineSeparator);
}
+ inWriter.write(inLineSeparator);
}
/**
=====================================
tim/prune/threedee/Java3DWindow.java
=====================================
@@ -17,6 +17,7 @@ import javax.media.j3d.Billboard;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
+import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Font3D;
import javax.media.j3d.FontExtrusion;
import javax.media.j3d.GeometryArray;
@@ -41,6 +42,7 @@ import javax.vecmath.Point3d;
import javax.vecmath.Point3f;
import javax.vecmath.TexCoord2f;
import javax.vecmath.Vector3d;
+import javax.vecmath.Vector3f;
import tim.prune.DataStatus;
import tim.prune.FunctionLibrary;
@@ -374,11 +376,13 @@ public class Java3DWindow implements ThreeDWindow
// N, S, E, W
GeneralPath bevelPath = new GeneralPath();
bevelPath.moveTo(0.0f, 0.0f);
- for (int i=0; i<91; i+= 5) {
+ for (int i=0; i<91; i+= 5)
+ {
bevelPath.lineTo((float) (0.1 - 0.1 * Math.cos(Math.toRadians(i))),
(float) (0.1 * Math.sin(Math.toRadians(i))));
}
- for (int i=90; i>0; i-=5) {
+ for (int i=90; i>0; i-=5)
+ {
bevelPath.lineTo((float) (0.3 + 0.1 * Math.cos(Math.toRadians(i))),
(float) (0.1 * Math.sin(Math.toRadians(i))));
}
@@ -393,26 +397,40 @@ public class Java3DWindow implements ThreeDWindow
// Add points to model
objTrans.addChild(createDataPoints(_model));
- // Create lights
- BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
+ // Create lights - always add ambient light
+ BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
AmbientLight aLgt = new AmbientLight(new Color3f(1.0f, 1.0f, 1.0f));
aLgt.setInfluencingBounds(bounds);
objTrans.addChild(aLgt);
- PointLight pLgt = new PointLight(new Color3f(1.0f, 1.0f, 1.0f),
- new Point3f(0f, 0f, 2f), new Point3f(0.25f, 0.05f, 0.0f) );
- pLgt.setInfluencingBounds(bounds);
- objTrans.addChild(pLgt);
-
- PointLight pl2 = new PointLight(new Color3f(0.8f, 0.9f, 0.4f),
- new Point3f(6f, 1f, 6f), new Point3f(0.2f, 0.1f, 0.05f) );
- pl2.setInfluencingBounds(bounds);
- objTrans.addChild(pl2);
-
- PointLight pl3 = new PointLight(new Color3f(0.7f, 0.7f, 0.7f),
- new Point3f(0.0f, 12f, -2f), new Point3f(0.1f, 0.1f, 0.0f) );
- pl3.setInfluencingBounds(bounds);
- objTrans.addChild(pl3);
+ // Additional lights depend on whether there's a terrain or not
+ if (showTerrain)
+ {
+ // If there's a terrain, just have directional light from northwest
+ DirectionalLight dl = new DirectionalLight(true,
+ new Color3f(1.0f, 1.0f, 1.0f),
+ new Vector3f(1.0f, -1.0f, 1.0f));
+ dl.setInfluencingBounds(bounds);
+ objTrans.addChild(dl);
+ }
+ else
+ {
+ // There is no terrain, so use point lights as before
+ PointLight pLgt = new PointLight(new Color3f(1.0f, 1.0f, 1.0f),
+ new Point3f(0f, 0f, 2f), new Point3f(0.25f, 0.05f, 0.0f) );
+ pLgt.setInfluencingBounds(bounds);
+ objTrans.addChild(pLgt);
+
+ PointLight pl2 = new PointLight(new Color3f(0.8f, 0.9f, 0.4f),
+ new Point3f(6f, 1f, 6f), new Point3f(0.2f, 0.1f, 0.05f) );
+ pl2.setInfluencingBounds(bounds);
+ objTrans.addChild(pl2);
+
+ PointLight pl3 = new PointLight(new Color3f(0.7f, 0.7f, 0.7f),
+ new Point3f(0.0f, 12f, -2f), new Point3f(0.1f, 0.1f, 0.0f) );
+ pl3.setInfluencingBounds(bounds);
+ objTrans.addChild(pl3);
+ }
// Have Java 3D perform optimizations on this scene graph.
objRoot.compile();
View it on GitLab: https://salsa.debian.org/debian-gis-team/gpsprune/commit/24d18ba0dac4954ed785c8aaa8b7d94216603c07
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/gpsprune/commit/24d18ba0dac4954ed785c8aaa8b7d94216603c07
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20181215/5c50ce6b/attachment-0001.html>
More information about the Pkg-grass-devel
mailing list