refactored popup dialog boilerplate code to own class
[jalview.git] / src / jalview / gui / JalviewDialog.java
diff --git a/src/jalview/gui/JalviewDialog.java b/src/jalview/gui/JalviewDialog.java
new file mode 100644 (file)
index 0000000..4630cfc
--- /dev/null
@@ -0,0 +1,103 @@
+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();
+  
+}