switch back to a JFileChooser, AWT FileDialog really is shit it seems

the AWT FileDialog provides laughably bad "support" for setting
file filters (the type which the user can select from a dropdown).

oh well, semi-non-native looking file open/save dialogs are here to stay
This commit is contained in:
Gered 2015-12-03 16:47:34 -05:00
parent e694da1235
commit 7f344da67c

View file

@ -11,6 +11,7 @@ import org.fenix.utils.about.AboutDialog;
import org.jnativehook.keyboard.NativeKeyEvent; import org.jnativehook.keyboard.NativeKeyEvent;
import javax.swing.*; import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.io.*; import java.io.*;
@ -39,7 +40,7 @@ final class Actions {
private Llanfair master; private Llanfair master;
private File file; private File file;
private FileDialog fileChooser; private JFileChooser fileChooser;
private volatile long lastUnsplit; private volatile long lastUnsplit;
private volatile long lastSkip; private volatile long lastSkip;
@ -55,8 +56,9 @@ final class Actions {
master = owner; master = owner;
file = null; file = null;
fileChooser = new FileDialog(master); fileChooser = new JFileChooser(UserSettings.getSplitsPath());
fileChooser.setDirectory(UserSettings.getSplitsPath()); fileChooser.setFileFilter(new FileNameExtensionFilter(
"Llanfair Run Splits", "lfs"));
lastUnsplit = 0L; lastUnsplit = 0L;
lastSkip = 0L; lastSkip = 0L;
@ -240,20 +242,21 @@ final class Actions {
* @return a file selected by the user or {@code null} if he canceled * @return a file selected by the user or {@code null} if he canceled
*/ */
private File selectFile(FILE_CHOOSER_TYPE dialogType) { private File selectFile(FILE_CHOOSER_TYPE dialogType) {
if (dialogType == FILE_CHOOSER_TYPE.OPEN) int action = -1;
fileChooser.setMode(FileDialog.LOAD);
else if (dialogType == FILE_CHOOSER_TYPE.SAVE)
fileChooser.setMode(FileDialog.SAVE);
fileChooser.setVisible(true); if (dialogType == FILE_CHOOSER_TYPE.OPEN)
String selectedFile = fileChooser.getFile(); action = fileChooser.showOpenDialog(master);
if (selectedFile != null) { else if (dialogType == FILE_CHOOSER_TYPE.SAVE)
if (fileChooser.getMode() == FileDialog.SAVE) { action = fileChooser.showSaveDialog(master);
if (action == JFileChooser.APPROVE_OPTION) {
String selectedFile = fileChooser.getSelectedFile().getPath();
if (dialogType == FILE_CHOOSER_TYPE.SAVE) {
// add default ".lfs" extension if the user did not add one themselves // add default ".lfs" extension if the user did not add one themselves
if (getFileExtension(selectedFile) == null) if (getFileExtension(selectedFile) == null)
selectedFile = selectedFile + ".lfs"; selectedFile = selectedFile + ".lfs";
} }
return new File(fileChooser.getDirectory() + File.separator + selectedFile); return new File(selectedFile);
} else } else
return null; return null;
} }