Changeset 2029 in josm


Ignore:
Timestamp:
2009-09-02T23:37:57+02:00 (15 years ago)
Author:
Gubaer
Message:

fixed #3362: "All formats" is added twice to format selections in open dialog

Location:
trunk/src/org/openstreetmap/josm/actions
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/DiskAccessAction.java

    r2020 r2029  
    77
    88import javax.swing.JFileChooser;
    9 import javax.swing.filechooser.FileFilter;
    109
    1110import org.openstreetmap.josm.Main;
    1211import org.openstreetmap.josm.gui.ExtendedDialog;
    13 import org.openstreetmap.josm.io.FileImporter;
    1412import org.openstreetmap.josm.tools.Shortcut;
    1513
     
    3937        fc.setMultiSelectionEnabled(multiple);
    4038        fc.setAcceptAllFileFilterUsed(false);
    41         FileFilter defaultFilter = null;
    42         for (FileImporter imExporter: ExtensionFileFilter.importers) {
    43             fc.addChoosableFileFilter(imExporter.filter);
    44             if (extension != null && extension.endsWith(imExporter.filter.defaultExtension)) {
    45                 defaultFilter = imExporter.filter;
    46             }
    47         }
    48 
    49         if (defaultFilter == null) {
    50             defaultFilter = new ExtensionFileFilter.AllFormatsImporter().filter;
    51         }
    52         fc.setFileFilter(defaultFilter);
     39        System.out.println("opening fc for extension " + extension);
     40        ExtensionFileFilter.applyChoosableImportFileFilters(fc, extension);
    5341
    5442        int answer = open ? fc.showOpenDialog(Main.parent) : fc.showSaveDialog(Main.parent);
  • trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java

    r2001 r2029  
    77import java.util.ArrayList;
    88import java.util.Arrays;
    9 
     9import java.util.Collections;
     10import java.util.Comparator;
     11import java.util.LinkedList;
     12import java.util.List;
     13
     14import javax.swing.JFileChooser;
    1015import javax.swing.filechooser.FileFilter;
    1116
     
    2631 * filters used in JOSM.
    2732 *
    28  * @author imi
    2933 */
    3034public class ExtensionFileFilter extends FileFilter {
    31     private final String extension;
    32     private final String description;
    33     public final String defaultExtension;
    3435
    3536    /**
     
    4142    public static ArrayList<FileExporter> exporters = new ArrayList<FileExporter>(Arrays.asList(new GpxExporter(),
    4243            new OsmExporter(), new OsmGzipExporter(), new OsmBzip2Exporter()));
    43    
     44
     45
     46    private final String extensions;
     47    private final String description;
     48    /**
     49     * @deprecated use {@see #getDefaultExtension()
     50     */
     51    @Deprecated
     52    public final String defaultExtension;
     53
     54
     55    static protected void sort(List<ExtensionFileFilter> filters) {
     56        Collections.sort(
     57                filters,
     58                new Comparator<ExtensionFileFilter>() {
     59                    private AllFormatsImporter all = new AllFormatsImporter();
     60                    public int compare(ExtensionFileFilter o1, ExtensionFileFilter o2) {
     61                        if (o1.getDescription().equals(all.filter.getDescription())) return 1;
     62                        if (o2.getDescription().equals(all.filter.getDescription())) return -1;
     63                        return o1.getDescription().compareTo(o2.getDescription());
     64                    }
     65                }
     66        );
     67    }
     68
     69    /**
     70     * Replies an ordered list of {@see ExtensionFileFilter}s for importing.
     71     * The list is ordered according to their description, an {@see AllFormatsImporter}
     72     * is append at the end.
     73     *
     74     * @return an ordered list of {@see ExtensionFileFilter}s for importing.
     75     */
     76    public static List<ExtensionFileFilter> getImportExtensionFileFilters() {
     77        LinkedList<ExtensionFileFilter> filters = new LinkedList<ExtensionFileFilter>();
     78        for (FileImporter importer : importers) {
     79            if (filters.contains(importer.filter)) {
     80                continue;
     81            }
     82            filters.add(importer.filter);
     83        }
     84        sort(filters);
     85        return filters;
     86    }
     87
     88    /**
     89     * Replies an ordered list of {@see ExtensionFileFilter}s for exporting.
     90     * The list is ordered according to their description, an {@see AllFormatsImporter}
     91     * is append at the end.
     92     *
     93     * @return an ordered list of {@see ExtensionFileFilter}s for exporting.
     94     */
     95    public static List<ExtensionFileFilter> getExportExtensionFileFilters() {
     96        LinkedList<ExtensionFileFilter> filters = new LinkedList<ExtensionFileFilter>();
     97        for (FileExporter exporter : exporters) {
     98            if (filters.contains(exporter.filter)) {
     99                continue;
     100            }
     101            filters.add(exporter.filter);
     102        }
     103        sort(filters);
     104        return filters;
     105    }
     106
     107    /**
     108     * Replies the default {@see ExtensionFileFilter} for a given extension
     109     *
     110     * @param extension the extension
     111     * @return the default {@see ExtensionFileFilter} for a given extension
     112     */
     113    public static ExtensionFileFilter getDefaultImportExtensionFileFilter(String extension) {
     114        if (extension == null) return new AllFormatsImporter().filter;
     115        for (FileImporter importer : importers) {
     116            if (extension.equals(importer.filter.getDefaultExtension()))
     117                return importer.filter;
     118        }
     119        return new AllFormatsImporter().filter;
     120    }
     121
     122    /**
     123     * Replies the default {@see ExtensionFileFilter} for a given extension
     124     *
     125     * @param extension the extension
     126     * @return the default {@see ExtensionFileFilter} for a given extension
     127     */
     128    public static ExtensionFileFilter getDefaultExportExtensionFileFilter(String extension) {
     129        if (extension == null) return new AllFormatsImporter().filter;
     130        for (FileExporter exporter : exporters) {
     131            if (extension.equals(exporter.filter.getDefaultExtension()))
     132                return exporter.filter;
     133        }
     134        return new AllFormatsImporter().filter;
     135    }
     136
     137    /**
     138     * Applies the choosable {@see FileFilter} to a {@see JFileChooser} before using the
     139     * file chooser for selecting a file for reading.
     140     *
     141     * @param fileChooser the file chooser
     142     * @param extension the default extension
     143     */
     144    public static void applyChoosableImportFileFilters(JFileChooser fileChooser, String extension) {
     145        for (ExtensionFileFilter filter: getImportExtensionFileFilters()) {
     146            fileChooser.addChoosableFileFilter(filter);
     147        }
     148        fileChooser.setFileFilter(getDefaultImportExtensionFileFilter(extension));
     149    }
     150
     151    /**
     152     * Applies the choosable {@see FileFilter} to a {@see JFileChooser} before using the
     153     * file chooser for selecting a file for writing.
     154     *
     155     * @param fileChooser the file chooser
     156     * @param extension the default extension
     157     */
     158    public static void applyChoosableExportFileFilters(JFileChooser fileChooser, String extension) {
     159        for (ExtensionFileFilter filter: getExportExtensionFileFilters()) {
     160            fileChooser.addChoosableFileFilter(filter);
     161        }
     162        fileChooser.setFileFilter(getDefaultExportExtensionFileFilter(extension));
     163    }
     164
    44165    /**
    45166     * Construct an extension file filter by giving the extension to check after.
    46167     */
    47     public ExtensionFileFilter(String extension, String defExt, String description) {
    48         this.extension = extension;
    49         defaultExtension = defExt;
     168    public ExtensionFileFilter(String extension, String defaultExtension, String description) {
     169        this.extensions = extension;
     170        this.defaultExtension = defaultExtension;
    50171        this.description = description;
    51172    }
     
    53174    public boolean acceptName(String filename) {
    54175        String name = filename.toLowerCase();
    55         for (String ext : extension.split(","))
     176        for (String ext : extensions.split(","))
    56177            if (name.endsWith("."+ext))
    57178                return true;
     
    68189        return description;
    69190    }
    70    
     191
     192    public String getDefaultExtension() {
     193        return defaultExtension;
     194    }
     195
    71196    /**
    72197     * Dummy importer that adds the "All Formats"-Filter when opening files
     
    75200        public AllFormatsImporter() {
    76201            super(
    77                 new ExtensionFileFilter("osm,xml,osm.gz,osm.bz2,osm.bz,gpx,gpx.gz,nmea,nme,nma,txt", "", tr("All Formats")
    78                         + " (*.gpx *.osm *.nmea ...)"));
     202                    new ExtensionFileFilter("osm,xml,osm.gz,osm.bz2,osm.bz,gpx,gpx.gz,nmea,nme,nma,txt,wms", "", tr("All Formats")
     203                            + " (*.gpx *.osm *.nmea ...)"));
    79204        }
    80205        @Override public boolean acceptFile(File pathname) {
     
    82207        }
    83208    }
     209
     210    @Override
     211    public int hashCode() {
     212        final int prime = 31;
     213        int result = 1;
     214        result = prime * result + ((defaultExtension == null) ? 0 : defaultExtension.hashCode());
     215        result = prime * result + ((description == null) ? 0 : description.hashCode());
     216        result = prime * result + ((extensions == null) ? 0 : extensions.hashCode());
     217        return result;
     218    }
     219
     220    @Override
     221    public boolean equals(Object obj) {
     222        if (this == obj)
     223            return true;
     224        if (obj == null)
     225            return false;
     226        if (getClass() != obj.getClass())
     227            return false;
     228        ExtensionFileFilter other = (ExtensionFileFilter) obj;
     229        if (defaultExtension == null) {
     230            if (other.defaultExtension != null)
     231                return false;
     232        } else if (!defaultExtension.equals(other.defaultExtension))
     233            return false;
     234        if (description == null) {
     235            if (other.description != null)
     236                return false;
     237        } else if (!description.equals(other.description))
     238            return false;
     239        if (extensions == null) {
     240            if (other.extensions != null)
     241                return false;
     242        } else if (!extensions.equals(other.extensions))
     243            return false;
     244        return true;
     245    }
    84246}
  • trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java

    r2025 r2029  
    112112    public static File openFileDialog(Layer layer) {
    113113        if (layer instanceof OsmDataLayer)
    114             return createAndOpenSaveFileChooser(tr("Save OSM file"), ".osm");
     114            return createAndOpenSaveFileChooser(tr("Save OSM file"), "osm");
    115115        else if (layer instanceof GpxLayer)
    116             return createAndOpenSaveFileChooser(tr("Save GPX file"), ".gpx");
    117         return createAndOpenSaveFileChooser(tr("Save Layer"), ".lay");
     116            return createAndOpenSaveFileChooser(tr("Save GPX file"), "gpx");
     117        return createAndOpenSaveFileChooser(tr("Save Layer"), "lay");
    118118    }
    119119
     
    167167        fc.setMultiSelectionEnabled(false);
    168168        fc.setAcceptAllFileFilterUsed(false);
    169 
    170         FileFilter defaultFilter = null;
    171         for (FileExporter exporter : ExtensionFileFilter.exporters) {
    172             fc.addChoosableFileFilter(exporter.filter);
    173             if (extension.endsWith(exporter.filter.defaultExtension)) {
    174                 defaultFilter = exporter.filter;
    175             }
    176         }
    177         if (defaultFilter != null) {
    178             fc.setFileFilter(defaultFilter);
    179         }
    180 
     169        ExtensionFileFilter.applyChoosableExportFileFilters(fc, extension);
    181170        int answer = fc.showSaveDialog(Main.parent);
    182171        if (answer != JFileChooser.APPROVE_OPTION)
     
    194183                FileFilter ff = fc.getFileFilter();
    195184                if (ff instanceof ExtensionFileFilter) {
    196                     fn += "." + ((ExtensionFileFilter)ff).defaultExtension;
     185                    fn += "." + ((ExtensionFileFilter)ff).getDefaultExtension();
    197186                } else {
    198187                    fn += extension;
Note: See TracChangeset for help on using the changeset viewer.