|
SaveDialog |
|
package ij.io;
import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.*;
import ij.*;
import ij.plugin.frame.Recorder;
import ij.util.Java2;
/** This class displays a dialog window from
which the user can save a file. */
public class SaveDialog {
private String dir;
private String name;
private String title;
private String ext;
/** Displays a file save dialog with 'title' as the
title, 'defaultName' as the initial file name, and
'extension' (e.g. ".tif") as the default extension.
*/
public SaveDialog(String title, String defaultName, String extension) {
this.title = title;
ext = extension;
if (isMacro())
return;
String defaultDir = OpenDialog.getDefaultDirectory();
defaultName = addExtension(defaultName, extension);
if (Prefs.useJFileChooser)
jSave(title, defaultDir, defaultName);
else
save(title, defaultDir, defaultName);
if (name!=null && dir!=null)
OpenDialog.setDefaultDirectory(dir);
IJ.showStatus(title+": "+dir+name);
}
/** Displays a file save dialog, using the specified
default directory and file name and extension. */
public SaveDialog(String title, String defaultDir, String defaultName, String extension) {
this.title = title;
ext = extension;
if (isMacro())
return;
defaultName = addExtension(defaultName, extension);
if (Prefs.useJFileChooser)
jSave(title, defaultDir, defaultName);
else
save(title, defaultDir, defaultName);
IJ.showStatus(title+": "+dir+name);
}
boolean isMacro() {
String macroOptions = Macro.getOptions();
if (macroOptions!=null) {
String path = Macro.getValue(macroOptions, title, null);
if (path==null)
path = Macro.getValue(macroOptions, "path", null);
//if (path==null && oneRunArg) {
// path = macroOptions;
//}
if (path!=null) {
Opener o = new Opener();
dir = o.getDir(path);
name = o.getName(path);
return true;
}
}
return false;
}
String addExtension(String name, String extension) {
if (name!=null && extension!=null) {
int dotIndex = name.lastIndexOf(".");
if (dotIndex>=0)
name = name.substring(0, dotIndex) + extension;
else
name += extension;
}
return name;
}
// Save using JFileChooser.
void jSave(String title, String defaultDir, String defaultName) {
Java2.setSystemLookAndFeel();
if (EventQueue.isDispatchThread())
jSaveDispatchThread(title, defaultDir, defaultName);
else
jSaveInvokeAndWait(title, defaultDir, defaultName);
}
// Save using JFileChooser.
// assumes we are running on the event dispatch thread
void jSaveDispatchThread(String title, String defaultDir, String defaultName) {
JFileChooser fc = new JFileChooser();
fc.setDialogTitle(title);
if (defaultDir!=null) {
File f = new File(defaultDir);
if (f!=null)
fc.setCurrentDirectory(f);
}
if (defaultName!=null)
fc.setSelectedFile(new File(defaultName));
int returnVal = fc.showSaveDialog(IJ.getInstance());
if (returnVal!=JFileChooser.APPROVE_OPTION)
{Macro.abort(); return;}
File f = fc.getSelectedFile();
if(f.exists()) {
int ret = JOptionPane.showConfirmDialog (fc,
"The file "+ f.getName() + " already exists. \nWould you like to replace it?",
"Replace?",
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (ret!=JOptionPane.OK_OPTION) f = null;
}
if (f==null)
Macro.abort();
else {
dir = fc.getCurrentDirectory().getPath()+File.separator;
name = fc.getName(f);
}
}
// Save using JFileChooser. Runs on event
// dispatch thread to avoid thread deadlocks.
void jSaveInvokeAndWait(final String title, final String defaultDir, final String defaultName) {
try {
EventQueue.invokeAndWait(new Runnable() {
public void run() {
JFileChooser fc = new JFileChooser();
fc.setDialogTitle(title);
if (defaultDir!=null) {
File f = new File(defaultDir);
if (f!=null)
fc.setCurrentDirectory(f);
}
if (defaultName!=null)
fc.setSelectedFile(new File(defaultName));
int returnVal = fc.showSaveDialog(IJ.getInstance());
if (returnVal!=JFileChooser.APPROVE_OPTION)
{Macro.abort(); return;}
File f = fc.getSelectedFile();
if(f.exists()) {
int ret = JOptionPane.showConfirmDialog (fc,
"The file "+ f.getName() + " already exists. \nWould you like to replace it?",
"Replace?",
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (ret!=JOptionPane.OK_OPTION) f = null;
}
if (f==null)
Macro.abort();
else {
dir = fc.getCurrentDirectory().getPath()+File.separator;
name = fc.getName(f);
}
}
});
} catch (Exception e) {}
}
// Save using FileDialog
void save(String title, String defaultDir, String defaultName) {
ImageJ ij = IJ.getInstance();
Frame parent = ij!=null?ij:new Frame();
FileDialog fd = new FileDialog(parent, title, FileDialog.SAVE);
if (defaultName!=null)
fd.setFile(defaultName);
if (defaultDir!=null)
fd.setDirectory(defaultDir);
fd.show();
name = fd.getFile();
dir = fd.getDirectory();
if (name==null)
Macro.abort();
fd.dispose();
if (ij==null)
parent.dispose();
}
/** Returns the selected directory. */
public String getDirectory() {
OpenDialog.lastDir = dir;
return dir;
}
/** Returns the selected file name. */
public String getFileName() {
if (Recorder.record) {
Recorder.recordPath(title, dir+name);
//String cmd = Recorder.getCommandName();
//if (cmd.endsWith("..."))
// cmd = cmd.substring(0, cmd.length()-3);
//Recorder.record("saveAs", cmd, dir+name);
//Recorder.setCommand(null);
}
OpenDialog.lastName = name;
return name;
}
}
|
SaveDialog |
|