refactored popup dialog boilerplate code to own class
authorjprocter <jprocter@compbio.dundee.ac.uk>
Mon, 29 Aug 2011 14:35:56 +0000 (15:35 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Mon, 29 Aug 2011 14:35:56 +0000 (15:35 +0100)
src/jalview/gui/FeatureColourChooser.java
src/jalview/gui/JalviewDialog.java [new file with mode: 0644]

index e9a88ac..9943df9 100644 (file)
@@ -29,10 +29,8 @@ import jalview.datamodel.*;
 import jalview.schemes.*;
 import java.awt.Dimension;
 
-public class FeatureColourChooser extends JPanel
+public class FeatureColourChooser extends JalviewDialog
 {
-  JDialog frame;
-
   // FeatureSettings fs;
   FeatureRenderer fr;
 
@@ -77,12 +75,7 @@ public class FeatureColourChooser extends JPanel
     this.fr = frender;
     this.type = type;
     ap = fr.ap;
-    frame = new JDialog(Desktop.instance, true);
-    frame.setTitle("Graduated Feature Colour for " + type);
-    Rectangle deskr = Desktop.instance.getBounds();
-    frame.setBounds(new Rectangle((int) (deskr.getCenterX() - 240),
-            (int) (deskr.getCenterY() - 92), 480, 185));
-    frame.setContentPane(this);
+    initDialogFrame(this,true, block,"Graduated Feature Colour for " + type, 480, 185);
     // frame.setLayer(JLayeredPane.PALETTE_LAYER);
     // Desktop.addInternalFrame(frame, "Graduated Feature Colour for "+type,
     // 480, 145);
@@ -167,22 +160,7 @@ public class FeatureColourChooser extends JPanel
     adjusting = false;
 
     changeColour();
-    if (!block)
-    {
-      new Thread(new Runnable()
-      {
-
-        public void run()
-        {
-          frame.show();
-        }
-
-      }).start();
-    }
-    else
-    {
-      frame.show();
-    }
+    waitForInput();
   }
 
   public FeatureColourChooser()
@@ -232,24 +210,6 @@ public class FeatureColourChooser extends JPanel
     minText.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
     maxText.setText("Max:");
     maxText.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
-    ok.setOpaque(false);
-    ok.setText("OK");
-    ok.addActionListener(new ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        ok_actionPerformed(e);
-      }
-    });
-    cancel.setOpaque(false);
-    cancel.setText("Cancel");
-    cancel.addActionListener(new ActionListener()
-    {
-      public void actionPerformed(ActionEvent e)
-      {
-        cancel_actionPerformed(e);
-      }
-    });
     this.setLayout(borderLayout1);
     jPanel2.setLayout(flowLayout1);
     jPanel1.setBackground(Color.white);
@@ -331,10 +291,6 @@ public class FeatureColourChooser extends JPanel
 
   JPanel maxColour = new JPanel();
 
-  JButton ok = new JButton();
-
-  JButton cancel = new JButton();
-
   JPanel colourPanel = new JPanel();
 
   JPanel jPanel1 = new JPanel();
@@ -503,7 +459,7 @@ public class FeatureColourChooser extends JPanel
     ap.paintAlignment(false);
   }
 
-  private void raiseClosed()
+  protected void raiseClosed()
   {
     if (this.colourEditor != null)
     {
@@ -511,29 +467,15 @@ public class FeatureColourChooser extends JPanel
     }
   }
 
-  public void ok_actionPerformed(ActionEvent e)
+  public void okPressed()
   {
     changeColour();
-    try
-    {
-      frame.dispose();
-      raiseClosed();
-    } catch (Exception ex)
-    {
-    }
   }
 
-  public void cancel_actionPerformed(ActionEvent e)
+
+  public void cancelPressed()
   {
     reset();
-    try
-    {
-      frame.dispose();
-      // frame.setClosed(true);
-      raiseClosed();
-    } catch (Exception ex)
-    {
-    }
   }
 
   void reset()
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();
+  
+}