Ignore:
Timestamp:
2012-08-13T00:12:48+02:00 (12 years ago)
Author:
Don-vip
Message:

fix #6733 - File Open dialog incorrectly accepts folder selection

Major rework of how the JFileChooser are created in JOSM

  • Simple need: use DiskAccessAction.createAndOpenFileChooser methods
  • Complex need: use directly the new class JFileChooserManager

Concerning the directory selection for geottaged images, this is still possible via:

  • right-click on GPX layer -> Import Photos
Location:
trunk/src/org/openstreetmap/josm/gui
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java

    r5219 r5438  
    7171import org.openstreetmap.josm.gui.preferences.SourceEntry;
    7272import org.openstreetmap.josm.gui.widgets.HtmlPanel;
     73import org.openstreetmap.josm.gui.widgets.JFileChooserManager;
    7374import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
    7475import org.openstreetmap.josm.tools.GBC;
     
    522523            final StyleSource s = model.getRow(sel);
    523524
    524             String curDir = Main.pref.get("mappaint.clone-style.lastDirectory", System.getProperty("user.home"));
    525 
    526             String suggestion = curDir + File.separator + s.getFileNamePart();
    527             JFileChooser fc = new JFileChooser();
    528             fc.setSelectedFile(new File(suggestion));
    529 
    530             int answer = fc.showSaveDialog(Main.parent);
    531             if (answer != JFileChooser.APPROVE_OPTION)
     525            JFileChooserManager fcm = new JFileChooserManager(false, "mappaint.clone-style.lastDirectory", System.getProperty("user.home"));
     526            String suggestion = fcm.getInitialDirectory() + File.separator + s.getFileNamePart();
     527            fcm.createFileChooser().getFileChooser().setSelectedFile(new File(suggestion));
     528            JFileChooser fc = fcm.openFileChooser();
     529            if (fc == null)
    532530                return;
    533531
    534             if (!fc.getCurrentDirectory().getAbsolutePath().equals(curDir)) {
    535                 Main.pref.put("mappaint.clone-style.lastDirectory", fc.getCurrentDirectory().getAbsolutePath());
    536             }
    537532            File file = fc.getSelectedFile();
    538533
  • trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java

    r5429 r5438  
    6262import org.openstreetmap.josm.Main;
    6363import org.openstreetmap.josm.actions.AbstractMergeAction.LayerListCellRenderer;
     64import org.openstreetmap.josm.actions.DiskAccessAction;
    6465import org.openstreetmap.josm.actions.RenameLayerAction;
    6566import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTaskList;
     
    9596import org.openstreetmap.josm.gui.progress.ProgressTaskIds;
    9697import org.openstreetmap.josm.gui.widgets.HtmlPanel;
     98import org.openstreetmap.josm.gui.widgets.JFileChooserManager;
    9799import org.openstreetmap.josm.gui.widgets.JosmComboBox;
    98100import org.openstreetmap.josm.io.JpgImporter;
     
    19091911                return;
    19101912            }
    1911             String dir = Main.pref.get("markers.lastaudiodirectory");
    1912             JFileChooser fc = new JFileChooser(dir);
    1913             fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
    1914             fc.setAcceptAllFileFilterUsed(false);
    1915             fc.setFileFilter(new FileFilter() {
     1913            FileFilter filter = new FileFilter() {
    19161914                @Override
    19171915                public boolean accept(File f) {
     
    19231921                    return tr("Wave Audio files (*.wav)");
    19241922                }
    1925             });
    1926             fc.setMultiSelectionEnabled(true);
    1927             if (fc.showOpenDialog(Main.parent) == JFileChooser.APPROVE_OPTION) {
    1928                 if (!fc.getCurrentDirectory().getAbsolutePath().equals(dir)) {
    1929                     Main.pref.put("markers.lastaudiodirectory", fc.getCurrentDirectory().getAbsolutePath());
    1930                 }
    1931 
     1923            };
     1924            JFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, true, null, filter, JFileChooser.FILES_ONLY, "markers.lastaudiodirectory");
     1925            if (fc != null) {
    19321926                File sel[] = fc.getSelectedFiles();
    19331927                // sort files in increasing order of timestamp (this is the end time, but so
     
    19681962                Main.map.repaint();
    19691963            }
    1970 
    19711964        }
    19721965    }
     
    20102003                return;
    20112004            }
    2012             String curDir = Main.pref.get("geoimage.lastdirectory", Main.pref.get("lastDirectory"));
    2013             if (curDir.equals("")) {
    2014                 curDir = ".";
    2015             }
    2016             JFileChooser fc = new JFileChooser(new File(curDir));
    2017 
    2018             fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    2019             fc.setMultiSelectionEnabled(true);
    2020             fc.setAcceptAllFileFilterUsed(false);
     2005           
    20212006            JpgImporter importer = new JpgImporter(GpxLayer.this);
    2022             fc.setFileFilter(importer.filter);
    2023             fc.showOpenDialog(Main.parent);
    2024             LinkedList<File> files = new LinkedList<File>();
    2025             File[] sel = fc.getSelectedFiles();
    2026             if (sel == null || sel.length == 0)
    2027                 return;
    2028             if (!fc.getCurrentDirectory().getAbsolutePath().equals(curDir)) {
    2029                 Main.pref.put("geoimage.lastdirectory", fc.getCurrentDirectory().getAbsolutePath());
    2030             }
    2031             addRecursiveFiles(files, sel);
    2032             importer.importDataHandleExceptions(files, NullProgressMonitor.INSTANCE);
     2007            JFileChooser fc = new JFileChooserManager(true, "geoimage.lastdirectory", Main.pref.get("lastDirectory")).
     2008                    createFileChooser(true, null, importer.filter, JFileChooser.FILES_AND_DIRECTORIES).openFileChooser();
     2009            if (fc != null) {
     2010                File[] sel = fc.getSelectedFiles();
     2011                if (sel != null && sel.length > 0) {
     2012                    LinkedList<File> files = new LinkedList<File>();
     2013                    addRecursiveFiles(files, sel);
     2014                    importer.importDataHandleExceptions(files, NullProgressMonitor.INSTANCE);
     2015                }
     2016            }
    20332017        }
    20342018    }
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java

    r5429 r5438  
    6565
    6666import org.openstreetmap.josm.Main;
     67import org.openstreetmap.josm.actions.DiskAccessAction;
    6768import org.openstreetmap.josm.data.gpx.GpxData;
    6869import org.openstreetmap.josm.data.gpx.GpxTrack;
     
    134135
    135136        public void actionPerformed(ActionEvent arg0) {
    136             JFileChooser fc = new JFileChooser(Main.pref.get("lastDirectory"));
    137             fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
    138             fc.setAcceptAllFileFilterUsed(false);
    139             fc.setMultiSelectionEnabled(false);
    140             fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
    141             fc.setFileFilter(new FileFilter(){
     137            FileFilter filter = new FileFilter(){
    142138                @Override public boolean accept(File f) {
    143139                    return (f.isDirectory()
     
    148144                    return tr("GPX Files (*.gpx *.gpx.gz)");
    149145                }
    150             });
    151             fc.showOpenDialog(Main.parent);
     146            };
     147            JFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, false, null, filter, JFileChooser.FILES_ONLY, null);
     148            if (fc == null)
     149                return;
    152150            File sel = fc.getSelectedFile();
    153             if (sel == null)
    154                 return;
    155151
    156152            try {
    157153                outerPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
    158 
    159                 Main.pref.put("lastDirectory", sel.getPath());
    160154
    161155                for (int i = gpxLst.size() - 1 ; i >= 0 ; i--) {
     
    375369
    376370                public void actionPerformed(ActionEvent arg0) {
    377                     JFileChooser fc = new JFileChooser(Main.pref.get("geoimage.lastdirectory"));
    378                     fc.setAcceptAllFileFilterUsed(false);
    379                     fc.setMultiSelectionEnabled(false);
    380                     fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
    381                     fc.setFileFilter(JpegFileFilter.getInstance());
    382                     fc.showOpenDialog(Main.parent);
     371                    JFileChooser fc = DiskAccessAction.createAndOpenFileChooser(true, false, null, JpegFileFilter.getInstance(), JFileChooser.FILES_ONLY, "geoimage.lastdirectory");
     372                    if (fc == null)
     373                        return;
    383374                    File sel = fc.getSelectedFile();
    384                     if (sel == null)
    385                         return;
    386375
    387376                    Integer orientation = null;
  • trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java

    r5220 r5438  
    7575import org.openstreetmap.josm.gui.HelpAwareOptionPane;
    7676import org.openstreetmap.josm.gui.PleaseWaitRunnable;
     77import org.openstreetmap.josm.gui.widgets.JFileChooserManager;
    7778import org.openstreetmap.josm.io.MirroredInputStream;
    7879import org.openstreetmap.josm.io.OsmTransferException;
     
    751752
    752753            public void actionPerformed(ActionEvent e) {
    753                 JFileChooser fc= new JFileChooser();
    754                 prepareFileChooser(tfURL.getText(), fc);
    755                 int ret = fc.showOpenDialog(JOptionPane.getFrameForComponent(SourceEditor.this));
    756                 if (ret != JFileChooser.APPROVE_OPTION)
    757                     return;
    758                 tfURL.setText(fc.getSelectedFile().toString());
     754                JFileChooserManager fcm = new JFileChooserManager(true);
     755                prepareFileChooser(tfURL.getText(), fcm.getFileChooser());
     756                JFileChooser fc = fcm.openFileChooser(JOptionPane.getFrameForComponent(SourceEditor.this));
     757                if (fc != null) {
     758                    tfURL.setText(fc.getSelectedFile().toString());
     759                }
    759760            }
    760761        }
     
    12851286        private CopyOnWriteArrayList<CellEditorListener> listeners;
    12861287        private String value;
    1287         private JFileChooser fileChooser;
    12881288        private boolean isFile;
    1289 
    1290         protected JFileChooser getFileChooser() {
    1291             if (fileChooser == null) {
    1292                 this.fileChooser = new JFileChooser();
    1293                 if(!isFile) {
    1294                     fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    1295                 }
    1296             }
    1297             return fileChooser;
    1298         }
    12991289
    13001290        /**
     
    14281418
    14291419            public void actionPerformed(ActionEvent e) {
    1430                 JFileChooser fc = getFileChooser();
    1431                 prepareFileChooser(tfFileName.getText(), fc);
    1432                 int ret = fc.showOpenDialog(JOptionPane.getFrameForComponent(SourceEditor.this));
    1433                 if (ret != JFileChooser.APPROVE_OPTION)
    1434                     return;
    1435                 tfFileName.setText(fc.getSelectedFile().toString());
     1420                JFileChooserManager fcm = new JFileChooserManager(true).createFileChooser();
     1421                if (!isFile) {
     1422                    fcm.getFileChooser().setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
     1423                }
     1424                prepareFileChooser(tfFileName.getText(), fcm.getFileChooser());
     1425                JFileChooser fc = fcm.openFileChooser(JOptionPane.getFrameForComponent(SourceEditor.this));
     1426                if (fc != null) {
     1427                    tfFileName.setText(fc.getSelectedFile().toString());
     1428                }
    14361429            }
    14371430        }
  • trunk/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java

    r5203 r5438  
    22package org.openstreetmap.josm.gui.preferences.advanced;
    33
     4import static org.openstreetmap.josm.tools.I18n.marktr;
    45import static org.openstreetmap.josm.tools.I18n.tr;
    5 import static org.openstreetmap.josm.tools.I18n.marktr;
    66
    77import java.awt.Color;
     
    1414import java.awt.event.MouseAdapter;
    1515import java.awt.event.MouseEvent;
    16 
    1716import java.io.File;
    1817import java.util.ArrayList;
     
    4342
    4443import org.openstreetmap.josm.Main;
     44import org.openstreetmap.josm.actions.DiskAccessAction;
    4545import org.openstreetmap.josm.data.CustomConfigurator;
    4646import org.openstreetmap.josm.data.Preferences;
     
    316316   
    317317    private File[] askUserForCustomSettingsFiles(boolean saveFileFlag, String title) {
    318         String dir = Main.pref.get("customsettings.lastDirectory");
    319         if (dir.length()==0) dir =".";
    320        
    321         JFileChooser fc = new JFileChooser(dir);
    322         fc.setDialogTitle(title);
    323         fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
    324         fc.setAcceptAllFileFilterUsed(false);
    325         fc.setFileFilter(new FileFilter() {
     318        FileFilter filter = new FileFilter() {
    326319            @Override
    327320            public boolean accept(File f) {
     
    332325                return tr("JOSM custom settings files (*.xml)");
    333326            }
    334             });
    335        
    336             fc.setMultiSelectionEnabled(!saveFileFlag);
    337             int result = saveFileFlag? fc.showSaveDialog(Main.parent) : fc.showOpenDialog(Main.parent);
    338             if (result == JFileChooser.APPROVE_OPTION) {
    339                 if (!fc.getCurrentDirectory().getAbsolutePath().equals(dir)) {
    340                     Main.pref.put("customsettings.lastDirectory", fc.getCurrentDirectory().getAbsolutePath());
    341                 }
    342                 File sel[] = fc.isMultiSelectionEnabled() ? fc.getSelectedFiles() : (new File[]{fc.getSelectedFile()});
    343                 if (sel.length==1 && !sel[0].getName().contains(".")) sel[0]=new File(sel[0].getAbsolutePath()+".xml");
    344                 return sel;
    345             }
    346             return new File[0];
     327        };
     328        JFileChooser fc = DiskAccessAction.createAndOpenFileChooser(!saveFileFlag, !saveFileFlag, title, filter, JFileChooser.FILES_ONLY, "customsettings.lastDirectory");
     329        if (fc != null) {
     330            File sel[] = fc.isMultiSelectionEnabled() ? fc.getSelectedFiles() : (new File[]{fc.getSelectedFile()});
     331            if (sel.length==1 && !sel[0].getName().contains(".")) sel[0]=new File(sel[0].getAbsolutePath()+".xml");
     332            return sel;
     333        }
     334        return new File[0];
    347335    }
    348336           
Note: See TracChangeset for help on using the changeset viewer.