From: Frédéric Perrin Date: Sat, 30 Nov 2019 20:50:38 +0000 (+0000) Subject: Merge branch 'not-ready-for-upstreaming' into fp-integration X-Git-Tag: v19.2.fp1 X-Git-Url: https://gitweb.fperrin.net/?p=GpsPrune.git;a=commitdiff_plain;h=a3cb2b5a1ffe4d027d1c896a5ef9bb3f7b280d89;hp=6b5c5c627a6cd528bd19bd76db95135c09deb535 Merge branch 'not-ready-for-upstreaming' into fp-integration --- diff --git a/src/tim/prune/App.java b/src/tim/prune/App.java index 54f1e98..317064d 100644 --- a/src/tim/prune/App.java +++ b/src/tim/prune/App.java @@ -51,6 +51,7 @@ public class App { // Instance variables private JFrame _frame = null; + private String _titlePrefix = null; private Track _track = null; private TrackInfo _trackInfo = null; private int _lastSavePosition = 0; @@ -79,6 +80,7 @@ public class App public App(JFrame inFrame) { _frame = inFrame; + _titlePrefix = _frame.getTitle(); _undoStack = new UndoStack(); _track = new Track(); _trackInfo = new TrackInfo(_track); @@ -777,6 +779,8 @@ public class App _menuManager.informFileLoaded(); // recentre viewport on new file data _viewport.recentreViewport(); + // update main window title + updateTitle(); // Remove busy lock _busyLoading = false; // load next file if there's a queue @@ -1019,4 +1023,16 @@ public class App public void setCurrentMode(AppMode inMode) { _appMode = inMode; } + + /** Update main window title **/ + public void updateTitle() { + ArrayList filenames = _trackInfo.getFileInfo().getFilenames(); + if (filenames.size() > 0) { + _frame.setTitle(_titlePrefix + ": " + String.join(", ", filenames)); + } + else + { + _frame.setTitle(_titlePrefix); + } + } } diff --git a/src/tim/prune/data/FileInfo.java b/src/tim/prune/data/FileInfo.java index 41900cb..7eaac8f 100644 --- a/src/tim/prune/data/FileInfo.java +++ b/src/tim/prune/data/FileInfo.java @@ -74,6 +74,19 @@ public class FileInfo return ""; } + /** + * @return The source names + */ + public ArrayList getFilenames() + { + ArrayList filenames = new ArrayList(); + for (SourceInfo source : _sources) + { + filenames.add(source.getName()); + } + return filenames; + } + /** * @param inIndex index number, starting from zero * @return source info object diff --git a/src/tim/prune/gui/SelectorDisplay.java b/src/tim/prune/gui/SelectorDisplay.java index fa6630d..9dfc24f 100644 --- a/src/tim/prune/gui/SelectorDisplay.java +++ b/src/tim/prune/gui/SelectorDisplay.java @@ -228,8 +228,9 @@ public class SelectorDisplay extends GenericDisplay else if (numFiles > 1) { final String labelText = I18nManager.getText("details.track.numfiles") + ": " + numFiles; + final String filenameString = String.join(", ", _trackInfo.getFileInfo().getFilenames()); _filenameLabel.setText(labelText); - _filenameLabel.setToolTipText(labelText); + _filenameLabel.setToolTipText(filenameString); } else { diff --git a/src/tim/prune/gui/map/MapSource.java b/src/tim/prune/gui/map/MapSource.java index c4e2946..177ad67 100644 --- a/src/tim/prune/gui/map/MapSource.java +++ b/src/tim/prune/gui/map/MapSource.java @@ -104,7 +104,7 @@ public abstract class MapSource urlstr = "http://" + urlstr; } // check trailing / - if (!urlstr.endsWith("/")) { + if (!urlstr.endsWith("/") && !urlstr.contains("?")) { urlstr = urlstr + "/"; } // Validate current url, return null if not ok diff --git a/src/tim/prune/gui/map/OsmMapSource.java b/src/tim/prune/gui/map/OsmMapSource.java index 925fcf6..e3fe589 100644 --- a/src/tim/prune/gui/map/OsmMapSource.java +++ b/src/tim/prune/gui/map/OsmMapSource.java @@ -152,12 +152,31 @@ public class OsmMapSource extends MapSource /** * Make the URL to get the specified tile + * @param inLayerNum layer number + * @param inZoom zoom level + * @param inX x coordinate + * @param inY y coordinate + * @return relative file path as String */ public String makeURL(int inLayerNum, int inZoom, int inX, int inY) { // Check if the base url has a [1234], if so replace at random - StringBuffer url = new StringBuffer(); - url.append(pickServerUrl(_baseUrls[inLayerNum])); + String baseUrl = pickServerUrl(_baseUrls[inLayerNum]); + return makeUrl(baseUrl, inLayerNum, inZoom, inX, inY); + } + + public String makeUrl(String baseUrl, int inLayerNum, int inZoom, int inX, int inY) + { + // If the base URL has {x}/{y} placeholders, use them + if (baseUrl.contains("{x}")) { + baseUrl = baseUrl.replace("{z}", Integer.toString(inZoom)) + .replace("{x}", Integer.toString(inX)) + .replace("{y}", Integer.toString(inY)); + return baseUrl; + } + + // Else simply append the tile indices and file extension + StringBuffer url = new StringBuffer(baseUrl); url.append(inZoom).append('/').append(inX).append('/').append(inY); url.append('.').append(getFileExtension(inLayerNum)); if (_apiKey != null) @@ -167,6 +186,26 @@ public class OsmMapSource extends MapSource return url.toString(); } + /** + * Make a relative file path from the base directory including site name + * @param inLayerNum layer number + * @param inZoom zoom level + * @param inX x coordinate + * @param inY y coordinate + * @return relative file path as String + */ + public String makeFilePath(int inLayerNum, int inZoom, int inX, int inY) + { + String siteName = getSiteName(inLayerNum); + String filePath = makeUrl(siteName, inLayerNum, inZoom, inX, inY); + int indexParam = filePath.indexOf("?"); + if (indexParam > 0) + { + filePath = filePath.substring(0, indexParam); + } + return filePath; + } + /** * @return maximum zoom level */