[#2131] Throw warning message when design filename contains illegal characters
This commit is contained in:
parent
f4f6200662
commit
e1c86f6a74
@ -1341,6 +1341,10 @@ SaveRktWarningDialog.donotshow=Do not show this dialog again
|
|||||||
saveAs.openrocket.title=Save as OpenRocket ork file
|
saveAs.openrocket.title=Save as OpenRocket ork file
|
||||||
saveAs.rocksim.title=Export as RockSim rkt file
|
saveAs.rocksim.title=Export as RockSim rkt file
|
||||||
|
|
||||||
|
! SaveAsFileChooser
|
||||||
|
SaveAsFileChooser.illegalFilename.title = Illegal filename
|
||||||
|
SaveAsFileChooser.illegalFilename.message = The filename '%s' may not contain the character ' %c '. Please remove it.
|
||||||
|
|
||||||
! StorageOptionChooser
|
! StorageOptionChooser
|
||||||
StorageOptChooser.lbl.Simdatatostore = Simulated data to store:
|
StorageOptChooser.lbl.Simdatatostore = Simulated data to store:
|
||||||
StorageOptChooser.rdbut.Allsimdata = All simulated data
|
StorageOptChooser.rdbut.Allsimdata = All simulated data
|
||||||
|
@ -86,6 +86,7 @@ import net.sf.openrocket.gui.util.OpenFileWorker;
|
|||||||
import net.sf.openrocket.gui.util.SaveFileWorker;
|
import net.sf.openrocket.gui.util.SaveFileWorker;
|
||||||
import net.sf.openrocket.gui.util.SwingPreferences;
|
import net.sf.openrocket.gui.util.SwingPreferences;
|
||||||
import net.sf.openrocket.gui.util.URLUtil;
|
import net.sf.openrocket.gui.util.URLUtil;
|
||||||
|
import net.sf.openrocket.gui.widgets.SaveFileChooser;
|
||||||
import net.sf.openrocket.l10n.Translator;
|
import net.sf.openrocket.l10n.Translator;
|
||||||
import net.sf.openrocket.logging.Markers;
|
import net.sf.openrocket.logging.Markers;
|
||||||
import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
|
import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
|
||||||
@ -1410,7 +1411,7 @@ public class BasicFrame extends JFrame {
|
|||||||
public boolean exportRockSimAction() {
|
public boolean exportRockSimAction() {
|
||||||
File file;
|
File file;
|
||||||
|
|
||||||
final SaveAsFileChooser chooser = SaveAsFileChooser.build(document, FileType.ROCKSIM);
|
final DesignFileSaveAsFileChooser chooser = DesignFileSaveAsFileChooser.build(document, FileType.ROCKSIM);
|
||||||
|
|
||||||
int option = chooser.showSaveDialog(BasicFrame.this);
|
int option = chooser.showSaveDialog(BasicFrame.this);
|
||||||
|
|
||||||
@ -1507,10 +1508,15 @@ public class BasicFrame extends JFrame {
|
|||||||
private boolean saveAsAction() {
|
private boolean saveAsAction() {
|
||||||
File file = null;
|
File file = null;
|
||||||
|
|
||||||
final SaveAsFileChooser chooser = SaveAsFileChooser.build(document, FileType.OPENROCKET);
|
final DesignFileSaveAsFileChooser chooser = DesignFileSaveAsFileChooser.build(document, FileType.OPENROCKET);
|
||||||
|
|
||||||
int option = chooser.showSaveDialog(BasicFrame.this);
|
int option = chooser.showSaveDialog(BasicFrame.this);
|
||||||
|
|
||||||
|
// If the user entered an illegal filename, show the dialog again
|
||||||
|
while (option == SaveFileChooser.ILLEGAL_FILENAME_ERROR) {
|
||||||
|
option = chooser.showSaveDialog(BasicFrame.this);
|
||||||
|
}
|
||||||
|
|
||||||
if (option != JFileChooser.APPROVE_OPTION) {
|
if (option != JFileChooser.APPROVE_OPTION) {
|
||||||
log.info(Markers.USER_MARKER, "User decided not to save, option=" + option);
|
log.info(Markers.USER_MARKER, "User decided not to save, option=" + option);
|
||||||
return false;
|
return false;
|
||||||
|
@ -3,9 +3,6 @@ package net.sf.openrocket.gui.main;
|
|||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.swing.JFileChooser;
|
import javax.swing.JFileChooser;
|
||||||
|
|
||||||
@ -15,10 +12,11 @@ import net.sf.openrocket.document.StorageOptions.FileType;
|
|||||||
import net.sf.openrocket.gui.util.FileHelper;
|
import net.sf.openrocket.gui.util.FileHelper;
|
||||||
import net.sf.openrocket.gui.util.SimpleFileFilter;
|
import net.sf.openrocket.gui.util.SimpleFileFilter;
|
||||||
import net.sf.openrocket.gui.util.SwingPreferences;
|
import net.sf.openrocket.gui.util.SwingPreferences;
|
||||||
|
import net.sf.openrocket.gui.widgets.SaveFileChooser;
|
||||||
import net.sf.openrocket.l10n.Translator;
|
import net.sf.openrocket.l10n.Translator;
|
||||||
import net.sf.openrocket.startup.Application;
|
import net.sf.openrocket.startup.Application;
|
||||||
|
|
||||||
public class SaveAsFileChooser extends JFileChooser {
|
public class DesignFileSaveAsFileChooser extends SaveFileChooser {
|
||||||
|
|
||||||
private final FileType type;
|
private final FileType type;
|
||||||
private final OpenRocketDocument document;
|
private final OpenRocketDocument document;
|
||||||
@ -26,11 +24,11 @@ public class SaveAsFileChooser extends JFileChooser {
|
|||||||
|
|
||||||
private static final Translator trans = Application.getTranslator();
|
private static final Translator trans = Application.getTranslator();
|
||||||
|
|
||||||
public static SaveAsFileChooser build( OpenRocketDocument document, FileType type ) {
|
public static DesignFileSaveAsFileChooser build(OpenRocketDocument document, FileType type ) {
|
||||||
return new SaveAsFileChooser(document,type);
|
return new DesignFileSaveAsFileChooser(document,type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SaveAsFileChooser( OpenRocketDocument document, FileType type ) {
|
private DesignFileSaveAsFileChooser(OpenRocketDocument document, FileType type ) {
|
||||||
this.document = document;
|
this.document = document;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
|
45
swing/src/net/sf/openrocket/gui/widgets/SaveFileChooser.java
Normal file
45
swing/src/net/sf/openrocket/gui/widgets/SaveFileChooser.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package net.sf.openrocket.gui.widgets;
|
||||||
|
|
||||||
|
import net.sf.openrocket.l10n.Translator;
|
||||||
|
import net.sf.openrocket.startup.Application;
|
||||||
|
|
||||||
|
import javax.swing.JFileChooser;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.HeadlessException;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class SaveFileChooser extends JFileChooser {
|
||||||
|
private static final Translator trans = Application.getTranslator();
|
||||||
|
|
||||||
|
private static final char[] ILLEGAL_CHARS = new char[] { '/', '\\', ':', '*', '?', '"', '<', '>', '|' };
|
||||||
|
public static final int ILLEGAL_FILENAME_ERROR = 23111998;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int showSaveDialog(Component parent) throws HeadlessException {
|
||||||
|
int option = super.showSaveDialog(parent);
|
||||||
|
if (option != JFileChooser.APPROVE_OPTION) {
|
||||||
|
return option;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for invalid characters
|
||||||
|
File file = getSelectedFile();
|
||||||
|
if (file == null) {
|
||||||
|
return ERROR_OPTION;
|
||||||
|
}
|
||||||
|
String filename = file.getName();
|
||||||
|
for (char c : ILLEGAL_CHARS) {
|
||||||
|
if (filename.indexOf(c) >= 0) {
|
||||||
|
// Illegal character found
|
||||||
|
JOptionPane.showMessageDialog(parent,
|
||||||
|
String.format(trans.get("SaveAsFileChooser.illegalFilename.message"), filename, c),
|
||||||
|
trans.get("SaveAsFileChooser.illegalFilename.title"),
|
||||||
|
JOptionPane.WARNING_MESSAGE);
|
||||||
|
return ILLEGAL_FILENAME_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return option;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user