Make sure image save dialog happens in EDT.

This commit is contained in:
bkuker 2014-01-12 21:07:07 -05:00
parent 78ab978180
commit e2f810d3cd

View File

@ -23,6 +23,7 @@ import javax.swing.JMenu;
import javax.swing.JMenuBar; import javax.swing.JMenuBar;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileFilter;
import net.sf.openrocket.database.Databases; import net.sf.openrocket.database.Databases;
@ -151,43 +152,48 @@ public class PhotoFrame extends JFrame {
photoPanel.addImageCallback(new PhotoPanel.ImageCallback() { photoPanel.addImageCallback(new PhotoPanel.ImageCallback() {
@Override @Override
public void performAction(final BufferedImage image) { public void performAction(final BufferedImage image) {
log.info("Got image {} to save...", image); SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
log.info("Got image {} to save...", image);
final FileFilter png = new SimpleFileFilter("PNG Image", ".png"); // TODO final FileFilter png = new SimpleFileFilter("PNG Image", ".png"); // TODO
// Trans // Trans
final JFileChooser chooser = new JFileChooser(); final JFileChooser chooser = new JFileChooser();
chooser.addChoosableFileFilter(png); chooser.addChoosableFileFilter(png);
chooser.setFileFilter(png); chooser.setFileFilter(png);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()) chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences())
.getDefaultDirectory()); .getDefaultDirectory());
final int option = chooser.showSaveDialog(PhotoFrame.this); final int option = chooser.showSaveDialog(PhotoFrame.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; return;
} }
final File file = FileHelper.forceExtension(chooser.getSelectedFile(), "png"); final File file = FileHelper.forceExtension(chooser.getSelectedFile(), "png");
if (file == null) { if (file == null) {
log.info(Markers.USER_MARKER, "User did not select a file"); log.info(Markers.USER_MARKER, "User did not select a file");
return; return;
} }
((SwingPreferences) Application.getPreferences()).setDefaultDirectory(chooser ((SwingPreferences) Application.getPreferences()).setDefaultDirectory(chooser
.getCurrentDirectory()); .getCurrentDirectory());
log.info(Markers.USER_MARKER, "User chose to save image as {}", file); log.info(Markers.USER_MARKER, "User chose to save image as {}", file);
if (FileHelper.confirmWrite(file, PhotoFrame.this)) { if (FileHelper.confirmWrite(file, PhotoFrame.this)) {
try { try {
ImageIO.write(image, "png", file); ImageIO.write(image, "png", file);
} catch (IOException e) { } catch (IOException e) {
throw new Error(e); throw new Error(e);
}
}
} }
} });
} }
}); });
} }
@ -332,7 +338,7 @@ public class PhotoFrame extends JFrame {
pa.setVisible(true); pa.setVisible(true);
GeneralRocketLoader grl = new GeneralRocketLoader(new File( GeneralRocketLoader grl = new GeneralRocketLoader(new File(
"C:/Users/bkuker/git/openrocket/swing/resources/datafiles/examples/A simple model rocket.ork")); "/Users/bkuker/git/openrocket/swing/resources/datafiles/examples/A simple model rocket.ork"));
OpenRocketDocument doc = grl.load(); OpenRocketDocument doc = grl.load();
pa.photoPanel.setDoc(doc); pa.photoPanel.setDoc(doc);
} }