2014-07-28 16:01:46 -04:00
|
|
|
package net.filebot;
|
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
import static java.util.Arrays.*;
|
|
|
|
import static net.filebot.Settings.*;
|
2014-07-28 16:01:46 -04:00
|
|
|
import static net.filebot.util.ui.TunedUtilities.*;
|
|
|
|
|
|
|
|
import java.awt.Dialog;
|
|
|
|
import java.awt.FileDialog;
|
|
|
|
import java.awt.Frame;
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.FilenameFilter;
|
2014-07-29 02:40:35 -04:00
|
|
|
import java.util.List;
|
2014-07-28 16:01:46 -04:00
|
|
|
|
|
|
|
import javax.swing.JFileChooser;
|
|
|
|
|
|
|
|
public class UserFiles {
|
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
private static FileChooser defaultFileChooser = getPreferredFileChooser();
|
2014-07-28 16:01:46 -04:00
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
public static void setDefaultFileChooser(FileChooser fileChooser) {
|
|
|
|
defaultFileChooser = fileChooser;
|
2014-07-28 16:01:46 -04:00
|
|
|
}
|
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
public static List<File> showLoadDialogSelectFiles(boolean folderMode, boolean multiSelection, File defaultFile, final FilenameFilter filter, String title, Object parent) {
|
|
|
|
return defaultFileChooser.showLoadDialogSelectFiles(folderMode, multiSelection, defaultFile, filter, title, parent);
|
|
|
|
}
|
2014-07-28 16:01:46 -04:00
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
public static File showSaveDialogSelectFile(boolean folderMode, File defaultFile, String title, Object parent) {
|
|
|
|
return defaultFileChooser.showSaveDialogSelectFile(folderMode, defaultFile, title, parent);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static File showOpenDialogSelectFolder(File defaultFile, String title, Object parent) {
|
|
|
|
List<File> folder = defaultFileChooser.showLoadDialogSelectFiles(true, false, defaultFile, null, title, parent);
|
|
|
|
return folder.size() > 0 ? folder.get(0) : null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public enum FileChooser {
|
|
|
|
|
|
|
|
Swing {
|
|
|
|
@Override
|
|
|
|
public List<File> showLoadDialogSelectFiles(boolean folderMode, boolean multiSelection, File defaultFile, FilenameFilter filter, String title, Object parent) {
|
|
|
|
JFileChooser chooser = new JFileChooser();
|
|
|
|
if (filter != null) {
|
|
|
|
chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getDescription() {
|
|
|
|
return filter.toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean accept(File f) {
|
|
|
|
return f.isDirectory() || filter.accept(f.getParentFile(), f.getName());
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
chooser.setSelectedFile(defaultFile);
|
|
|
|
chooser.setFileSelectionMode(folderMode && filter == null ? JFileChooser.DIRECTORIES_ONLY : JFileChooser.FILES_AND_DIRECTORIES);
|
|
|
|
chooser.setMultiSelectionEnabled(multiSelection);
|
|
|
|
|
|
|
|
if (chooser.showOpenDialog(getWindow(parent)) == JFileChooser.APPROVE_OPTION) {
|
|
|
|
if (chooser.getSelectedFiles().length > 0)
|
|
|
|
return asList(chooser.getSelectedFiles());
|
|
|
|
if (chooser.getSelectedFile() != null)
|
|
|
|
return asList(chooser.getSelectedFile());
|
|
|
|
}
|
|
|
|
return asList(new File[0]);
|
2014-07-28 16:01:46 -04:00
|
|
|
}
|
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
@Override
|
|
|
|
public File showSaveDialogSelectFile(boolean folderMode, File defaultFile, String title, Object parent) {
|
|
|
|
JFileChooser chooser = new JFileChooser();
|
|
|
|
chooser.setSelectedFile(defaultFile);
|
|
|
|
chooser.setFileSelectionMode(folderMode ? JFileChooser.DIRECTORIES_ONLY : JFileChooser.FILES_AND_DIRECTORIES);
|
|
|
|
chooser.setMultiSelectionEnabled(false);
|
2014-07-28 16:01:46 -04:00
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
if (chooser.showSaveDialog(getWindow(parent)) != JFileChooser.APPROVE_OPTION) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return chooser.getSelectedFile();
|
|
|
|
}
|
|
|
|
},
|
2014-07-28 16:01:46 -04:00
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
AWT {
|
|
|
|
@Override
|
|
|
|
public List<File> showLoadDialogSelectFiles(boolean folderMode, boolean multiSelection, File defaultFile, FilenameFilter filter, String title, Object parent) {
|
|
|
|
FileDialog fileDialog = createFileDialog(parent, title, FileDialog.LOAD, folderMode);
|
|
|
|
|
|
|
|
if (defaultFile != null) {
|
|
|
|
fileDialog.setFile(defaultFile.getPath());
|
|
|
|
}
|
|
|
|
if (filter != null) {
|
|
|
|
fileDialog.setFilenameFilter(filter);
|
2014-07-28 16:01:46 -04:00
|
|
|
}
|
2014-07-29 02:40:35 -04:00
|
|
|
fileDialog.setMultipleMode(multiSelection);
|
|
|
|
fileDialog.setVisible(true);
|
2014-07-28 16:01:46 -04:00
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
return asList(fileDialog.getFiles());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public File showSaveDialogSelectFile(boolean folderMode, File defaultFile, String title, Object parent) {
|
|
|
|
FileDialog fileDialog = createFileDialog(getWindow(parent), title, FileDialog.SAVE, folderMode);
|
|
|
|
|
|
|
|
if (defaultFile != null) {
|
|
|
|
if (defaultFile.getParentFile() != null) {
|
|
|
|
fileDialog.setDirectory(defaultFile.getParentFile().getPath());
|
|
|
|
}
|
|
|
|
fileDialog.setFile(defaultFile.getName());
|
2014-07-28 16:01:46 -04:00
|
|
|
}
|
2014-07-29 02:40:35 -04:00
|
|
|
fileDialog.setMultipleMode(false);
|
|
|
|
fileDialog.setVisible(true);
|
2014-07-28 16:01:46 -04:00
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
File[] files = fileDialog.getFiles();
|
|
|
|
return files.length > 0 ? files[0] : null;
|
|
|
|
}
|
2014-07-28 16:01:46 -04:00
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
public FileDialog createFileDialog(Object parent, String title, int mode, boolean fileDialogForDirectories) {
|
|
|
|
System.setProperty("apple.awt.fileDialogForDirectories", String.valueOf(fileDialogForDirectories));
|
2014-07-28 16:01:46 -04:00
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
if (parent instanceof Frame) {
|
|
|
|
return new FileDialog((Frame) parent, title, mode);
|
2014-07-28 16:01:46 -04:00
|
|
|
}
|
2014-07-29 02:40:35 -04:00
|
|
|
if (parent instanceof Dialog) {
|
|
|
|
return new FileDialog((Dialog) parent, title, mode);
|
|
|
|
}
|
|
|
|
|
|
|
|
Frame[] frames = Frame.getFrames();
|
|
|
|
return new FileDialog(frames.length > 0 ? frames[0] : null, title, mode);
|
2014-07-28 16:01:46 -04:00
|
|
|
}
|
2014-07-29 02:40:35 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
JavaFX {
|
|
|
|
@Override
|
|
|
|
public List<File> showLoadDialogSelectFiles(boolean folderMode, boolean multiSelection, File defaultFile, FilenameFilter filter, String title, Object parent) {
|
|
|
|
throw new UnsupportedOperationException();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public File showSaveDialogSelectFile(boolean folderMode, File defaultFile, String title, Object parent) {
|
|
|
|
throw new UnsupportedOperationException();
|
|
|
|
}
|
|
|
|
};
|
2014-07-28 16:01:46 -04:00
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
public abstract List<File> showLoadDialogSelectFiles(boolean folderMode, boolean multiSelection, File defaultFile, final FilenameFilter filter, String title, Object parent);
|
2014-07-28 16:01:46 -04:00
|
|
|
|
2014-07-29 02:40:35 -04:00
|
|
|
public abstract File showSaveDialogSelectFile(boolean folderMode, File defaultFile, String title, Object parent);
|
2014-07-28 16:01:46 -04:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|