File Chooser object for save as.
This commit is contained in:
parent
4924773c3a
commit
0caaf04e06
113
swing/src/net/sf/openrocket/gui/main/SaveAsFileChooser.java
Normal file
113
swing/src/net/sf/openrocket/gui/main/SaveAsFileChooser.java
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
package net.sf.openrocket.gui.main;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import javax.swing.JFileChooser;
|
||||||
|
|
||||||
|
import net.sf.openrocket.document.OpenRocketDocument;
|
||||||
|
import net.sf.openrocket.document.StorageOptions;
|
||||||
|
import net.sf.openrocket.document.StorageOptions.FileType;
|
||||||
|
import net.sf.openrocket.gui.util.FileHelper;
|
||||||
|
import net.sf.openrocket.gui.util.SimpleFileFilter;
|
||||||
|
import net.sf.openrocket.gui.util.SwingPreferences;
|
||||||
|
import net.sf.openrocket.l10n.Translator;
|
||||||
|
import net.sf.openrocket.startup.Application;
|
||||||
|
|
||||||
|
public class SaveAsFileChooser extends JFileChooser {
|
||||||
|
|
||||||
|
private final FileType type;
|
||||||
|
private final OpenRocketDocument document;
|
||||||
|
private final StorageOptionChooser storageChooser;
|
||||||
|
|
||||||
|
private static final Translator trans = Application.getTranslator();
|
||||||
|
|
||||||
|
public static SaveAsFileChooser build( OpenRocketDocument document, FileType type ) {
|
||||||
|
return new SaveAsFileChooser(document,type);
|
||||||
|
}
|
||||||
|
|
||||||
|
private SaveAsFileChooser( OpenRocketDocument document, FileType type ) {
|
||||||
|
this.document = document;
|
||||||
|
this.type = type;
|
||||||
|
|
||||||
|
this.setAcceptAllFileFilterUsed(true);
|
||||||
|
|
||||||
|
File defaultFilename = document.getFile();
|
||||||
|
|
||||||
|
switch( type ) {
|
||||||
|
default:
|
||||||
|
case OPENROCKET:
|
||||||
|
defaultFilename = FileHelper.forceExtension(defaultFilename,"ork");
|
||||||
|
this.setDialogTitle(trans.get("saveAs.openrocket.title"));
|
||||||
|
storageChooser = new StorageOptionChooser(document, document.getDefaultStorageOptions());
|
||||||
|
this.setAccessory(storageChooser);
|
||||||
|
this.addChoosableFileFilter(FileHelper.OPENROCKET_DESIGN_FILTER);
|
||||||
|
this.setFileFilter(FileHelper.OPENROCKET_DESIGN_FILTER);
|
||||||
|
break;
|
||||||
|
case ROCKSIM:
|
||||||
|
defaultFilename = FileHelper.forceExtension(defaultFilename,"rkt");
|
||||||
|
this.setDialogTitle(trans.get("saveAs.rocksim.title"));
|
||||||
|
storageChooser = null;
|
||||||
|
this.addChoosableFileFilter(FileHelper.ROCKSIM_DESIGN_FILTER);
|
||||||
|
this.setFileFilter(FileHelper.ROCKSIM_DESIGN_FILTER);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
final RememberFilenamePropertyListener listner = new RememberFilenamePropertyListener();
|
||||||
|
this.addPropertyChangeListener(JFileChooser.FILE_FILTER_CHANGED_PROPERTY, listner);
|
||||||
|
this.addPropertyChangeListener(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY, listner);
|
||||||
|
this.addPropertyChangeListener(JFileChooser.SELECTED_FILES_CHANGED_PROPERTY, listner);
|
||||||
|
|
||||||
|
this.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
|
||||||
|
|
||||||
|
if (defaultFilename != null) {
|
||||||
|
this.setSelectedFile(defaultFilename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void storeOptions(StorageOptions opts) {
|
||||||
|
if ( storageChooser != null ) {
|
||||||
|
storageChooser.storeOptions(opts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class RememberFilenamePropertyListener implements PropertyChangeListener {
|
||||||
|
private String oldFileName=null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void propertyChange(PropertyChangeEvent event){
|
||||||
|
if( JFileChooser.SELECTED_FILE_CHANGED_PROPERTY == event.getPropertyName()){
|
||||||
|
if(null != event.getOldValue()){
|
||||||
|
this.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 == this.oldFileName){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String thisFileName = this.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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user