update author list in license for (JAL-826)
[jalview.git] / src / jalview / gui / FeatureColourChooser.java
index 1898113..68052d0 100644 (file)
@@ -1,20 +1,19 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
- * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
  * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This file is part of Jalview.
  * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
  */
 package jalview.gui;
 
@@ -30,55 +29,56 @@ import jalview.datamodel.*;
 import jalview.schemes.*;
 import java.awt.Dimension;
 
-public class FeatureColourChooser extends JPanel 
+public class FeatureColourChooser extends JalviewDialog
 {
-  JDialog frame;
-  
-
-//  FeatureSettings fs;
+  // FeatureSettings fs;
   FeatureRenderer fr;
-  
-  
+
   private GraduatedColor cs;
+
   private Object oldcs;
+
   /**
    * 
-   * @return the last colour setting selected by user - either oldcs (which may be a java.awt.Color) or the new GraduatedColor
+   * @return the last colour setting selected by user - either oldcs (which may
+   *         be a java.awt.Color) or the new GraduatedColor
    */
-  public Object getLastColour() {
-    if (cs==null)
+  public Object getLastColour()
+  {
+    if (cs == null)
     {
       return oldcs;
     }
     return cs;
   }
+
   Hashtable oldgroupColours;
-  
+
   AlignmentPanel ap;
-  
 
   boolean adjusting = false;
 
   private float min;
 
   private float max;
+
   String type = null;
+
   public FeatureColourChooser(FeatureRenderer frender, String type)
   {
-    this(frender,false,type);
+    this(frender, false, type);
   }
-    public FeatureColourChooser(FeatureRenderer frender, boolean block, String type)
-    {
+
+  public FeatureColourChooser(FeatureRenderer frender, boolean block,
+          String type)
+  {
     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);
-    //frame.setLayer(JLayeredPane.PALETTE_LAYER);
-    //Desktop.addInternalFrame(frame, "Graduated Feature Colour for "+type, 480, 145);
+    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);
 
     slider.addChangeListener(new ChangeListener()
     {
@@ -95,7 +95,11 @@ public class FeatureColourChooser extends JPanel
     {
       public void mouseReleased(MouseEvent evt)
       {
-        if (ap!=null) { ap.paintAlignment(true); };
+        if (ap != null)
+        {
+          ap.paintAlignment(true);
+        }
+        ;
       }
     });
 
@@ -105,14 +109,18 @@ public class FeatureColourChooser extends JPanel
     oldcs = fr.featureColours.get(type);
     if (oldcs instanceof GraduatedColor)
     {
-      if (((GraduatedColor)oldcs).isAutoScale())
+      if (((GraduatedColor) oldcs).isAutoScale())
       {
         // update the scale
         cs = new GraduatedColor((GraduatedColor) oldcs, min, max);
-      } else {
+      }
+      else
+      {
         cs = new GraduatedColor((GraduatedColor) oldcs);
       }
-    } else {
+    }
+    else
+    {
       // promote original color to a graduated color
       Color bl = Color.black;
       if (oldcs instanceof Color)
@@ -120,13 +128,13 @@ public class FeatureColourChooser extends JPanel
         bl = (Color) oldcs;
       }
       // original colour becomes the maximum colour
-      cs = new GraduatedColor(Color.white,bl,mm[0],mm[1]);
+      cs = new GraduatedColor(Color.white, bl, mm[0], mm[1]);
       cs.setColourByLabel(false);
     }
-    minColour.setBackground(oldminColour=cs.getMinColor());
-    maxColour.setBackground(oldmaxColour=cs.getMaxColor());
+    minColour.setBackground(oldminColour = cs.getMinColor());
+    maxColour.setBackground(oldmaxColour = cs.getMaxColor());
     adjusting = true;
-    
+
     try
     {
       jbInit();
@@ -136,34 +144,23 @@ public class FeatureColourChooser extends JPanel
     // update the gui from threshold state
     thresholdIsMin.setSelected(!cs.isAutoScale());
     colourByLabel.setSelected(cs.isColourByLabel());
-    if (cs.getThreshType()!=AnnotationColourGradient.NO_THRESHOLD)
+    if (cs.getThreshType() != AnnotationColourGradient.NO_THRESHOLD)
     {
       // initialise threshold slider and selector
-      threshold.setSelectedIndex(cs.getThreshType()==AnnotationColourGradient.ABOVE_THRESHOLD ? 1 : 2);
-            slider.setEnabled(true);
+      threshold
+              .setSelectedIndex(cs.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD ? 1
+                      : 2);
+      slider.setEnabled(true);
       thresholdValue.setEnabled(true);
-      threshline = new jalview.datamodel.GraphLine(
-                        (max - min) / 2f,
-                        "Threshold", Color.black);
-      
-    } 
+      threshline = new jalview.datamodel.GraphLine((max - min) / 2f,
+              "Threshold", Color.black);
+
+    }
 
     adjusting = false;
 
     changeColour();
-    if (!block)
-    {
-      new Thread(new Runnable() {
-
-      public void run()
-      {
-        frame.show();
-      }
-      
-    }).start();
-    } else {
-      frame.show();
-    }
+    waitForInput();
   }
 
   public FeatureColourChooser()
@@ -179,8 +176,8 @@ public class FeatureColourChooser extends JPanel
 
   private void jbInit() throws Exception
   {
-    
-    minColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
+
+    minColour.setFont(JvSwingUtils.getLabelFont());
     minColour.setBorder(BorderFactory.createLineBorder(Color.black));
     minColour.setPreferredSize(new Dimension(40, 20));
     minColour.setToolTipText("Minimum Colour");
@@ -194,7 +191,7 @@ public class FeatureColourChooser extends JPanel
         }
       }
     });
-    maxColour.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
+    maxColour.setFont(JvSwingUtils.getLabelFont());
     maxColour.setBorder(BorderFactory.createLineBorder(Color.black));
     maxColour.setPreferredSize(new Dimension(40, 20));
     maxColour.setToolTipText("Maximum Colour");
@@ -210,27 +207,9 @@ public class FeatureColourChooser extends JPanel
     });
     maxColour.setBorder(new LineBorder(Color.black));
     minText.setText("Min:");
-    minText.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
+    minText.setFont(JvSwingUtils.getLabelFont());
     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);
-      }
-    });
+    maxText.setFont(JvSwingUtils.getLabelFont());
     this.setLayout(borderLayout1);
     jPanel2.setLayout(flowLayout1);
     jPanel1.setBackground(Color.white);
@@ -266,7 +245,8 @@ public class FeatureColourChooser extends JPanel
     jPanel3.setBackground(Color.white);
     thresholdIsMin.setBackground(Color.white);
     thresholdIsMin.setText("Threshold is Min/Max");
-    thresholdIsMin.setToolTipText("Toggle between absolute and relative display threshold.");
+    thresholdIsMin
+            .setToolTipText("Toggle between absolute and relative display threshold.");
     thresholdIsMin.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent actionEvent)
@@ -276,7 +256,8 @@ public class FeatureColourChooser extends JPanel
     });
     colourByLabel.setBackground(Color.white);
     colourByLabel.setText("Colour by Label");
-    colourByLabel.setToolTipText("Display features of the same type with a different label using a different colour. (e.g. domain features)");
+    colourByLabel
+            .setToolTipText("Display features of the same type with a different label using a different colour. (e.g. domain features)");
     colourByLabel.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent actionEvent)
@@ -287,8 +268,8 @@ public class FeatureColourChooser extends JPanel
     colourPanel.setBackground(Color.white);
     jPanel1.add(ok);
     jPanel1.add(cancel);
-    jPanel2.add(colourByLabel,java.awt.BorderLayout.WEST);
-    jPanel2.add(colourPanel,java.awt.BorderLayout.EAST);
+    jPanel2.add(colourByLabel, java.awt.BorderLayout.WEST);
+    jPanel2.add(colourPanel, java.awt.BorderLayout.EAST);
     colourPanel.add(minText);
     colourPanel.add(minColour);
     colourPanel.add(maxText);
@@ -302,17 +283,16 @@ public class FeatureColourChooser extends JPanel
     this.add(jPanel2, java.awt.BorderLayout.NORTH);
   }
 
-
   JLabel minText = new JLabel();
+
   JLabel maxText = new JLabel();
+
   JPanel minColour = new JPanel();
 
   JPanel maxColour = new JPanel();
 
-  JButton ok = new JButton();
-
-  JButton cancel = new JButton();
   JPanel colourPanel = new JPanel();
+
   JPanel jPanel1 = new JPanel();
 
   JPanel jPanel2 = new JPanel();
@@ -330,18 +310,18 @@ public class FeatureColourChooser extends JPanel
   JSlider slider = new JSlider();
 
   JTextField thresholdValue = new JTextField(20);
+
   // TODO implement GUI for tolower flag
   // JCheckBox toLower = new JCheckBox();
 
   JCheckBox thresholdIsMin = new JCheckBox();
+
   JCheckBox colourByLabel = new JCheckBox();
 
   private GraphLine threshline;
 
-
   private Color oldmaxColour;
 
-
   private Color oldminColour;
 
   public void minColour_actionPerformed()
@@ -351,6 +331,7 @@ public class FeatureColourChooser extends JPanel
     if (col != null)
     {
       minColour.setBackground(col);
+      minColour.setForeground(col);
     }
     minColour.repaint();
     changeColour();
@@ -363,6 +344,7 @@ public class FeatureColourChooser extends JPanel
     if (col != null)
     {
       maxColour.setBackground(col);
+      maxColour.setForeground(col);
     }
     maxColour.repaint();
     changeColour();
@@ -376,7 +358,6 @@ public class FeatureColourChooser extends JPanel
       return;
     }
 
-
     int aboveThreshold = AnnotationColourGradient.NO_THRESHOLD;
     if (threshold.getSelectedItem().equals("Above Threshold"))
     {
@@ -385,19 +366,22 @@ public class FeatureColourChooser extends JPanel
     else if (threshold.getSelectedItem().equals("Below Threshold"))
     {
       aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD;
-    } 
+    }
 
     slider.setEnabled(true);
     thresholdValue.setEnabled(true);
-    
+
     GraduatedColor acg;
     if (cs.isColourByLabel())
-      {
-        acg = new GraduatedColor(oldminColour, oldmaxColour, min, max);
-      } else {
-        acg = new GraduatedColor(oldminColour=minColour.getBackground(), oldmaxColour=maxColour.getBackground(), min, max);
-        
-      }
+    {
+      acg = new GraduatedColor(oldminColour, oldmaxColour, min, max);
+    }
+    else
+    {
+      acg = new GraduatedColor(oldminColour = minColour.getBackground(),
+              oldmaxColour = maxColour.getBackground(), min, max);
+
+    }
 
     if (aboveThreshold == AnnotationColourGradient.NO_THRESHOLD)
     {
@@ -410,9 +394,8 @@ public class FeatureColourChooser extends JPanel
             && threshline == null)
     {
       // todo visual indication of feature threshold
-      threshline = new jalview.datamodel.GraphLine(
-                      (max - min) / 2f,
-                      "Threshold", Color.black);
+      threshline = new jalview.datamodel.GraphLine((max - min) / 2f,
+              "Threshold", Color.black);
     }
 
     if (aboveThreshold != AnnotationColourGradient.NO_THRESHOLD)
@@ -420,8 +403,7 @@ public class FeatureColourChooser extends JPanel
       adjusting = true;
       acg.setThresh(threshline.value);
 
-      float range = max * 1000f
-              - min * 1000f;
+      float range = max * 1000f - min * 1000f;
 
       slider.setMinimum((int) (min * 1000));
       slider.setMaximum((int) (max * 1000));
@@ -435,16 +417,21 @@ public class FeatureColourChooser extends JPanel
     }
 
     acg.setThreshType(aboveThreshold);
-    if (thresholdIsMin.isSelected() && aboveThreshold != AnnotationColourGradient.NO_THRESHOLD)
+    if (thresholdIsMin.isSelected()
+            && aboveThreshold != AnnotationColourGradient.NO_THRESHOLD)
     {
       acg.setAutoScaled(false);
-      if (aboveThreshold==AnnotationColourGradient.ABOVE_THRESHOLD)
-      { 
+      if (aboveThreshold == AnnotationColourGradient.ABOVE_THRESHOLD)
+      {
         acg = new GraduatedColor(acg, threshline.value, max);
-      } else { 
-        acg = new GraduatedColor(acg, min,threshline.value);
       }
-    } else {
+      else
+      {
+        acg = new GraduatedColor(acg, min, threshline.value);
+      }
+    }
+    else
+    {
       acg.setAutoScaled(true);
     }
     acg.setColourByLabel(colourByLabel.isSelected());
@@ -453,46 +440,42 @@ public class FeatureColourChooser extends JPanel
       maxColour.setEnabled(false);
       minColour.setEnabled(false);
       maxColour.setBackground(this.getBackground());
+      maxColour.setForeground(this.getBackground());
       minColour.setBackground(this.getBackground());
-    } else {
+      minColour.setForeground(this.getBackground());
+
+    }
+    else
+    {
       maxColour.setEnabled(true);
       minColour.setEnabled(true);
       maxColour.setBackground(oldmaxColour);
       minColour.setBackground(oldminColour);
+      maxColour.setForeground(oldmaxColour);
+      minColour.setForeground(oldminColour);
     }
-    fr.featureColours.put(type,acg);
+    fr.featureColours.put(type, acg);
     cs = acg;
     ap.paintAlignment(false);
   }
-  private void raiseClosed() {
-    if (this.colourEditor!=null)
+
+  protected void raiseClosed()
+  {
+    if (this.colourEditor != null)
     {
       colourEditor.actionPerformed(new ActionEvent(this, 0, "CLOSED"));
     }
   }
-  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()
@@ -541,16 +524,20 @@ public class FeatureColourChooser extends JPanel
   {
     changeColour();
   }
+
   public void colourByLabel_actionPerformed(ActionEvent actionEvent)
   {
     changeColour();
   }
-  ActionListener colourEditor=null;
+
+  ActionListener colourEditor = null;
+
   public void addActionListener(ActionListener graduatedColorEditor)
   {
-    if (colourEditor!=null)
+    if (colourEditor != null)
     {
-      System.err.println("IMPLEMENTATION ISSUE: overwriting action listener for FeatureColourChooser");
+      System.err
+              .println("IMPLEMENTATION ISSUE: overwriting action listener for FeatureColourChooser");
     }
     colourEditor = graduatedColorEditor;
   }