Added support for Save File Dialogs to GuiFileChooser

This commit is contained in:
CrushedPixel
2015-07-12 22:12:51 +02:00
parent 34e3e3c407
commit ac79eef077

View File

@@ -3,6 +3,7 @@ package eu.crushedpixel.replaymod.gui.elements;
import eu.crushedpixel.replaymod.gui.elements.listeners.FileChooseListener; import eu.crushedpixel.replaymod.gui.elements.listeners.FileChooseListener;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.apache.commons.io.FilenameUtils;
import java.awt.*; import java.awt.*;
import java.io.File; import java.io.File;
@@ -21,6 +22,7 @@ public class GuiFileChooser extends GuiAdvancedButton {
} }
protected String baseString; protected String baseString;
private boolean save = false;
@Setter @Setter
private String[] allowedExtensions = null; private String[] allowedExtensions = null;
@@ -28,8 +30,13 @@ public class GuiFileChooser extends GuiAdvancedButton {
private List<FileChooseListener> listeners = new ArrayList<FileChooseListener>(); private List<FileChooseListener> listeners = new ArrayList<FileChooseListener>();
public GuiFileChooser(int buttonId, int x, int y, String buttonText, File selectedFile, String[] allowedExtensions) { public GuiFileChooser(int buttonId, int x, int y, String buttonText, File selectedFile, String[] allowedExtensions) {
this(buttonId, x, y, buttonText, selectedFile, allowedExtensions, false);
}
public GuiFileChooser(int buttonId, int x, int y, String buttonText, File selectedFile, String[] allowedExtensions, boolean save) {
super(buttonId, x, y, buttonText); super(buttonId, x, y, buttonText);
this.selectedFile = selectedFile; this.selectedFile = selectedFile;
this.save = save;
this.baseString = buttonText; this.baseString = buttonText;
updateDisplayString(); updateDisplayString();
@@ -53,13 +60,18 @@ public class GuiFileChooser extends GuiAdvancedButton {
Frame frame = new Frame(); Frame frame = new Frame();
FileDialog fileDialog = new FileDialog(frame); FileDialog fileDialog = new FileDialog(frame);
fileDialog.setMode(save ? FileDialog.SAVE : FileDialog.LOAD);
fileDialog.setDirectory(selectedFile.getParentFile().getAbsolutePath());
fileDialog.setFile(selectedFile.getName());
fileDialog.setFilenameFilter(new FilenameFilter() { fileDialog.setFilenameFilter(new FilenameFilter() {
@Override @Override
public boolean accept(File dir, String name) { public boolean accept(File dir, String name) {
if(allowedExtensions == null) return true; if(allowedExtensions == null) return true;
for(String extension : allowedExtensions) { for(String extension : allowedExtensions) {
String[] split = name.split("\\."); String[] split = name.split("\\.");
String ext = split[split.length-1]; String ext = split[split.length - 1];
if(extension.equalsIgnoreCase(ext)) return true; if(extension.equalsIgnoreCase(ext)) return true;
} }
@@ -67,10 +79,14 @@ public class GuiFileChooser extends GuiAdvancedButton {
} }
}); });
//frame.setVisible(true);
fileDialog.setVisible(true); fileDialog.setVisible(true);
String filename = fileDialog.getFile(); String filename = fileDialog.getFile();
if(filename != null && FilenameUtils.getExtension(filename).isEmpty() && allowedExtensions.length > 0) {
filename += "."+allowedExtensions[0];
}
String directory = fileDialog.getDirectory(); String directory = fileDialog.getDirectory();
if(filename != null) { if(filename != null) {
selectedFile = new File(directory, filename); selectedFile = new File(directory, filename);