forked from jasder/antlr
Handle the overwrite confirmation by overriding JFileChooser.approveSelection
This commit is contained in:
parent
df2dcb6631
commit
5fdb01499d
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* [The "BSD license"]
|
||||
* Copyright (c) 2013 Terence Parr
|
||||
* Copyright (c) 2013 Sam Harwell
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package org.antlr.v4.runtime.misc;
|
||||
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sam Harwell
|
||||
*/
|
||||
public class JFileChooserConfirmOverwrite extends JFileChooser {
|
||||
|
||||
public JFileChooserConfirmOverwrite() {
|
||||
setMultiSelectionEnabled(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void approveSelection() {
|
||||
File selectedFile = getSelectedFile();
|
||||
|
||||
if (selectedFile.exists()) {
|
||||
int answer = JOptionPane.showConfirmDialog(this,
|
||||
"Overwrite existing file?",
|
||||
"Overwrite?",
|
||||
JOptionPane.YES_NO_OPTION);
|
||||
if (answer != JOptionPane.YES_OPTION) {
|
||||
// do not call super.approveSelection
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
super.approveSelection();
|
||||
}
|
||||
|
||||
}
|
|
@ -35,6 +35,7 @@ import org.abego.treelayout.TreeForTreeLayout;
|
|||
import org.abego.treelayout.TreeLayout;
|
||||
import org.abego.treelayout.util.DefaultConfiguration;
|
||||
import org.antlr.v4.runtime.misc.GraphicsSupport;
|
||||
import org.antlr.v4.runtime.misc.JFileChooserConfirmOverwrite;
|
||||
import org.antlr.v4.runtime.misc.NotNull;
|
||||
import org.antlr.v4.runtime.misc.Nullable;
|
||||
import org.antlr.v4.runtime.misc.Utils;
|
||||
|
@ -57,6 +58,7 @@ import javax.swing.SwingUtilities;
|
|||
import javax.swing.JFileChooser;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.filechooser.FileFilter;
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
|
@ -364,41 +366,25 @@ public class TreeViewer extends JComponent {
|
|||
|
||||
try {
|
||||
File suggestedFile = generateNonExistingPngFile();
|
||||
JFileChooser fileChooser = new JFileChooser();
|
||||
JFileChooser fileChooser = new JFileChooserConfirmOverwrite();
|
||||
fileChooser.setCurrentDirectory(suggestedFile.getParentFile());
|
||||
fileChooser.setSelectedFile(suggestedFile);
|
||||
|
||||
int returnValue = fileChooser.showSaveDialog(dialog);
|
||||
|
||||
if (returnValue == JFileChooser.APPROVE_OPTION) {
|
||||
|
||||
File pngFile = fileChooser.getSelectedFile();
|
||||
ImageIO.write(bi, "png", pngFile);
|
||||
|
||||
boolean writeFile = true;
|
||||
|
||||
if (pngFile.exists()) {
|
||||
int answer = JOptionPane.showConfirmDialog(dialog,
|
||||
"Overwrite existing file?",
|
||||
"Overwrite?",
|
||||
JOptionPane.YES_NO_OPTION);
|
||||
writeFile = (answer == JOptionPane.YES_OPTION);
|
||||
try {
|
||||
// Try to open the parent folder using the OS' native file manager.
|
||||
Desktop.getDesktop().open(pngFile.getParentFile());
|
||||
}
|
||||
|
||||
if (writeFile) {
|
||||
|
||||
ImageIO.write(bi, "png", pngFile);
|
||||
|
||||
try {
|
||||
// Try to open the parent folder using the OS' native file manager.
|
||||
Desktop.getDesktop().open(pngFile.getParentFile());
|
||||
}
|
||||
catch (Exception ex) {
|
||||
// We could not launch the file manager: just show a popup that we
|
||||
// succeeded in saving the PNG file.
|
||||
JOptionPane.showMessageDialog(dialog, "Saved PNG to: " +
|
||||
pngFile.getAbsolutePath());
|
||||
ex.printStackTrace();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
// We could not launch the file manager: just show a popup that we
|
||||
// succeeded in saving the PNG file.
|
||||
JOptionPane.showMessageDialog(dialog, "Saved PNG to: " +
|
||||
pngFile.getAbsolutePath());
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue