--- /dev/null
+package jalview.gui;
+
+import java.awt.Container;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+
+/**
+ * Boilerplate dialog class. Implements basic functionality necessary for model blocking/non-blocking dialogs
+ * with an OK and Cancel button ready to add to the content pane.
+ * @author jimp
+ *
+ */
+public abstract class JalviewDialog extends JPanel
+{
+
+ protected JDialog frame;
+ protected JButton ok = new JButton();
+ protected JButton cancel = new JButton();
+ boolean block=false;
+
+ public void waitForInput()
+ {
+ if (!block)
+ {
+ new Thread(new Runnable()
+ {
+
+ public void run()
+ {
+ frame.show();
+ }
+
+ }).start();
+ }
+ else
+ {
+ frame.show();
+ }
+ }
+
+ protected void initDialogFrame(Container content,
+ boolean modal, boolean block, String title, int width, int height)
+ {
+
+ frame = new JDialog(Desktop.instance, true);
+ frame.setTitle(title);
+ if (Desktop.instance!=null)
+ {
+ Rectangle deskr = Desktop.instance.getBounds();
+ frame.setBounds(new Rectangle((int) (deskr.getCenterX() - width/2),
+ (int) (deskr.getCenterY() - height/2), width, height));
+ } else {
+ frame.setSize(width,height);
+ }
+ frame.setContentPane(content);
+ this.block = block;
+
+ ok.setOpaque(false);
+ ok.setText("OK");
+ ok.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ okPressed();
+ closeDialog();
+ }
+ });
+ cancel.setOpaque(false);
+ cancel.setText("Cancel");
+ cancel.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ cancelPressed();
+ closeDialog();
+ }
+ });
+
+ }
+ /**
+ * clean up and raise the 'dialog closed' event by calling raiseClosed
+ */
+ protected void closeDialog()
+ {
+ try
+ {
+ frame.dispose();
+ raiseClosed();
+ } catch (Exception ex)
+ {
+ }
+ }
+
+ protected abstract void raiseClosed();
+ protected abstract void okPressed();
+ protected abstract void cancelPressed();
+
+}