From b75d7e38c6f895e04ae2772b675b5f7494499bb0 Mon Sep 17 00:00:00 2001 From: Daniel_M_Williams Date: Tue, 20 Jan 2015 13:39:26 -0500 Subject: [PATCH] when using 'File > Save As..' dialog, this patch will update the filename extension directly within the dialog box, upon chanig the FileFilter type, in addition to after the dialog is accepted. --- .../openrocket/gui/util/SimpleFileFilter.java | 3 ++ .../sf/openrocket/gui/main/BasicFrame.java | 42 ++++++++++++++++++- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/core/src/net/sf/openrocket/gui/util/SimpleFileFilter.java b/core/src/net/sf/openrocket/gui/util/SimpleFileFilter.java index e895b9299..3d5b2f9f5 100644 --- a/core/src/net/sf/openrocket/gui/util/SimpleFileFilter.java +++ b/core/src/net/sf/openrocket/gui/util/SimpleFileFilter.java @@ -30,6 +30,9 @@ public class SimpleFileFilter extends FileFilter implements java.io.FileFilter { this(description, true, extensions); } + public String[] getExtensions() { + return extensions; + } /** * Create filter that accepts files with the provided extensions. diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java index 10fb9e71f..9cac11c80 100644 --- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -12,6 +12,8 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -92,6 +94,7 @@ import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.gui.util.Icons; import net.sf.openrocket.gui.util.OpenFileWorker; import net.sf.openrocket.gui.util.SaveFileWorker; +import net.sf.openrocket.gui.util.SimpleFileFilter; import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.logging.Markers; @@ -111,7 +114,7 @@ import net.sf.openrocket.utils.ComponentPresetEditor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class BasicFrame extends JFrame { +public class BasicFrame extends JFrame implements PropertyChangeListener { private static final Logger log = LoggerFactory.getLogger(BasicFrame.class); private static final GeneralRocketSaver ROCKET_SAVER = new GeneralRocketSaver(); @@ -1274,6 +1277,37 @@ public class BasicFrame extends JFrame { return saveAs(file); } + private static String oldFileName=null; + public void propertyChange(PropertyChangeEvent event){ + if( JFileChooser.SELECTED_FILE_CHANGED_PROPERTY == event.getPropertyName()){ + if(null != event.getOldValue()){ + BasicFrame.oldFileName = ((File)event.getOldValue()).getName(); + } + return; + }else if(JFileChooser.FILE_FILTER_CHANGED_PROPERTY == event.getPropertyName()){ + JFileChooser chooser = (JFileChooser)event.getSource(); + SimpleFileFilter filter = (SimpleFileFilter)(chooser.getFileFilter()); + String desiredExtension = filter.getExtensions()[0]; + + if( null == BasicFrame.oldFileName){ + return; + } + String thisFileName = BasicFrame.oldFileName; + + if ( filter.accept( new File(thisFileName))){ + // nop + return; + }else{ + String[] splitResults = thisFileName.split("\\."); + if(0 < splitResults.length){ + thisFileName = splitResults[0]; + } + chooser.setSelectedFile(new File( thisFileName+desiredExtension)); + return; + } + } + } + /** * "Save As" action. * @@ -1292,8 +1326,12 @@ public class BasicFrame extends JFrame { StorageOptionChooser storageChooser = new StorageOptionChooser(document, document.getDefaultStorageOptions()); final JFileChooser chooser = new JFileChooser(); + chooser.setAcceptAllFileFilterUsed(false); chooser.addChoosableFileFilter(FileHelper.OPENROCKET_DESIGN_FILTER); chooser.addChoosableFileFilter(FileHelper.ROCKSIM_DESIGN_FILTER); + chooser.addPropertyChangeListener(JFileChooser.FILE_FILTER_CHANGED_PROPERTY, this); + chooser.addPropertyChangeListener(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY, this); + chooser.addPropertyChangeListener(JFileChooser.SELECTED_FILES_CHANGED_PROPERTY, this); //Force the file filter to match the file extension that was opened. Will default to OR if the file is null. if (FileHelper.ROCKSIM_DESIGN_FILTER.accept(document.getFile())) { @@ -1336,7 +1374,7 @@ public class BasicFrame extends JFrame { return result; } } - + /** * Perform the writing of the design to the given file in Rocksim format. *