1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
package ij.gui;
import ij.*;
import java.awt.*;
import java.awt.event.*;
/** A modal dialog box with a one line message and
"Yes", "No" and "Cancel" buttons. */
public class YesNoCancelDialog extends Dialog implements ActionListener, KeyListener, WindowListener {
private Button yesB, noB, cancelB;
private boolean cancelPressed, yesPressed;
private boolean firstPaint = true;
public YesNoCancelDialog(Frame parent, String title, String msg) {
this(parent, title, msg, " Yes ", " No ");
}
public YesNoCancelDialog(Frame parent, String title, String msg, String yesLabel, String noLabel) {
super(parent, title, true);
setLayout(new BorderLayout());
Panel panel = new Panel();
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
MultiLineLabel message = new MultiLineLabel(msg);
message.setFont(new Font("Dialog", Font.PLAIN, 14));
panel.add(message);
add("North", panel);
panel = new Panel();
panel.setLayout(new FlowLayout(FlowLayout.RIGHT, 15, 8));
if (msg.startsWith("Save")) {
yesB = new Button(" Save ");
noB = new Button("Don't Save");
cancelB = new Button(" Cancel ");
} else {
yesB = new Button(yesLabel);
noB = new Button(noLabel);
cancelB = new Button(" Cancel ");
}
yesB.addActionListener(this);
noB.addActionListener(this);
cancelB.addActionListener(this);
yesB.addKeyListener(this);
noB.addKeyListener(this);
cancelB.addKeyListener(this);
if (IJ.isWindows() || Prefs.dialogCancelButtonOnRight) {
panel.add(yesB);
panel.add(noB);
panel.add(cancelB);
} else {
panel.add(noB);
panel.add(cancelB);
panel.add(yesB);
}
if (IJ.isMacintosh())
setResizable(false);
add("South", panel);
addWindowListener(this);
GUI.scale(this);
pack();
yesB.requestFocusInWindow();
GUI.centerOnImageJScreen(this);
show();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==cancelB)
cancelPressed = true;
else if (e.getSource()==yesB)
yesPressed = true;
closeDialog();
}
/** Returns true if the user dismissed dialog by pressing "Cancel". */
public boolean cancelPressed() {
return cancelPressed;
}
/** Returns true if the user dismissed dialog by pressing "Yes". */
public boolean yesPressed() {
return yesPressed;
}
void closeDialog() {
dispose();
}
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
IJ.setKeyDown(keyCode);
if (keyCode==KeyEvent.VK_ENTER) {
if (cancelB.isFocusOwner()) {
cancelPressed = true;
closeDialog();
} else if (noB.isFocusOwner()) {
closeDialog();
} else {
yesPressed = true;
closeDialog();
}
} else if (keyCode==KeyEvent.VK_Y||keyCode==KeyEvent.VK_S) {
yesPressed = true;
closeDialog();
} else if (keyCode==KeyEvent.VK_N || keyCode==KeyEvent.VK_D) {
closeDialog();
} else if (keyCode==KeyEvent.VK_ESCAPE||keyCode==KeyEvent.VK_C) {
cancelPressed = true;
closeDialog();
IJ.resetEscape();
}
}
public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
IJ.setKeyUp(keyCode);
}
public void keyTyped(KeyEvent e) {}
public void paint(Graphics g) {
super.paint(g);
if (firstPaint) {
yesB.requestFocus();
firstPaint = false;
}
}
public void windowClosing(WindowEvent e) {
cancelPressed = true;
closeDialog();
}
public void windowActivated(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}
|