Ignore:
Timestamp:
2012-08-20T01:11:45+02:00 (12 years ago)
Author:
Don-vip
Message:

fix #2961 - Improve usability of WMS Layer Saving/Loading

  • Replaced the unconventional method of creating a blank layer, then loading a .wms file to a standard File->Open approach
  • Fixed memory leaks with some actions registered as listeners but never destroyed
  • Layer interface modified to allow a generic approach of layer saving in SaveActionBase rather than the previous one restricted to OSM and GPX data
  • FileImporters and FileExporters can now be enabled/disabled at runtime, for example when the active layer changes
Location:
trunk/src/org/openstreetmap/josm/io
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/io/FileExporter.java

    r3083 r5459  
    88
    99import org.openstreetmap.josm.actions.ExtensionFileFilter;
     10import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    1011import org.openstreetmap.josm.gui.layer.Layer;
    1112
    12 public abstract class FileExporter {
    13     public ExtensionFileFilter filter;
     13public abstract class FileExporter implements LayerChangeListener {
     14   
     15    public final ExtensionFileFilter filter;
     16
     17    private boolean enabled;
    1418
    1519    public FileExporter(ExtensionFileFilter filter) {
    1620        this.filter = filter;
     21        this.enabled = true;
    1722    }
    1823
     
    2429        throw new IOException(tr("Could not export ''{0}''.", file.getName()));
    2530    }
     31
     32    /**
     33     * Returns the enabled state of this {@code FileExporter}. When enabled, it is listed and usable in "File->Save" dialogs.
     34     * @return true if this {@code FileExporter} is enabled
     35     * @since 5459
     36     */
     37    public final boolean isEnabled() {
     38        return enabled;
     39    }
     40
     41    /**
     42     * Sets the enabled state of the {@code FileExporter}. When enabled, it is listed and usable in "File->Save" dialogs.
     43     * @param enabled true to enable this {@code FileExporter}, false to disable it
     44     * @since 5459
     45     */
     46    public final void setEnabled(boolean enabled) {
     47        this.enabled = enabled;
     48    }
     49
     50    @Override
     51    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
     52        // To be overriden by subclasses if their enabled state depends of the active layer nature
     53    }
     54
     55    @Override
     56    public void layerAdded(Layer newLayer) {
     57        // To be overriden by subclasses if needed
     58    }
     59
     60    @Override
     61    public void layerRemoved(Layer oldLayer) {
     62        // To be overriden by subclasses if needed
     63    }
    2664}
  • trunk/src/org/openstreetmap/josm/io/FileImporter.java

    r5361 r5459  
    1717import org.openstreetmap.josm.actions.ExtensionFileFilter;
    1818import org.openstreetmap.josm.gui.HelpAwareOptionPane;
     19import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
     20import org.openstreetmap.josm.gui.layer.Layer;
    1921import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    2022
    21 public abstract class FileImporter implements Comparable<FileImporter> {
     23public abstract class FileImporter implements Comparable<FileImporter>, LayerChangeListener {
    2224
    2325    public final ExtensionFileFilter filter;
     26   
     27    private boolean enabled;
    2428
    2529    public FileImporter(ExtensionFileFilter filter) {
    2630        this.filter = filter;
     31        this.enabled = true;
    2732    }
    2833
     
    122127        return new GZIPInputStream(in);
    123128    }
     129
     130    /**
     131     * Returns the enabled state of this {@code FileImporter}. When enabled, it is listed and usable in "File->Open" dialog.
     132     * @return true if this {@code FileImporter} is enabled
     133     * @since 5459
     134     */
     135    public final boolean isEnabled() {
     136        return enabled;
     137    }
     138
     139    /**
     140     * Sets the enabled state of the {@code FileImporter}. When enabled, it is listed and usable in "File->Open" dialog.
     141     * @param enabled true to enable this {@code FileImporter}, false to disable it
     142     * @since 5459
     143     */
     144    public final void setEnabled(boolean enabled) {
     145        this.enabled = enabled;
     146    }
     147
     148    @Override
     149    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
     150        // To be overriden by subclasses if their enabled state depends of the active layer nature
     151    }
     152
     153    @Override
     154    public void layerAdded(Layer newLayer) {
     155        // To be overriden by subclasses if needed
     156    }
     157
     158    @Override
     159    public void layerRemoved(Layer oldLayer) {
     160        // To be overriden by subclasses if needed
     161    }
    124162}
  • trunk/src/org/openstreetmap/josm/io/WMSLayerExporter.java

    r5457 r5459  
    3838        }
    3939    }
     40
     41    @Override
     42    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
     43        setEnabled(newLayer instanceof WMSLayer);
     44    }
    4045}
  • trunk/src/org/openstreetmap/josm/io/WMSLayerImporter.java

    r5457 r5459  
    99import java.io.ObjectInputStream;
    1010
     11import org.openstreetmap.josm.Main;
    1112import org.openstreetmap.josm.actions.ExtensionFileFilter;
    1213import org.openstreetmap.josm.gui.layer.WMSLayer;
    1314import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     15import org.openstreetmap.josm.gui.util.GuiHelper;
    1416import org.openstreetmap.josm.tools.CheckParameterUtil;
    1517
     
    5557            ois.close();
    5658        }
     59       
     60        // FIXME: remove UI stuff from IO subsystem
     61        GuiHelper.runInEDT(new Runnable() {
     62            @Override
     63            public void run() {
     64                Main.main.addLayer(wmsLayer);
     65                wmsLayer.onPostLoadFromFile();
     66            }
     67        });
    5768    }
    5869
Note: See TracChangeset for help on using the changeset viewer.