Ticket #21931: 21931.patch
File 21931.patch, 15.0 KB (added by , 19 months ago) |
---|
-
src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
### Eclipse Workspace Patch 1.0 #P josm
168 168 data.addAll(markers); 169 169 } 170 170 } 171 172 if (fromLayer != null && !data.isEmpty()) { 173 fromLayer.setLinkedMarkerLayer(this); 174 } 171 175 } 172 176 173 177 @Override -
src/org/openstreetmap/josm/actions/SaveAction.java
4 4 import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 5 5 import static org.openstreetmap.josm.tools.I18n.tr; 6 6 7 import java.awt.GridBagLayout;8 7 import java.awt.event.KeyEvent; 9 8 import java.beans.PropertyChangeListener; 10 9 import java.io.File; 11 10 12 import javax.swing.JCheckBox;13 import javax.swing.JLabel;14 import javax.swing.JPanel;15 import javax.swing.SwingConstants;16 17 import org.openstreetmap.josm.data.gpx.GpxConstants;18 import org.openstreetmap.josm.gui.ExtendedDialog;19 import org.openstreetmap.josm.gui.MainApplication;20 11 import org.openstreetmap.josm.gui.layer.AbstractModifiableLayer; 21 import org.openstreetmap.josm.gui.layer.GpxLayer;22 12 import org.openstreetmap.josm.gui.layer.Layer; 23 13 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent; 24 14 import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent; 25 15 import org.openstreetmap.josm.gui.layer.SaveToFile; 26 16 import org.openstreetmap.josm.gui.util.GuiHelper; 27 import org.openstreetmap.josm.spi.preferences.Config;28 import org.openstreetmap.josm.tools.GBC;29 17 import org.openstreetmap.josm.tools.Shortcut; 30 18 31 19 /** … … 100 88 @Override 101 89 public File getFile(Layer layer) { 102 90 File f = layer.getAssociatedFile(); 103 if (f != null &&!f.exists()) {104 f = null;91 if (f == null || !f.exists()) { 92 f = layer.createAndOpenSaveFileChooser(); 105 93 } 106 107 // Ask for overwrite in case of GpxLayer 108 if (f != null 109 && layer instanceof GpxLayer 110 && (((GpxLayer) layer).data == null 111 || !GpxConstants.JOSM_CREATOR_NAME.equals(((GpxLayer) layer).data.creator)) 112 && !Config.getPref().getBoolean("gpx.export.overwrite", false)) { 113 114 JPanel p = new JPanel(new GridBagLayout()); 115 JLabel label = new JLabel("<html>" 116 + tr("The file \"{0}\" will be modified.<br>Would you like to overwrite the existing file?", f.getName()) 117 + "</html>"); 118 label.setHorizontalAlignment(SwingConstants.CENTER); 119 JCheckBox remember = new JCheckBox(tr("Always overwrite GPX files without asking")); 120 remember.setHorizontalAlignment(SwingConstants.CENTER); 121 p.add(label, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 5, 5, 10)); 122 p.add(remember, GBC.eop().fill(GBC.HORIZONTAL)); 123 ExtendedDialog dialog = new ExtendedDialog( 124 MainApplication.getMainFrame(), 125 tr("Overwrite"), 126 tr("Overwrite"), tr("Save As..."), tr("Cancel")) 127 .setButtonIcons("save", "save_as", "cancel") 128 .setContent(p); 129 int val = dialog.showDialog().getValue(); 130 if (val == 1) { 131 Config.getPref().putBoolean("gpx.export.overwrite", remember.isSelected()); 132 } else if (val == 2) { 133 f = null; 134 } else { 135 return null; 136 } 137 } 138 return f == null ? layer.createAndOpenSaveFileChooser() : f; 94 return f; 139 95 } 140 96 } -
src/org/openstreetmap/josm/actions/SaveActionBase.java
135 135 return false; 136 136 137 137 Notification savingNotification = showSavingNotification(file.getName()); 138 layer.setAssociatedFile(file); 138 139 try { 139 140 boolean exported = false; 140 141 boolean canceled = false; … … 145 146 } else { 146 147 exporter.exportData(file, layer); 147 148 } 149 file = layer.getAssociatedFile(); 148 150 exported = true; 149 151 canceled = exporter.isCanceled(); 150 152 break; … … 161 163 if (!layer.isRenamed()) { 162 164 layer.setName(file.getName()); 163 165 } 164 layer.setAssociatedFile(file);165 166 if (layer instanceof AbstractModifiableLayer) { 166 167 ((AbstractModifiableLayer) layer).onPostSaveToFile(); 167 168 } -
src/org/openstreetmap/josm/io/nmea/NmeaReader.java
232 232 @Override 233 233 public boolean parse(boolean tryToFinish) throws SAXException, IOException { 234 234 // create the data tree 235 data = new GpxData( );235 data = new GpxData(true); 236 236 Collection<Collection<WayPoint>> currentTrack = new ArrayList<>(); 237 237 238 238 try (BufferedReader rd = new BufferedReader(new InputStreamReader(source, StandardCharsets.UTF_8))) { … … 268 268 } catch (IllegalDataException e) { 269 269 Logging.warn(e); 270 270 return false; 271 } finally { 272 data.endUpdate(); 271 273 } 272 274 return true; 273 275 } -
src/org/openstreetmap/josm/io/ozi/OziWptReader.java
51 51 52 52 @Override 53 53 public boolean parse(boolean tryToFinish) throws SAXException, IOException { 54 data = new GpxData( );54 data = new GpxData(true); 55 55 Collection<Collection<WayPoint>> currentTrack = new ArrayList<>(); 56 56 Collection<WayPoint> waypoints = new ArrayList<>(); 57 57 try (BufferedReader rd = new BufferedReader(new InputStreamReader(source, StandardCharsets.UTF_8))) { … … 97 97 } 98 98 currentTrack.add(waypoints); 99 99 data.tracks.add(new GpxTrack(currentTrack, Collections.<String, Object>emptyMap())); 100 data.endUpdate(); 100 101 return true; 101 102 } 102 103 -
src/org/openstreetmap/josm/io/rtklib/RtkLibPosReader.java
60 60 61 61 @Override 62 62 public boolean parse(boolean tryToFinish) throws SAXException, IOException { 63 data = new GpxData( );63 data = new GpxData(true); 64 64 Collection<Collection<WayPoint>> currentTrack = new ArrayList<>(); 65 65 Collection<WayPoint> waypoints = new ArrayList<>(); 66 66 try (BufferedReader rd = new BufferedReader(new InputStreamReader(source, StandardCharsets.UTF_8))) { … … 102 102 } 103 103 currentTrack.add(waypoints); 104 104 data.tracks.add(new GpxTrack(currentTrack, Collections.<String, Object>emptyMap())); 105 data.endUpdate(); 105 106 return true; 106 107 } 107 108 -
src/org/openstreetmap/josm/actions/SaveAsAction.java
29 29 } 30 30 31 31 /** 32 * A file indicating that a potential overwrite has been confirmed by the user 33 * @since xxx 34 */ 35 public static class OverwritableFile extends File { 36 /** 37 * Construct an @link {@link OverwritableFile} 38 * @param pathname A pathname String 39 */ 40 public OverwritableFile(String pathname) { 41 super(pathname); 42 } 43 } 44 45 /** 32 46 * Returns the unique instance. 33 47 * @return the unique instance 34 48 */ … … 37 51 } 38 52 39 53 @Override protected File getFile(Layer layer) { 40 return layer.createAndOpenSaveFileChooser();54 return new OverwritableFile(layer.createAndOpenSaveFileChooser().getPath()); 41 55 } 42 56 } -
src/org/openstreetmap/josm/gui/io/importexport/GpxExporter.java
25 25 import javax.swing.JPanel; 26 26 import javax.swing.JScrollPane; 27 27 import javax.swing.ListSelectionModel; 28 import javax.swing.SwingConstants; 28 29 30 import org.openstreetmap.josm.actions.SaveAsAction; 29 31 import org.openstreetmap.josm.data.gpx.GpxConstants; 30 32 import org.openstreetmap.josm.data.gpx.GpxData; 31 33 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil; … … 42 44 import org.openstreetmap.josm.spi.preferences.Config; 43 45 import org.openstreetmap.josm.tools.CheckParameterUtil; 44 46 import org.openstreetmap.josm.tools.GBC; 47 import org.openstreetmap.josm.tools.Utils; 45 48 46 49 /** 47 50 * Exports data to a .gpx file. Data may be native GPX or OSM data which will be converted. … … 78 81 79 82 @Override 80 83 public boolean acceptFile(File pathname, Layer layer) { 81 return isSupportedLayer(layer) ? super.acceptFile(pathname, layer) : false;84 return isSupportedLayer(layer); 82 85 } 83 86 84 87 @Override … … 98 101 .getClass().getName())); 99 102 CheckParameterUtil.ensureParameterNotNull(file, "file"); 100 103 101 String fn = file.getPath(); 102 if (fn.indexOf('.') == -1) { 103 fn += ".gpx"; 104 file = new File(fn); 104 if (!Utils.hasExtension(file, "gpx")) { 105 String pth = file.getPath() + ".gpx"; 106 file = new File(pth); 105 107 } 106 108 107 GpxData gpxData; 108 if (quiet) { 109 gpxData = getGpxData(layer, file); 110 try (OutputStream fo = Compression.getCompressedFileOutputStream(file)) { 111 GpxWriter w = new GpxWriter(fo); 112 w.write(gpxData); 113 w.close(); 114 fo.flush(); 109 // Ask if GPX file should be overwritten 110 if (!(file instanceof SaveAsAction.OverwritableFile) 111 && file.exists() 112 && (((GpxLayer) layer).data == null || !GpxConstants.JOSM_CREATOR_NAME.equals(((GpxLayer) layer).data.creator)) 113 && !Config.getPref().getBoolean("gpx.export.overwrite", false)) { 114 115 JPanel p = new JPanel(new GridBagLayout()); 116 JLabel label = new JLabel("<html>" 117 + tr("The file \"{0}\" will be modified.<br>Would you like to overwrite the existing file?", file.getName()) 118 + "</html>"); 119 label.setHorizontalAlignment(SwingConstants.CENTER); 120 JCheckBox remember = new JCheckBox(tr("Always overwrite GPX files without asking")); 121 remember.setHorizontalAlignment(SwingConstants.CENTER); 122 p.add(label, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 5, 5, 10)); 123 p.add(remember, GBC.eop().fill(GBC.HORIZONTAL)); 124 ExtendedDialog dialog = new ExtendedDialog( 125 MainApplication.getMainFrame(), 126 tr("Overwrite"), 127 tr("Overwrite"), tr("Save As..."), tr("Cancel")) 128 .setButtonIcons("save", "save_as", "cancel") 129 .setContent(p); 130 int val = dialog.showDialog().getValue(); 131 if (val == 1) { 132 Config.getPref().putBoolean("gpx.export.overwrite", remember.isSelected()); 133 } else if (val == 2) { 134 file = layer.createAndOpenSaveFileChooser(); 135 } else { 136 file = null; 115 137 } 138 } 139 140 if (file == null) { 141 setCanceled(true); 116 142 return; 117 143 } 118 144 145 GpxWriteOptions opts; 146 if (quiet) { 147 opts = new GpxWriteOptions(getGpxData(layer, file), ColorFormat.GPXD, true); 148 } else { 149 opts = askGpxAttributes(layer, file); 150 } 151 152 if (opts == null) return; 153 layer.setAssociatedFile(file); 154 155 try (OutputStream fo = Compression.getCompressedFileOutputStream(file)) { 156 GpxWriter w = new GpxWriter(fo); 157 w.write(opts.gpxData, opts.cFormat, opts.saveLayerPrefs); 158 w.close(); 159 fo.flush(); 160 } 161 } 162 163 private GpxWriteOptions askGpxAttributes(Layer layer, File file) { 164 GpxData gpxData; 165 119 166 // open the dialog asking for options 120 167 JPanel p = new JPanel(new GridBagLayout()); 121 168 … … 217 264 218 265 if (ed.showDialog().getValue() != 1) { 219 266 setCanceled(true); 220 return ;267 return null; 221 268 } 222 269 setCanceled(false); 223 270 … … 267 314 gpxData.put(META_KEYWORDS, keywords.getText()); 268 315 } 269 316 270 try (OutputStream fo = Compression.getCompressedFileOutputStream(file)) { 271 GpxWriter w = new GpxWriter(fo); 272 w.write(gpxData, cFormat, layerPrefs.isSelected()); 273 w.close(); 274 fo.flush(); 275 } 317 return new GpxWriteOptions(gpxData, cFormat, layerPrefs.isSelected()); 276 318 } 277 319 278 320 /** … … 423 465 authorActionListener.actionPerformed(null); 424 466 authorNameListener.keyReleased(null); 425 467 } 468 469 private static class GpxWriteOptions { 470 GpxData gpxData; 471 ColorFormat cFormat; 472 boolean saveLayerPrefs; 473 474 GpxWriteOptions(GpxData gpxData, ColorFormat cFormat, boolean saveLayerPrefs) { 475 this.gpxData = gpxData; 476 this.cFormat = cFormat; 477 this.saveLayerPrefs = saveLayerPrefs; 478 } 479 } 426 480 } -
src/org/openstreetmap/josm/gui/io/importexport/GpxImporter.java
175 175 markerLayer = new MarkerLayer(data, tr("Markers from {0}", gpxLayerName), data.storageFile, gpxLayer); 176 176 if (markerLayer.data.isEmpty()) { 177 177 markerLayer = null; 178 } else {179 gpxLayer.setLinkedMarkerLayer(markerLayer);180 178 } 181 179 } 182 180 if (Config.getPref().getBoolean("gpx.makeautoroutes", true) && !data.getRoutes().isEmpty()) {