JAL-1620 version bump and release notes
[jalview.git] / src / jalview / gui / AnnotationColourChooser.java
index 9b0ce7a..1f86d87 100644 (file)
@@ -1,38 +1,58 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
- * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1)
+ * Copyright (C) 2014 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * 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.
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
  *  
  * 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/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.gui;
 
-import java.util.*;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import javax.swing.*;
-import javax.swing.event.*;
-
-import net.miginfocom.swing.MigLayout;
-
 import jalview.bin.Cache;
-import jalview.datamodel.*;
-import jalview.schemes.*;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.GraphLine;
+import jalview.datamodel.SequenceGroup;
+import jalview.schemes.AnnotationColourGradient;
+import jalview.schemes.ColourSchemeI;
 import jalview.util.MessageManager;
 
+import java.awt.BorderLayout;
+import java.awt.Color;
 import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JColorChooser;
+import javax.swing.JComboBox;
+import javax.swing.JInternalFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.miginfocom.swing.MigLayout;
 
 public class AnnotationColourChooser extends JPanel
 {
@@ -49,8 +69,10 @@ public class AnnotationColourChooser extends JPanel
   jalview.datamodel.AlignmentAnnotation currentAnnotation;
 
   boolean adjusting = false;
+
   /**
-   * enabled if the user is dragging the slider - try to keep updates to a minimun
+   * enabled if the user is dragging the slider - try to keep updates to a
+   * minimun
    */
   boolean sliderDragging = false;
 
@@ -73,15 +95,18 @@ public class AnnotationColourChooser extends JPanel
     frame = new JInternalFrame();
     frame.setContentPane(this);
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
-    Desktop.addInternalFrame(frame, MessageManager.getString("label.colour_by_annotation"), 520, 215);
+    Desktop.addInternalFrame(frame,
+            MessageManager.getString("label.colour_by_annotation"), 520,
+            215);
 
     slider.addChangeListener(new ChangeListener()
     {
+      @Override
       public void stateChanged(ChangeEvent evt)
       {
         if (!adjusting)
         {
-          thresholdValue.setText(((float) slider.getValue() / 1000f) + "");
+          thresholdValue.setText((slider.getValue() / 1000f) + "");
           valueChanged(!sliderDragging);
         }
       }
@@ -91,21 +116,23 @@ public class AnnotationColourChooser extends JPanel
       @Override
       public void mousePressed(MouseEvent e)
       {
-        sliderDragging=true;
+        sliderDragging = true;
         super.mousePressed(e);
       }
 
       @Override
       public void mouseDragged(MouseEvent e)
       {
-        sliderDragging=true;
+        sliderDragging = true;
         super.mouseDragged(e);
       }
+
+      @Override
       public void mouseReleased(MouseEvent evt)
       {
         if (sliderDragging)
         {
-          sliderDragging=false;
+          sliderDragging = false;
           valueChanged(true);
         }
         ap.paintAlignment(true);
@@ -124,21 +151,25 @@ public class AnnotationColourChooser extends JPanel
     if (oldcs instanceof AnnotationColourGradient)
     {
       AnnotationColourGradient acg = (AnnotationColourGradient) oldcs;
-      currentColours.setSelected(acg.isPredefinedColours() || acg.getBaseColour()!=null);
-      if (!acg.isPredefinedColours() && acg.getBaseColour()==null)
+      currentColours.setSelected(acg.isPredefinedColours()
+              || acg.getBaseColour() != null);
+      if (!acg.isPredefinedColours() && acg.getBaseColour() == null)
       {
         minColour.setBackground(acg.getMinColour());
         maxColour.setBackground(acg.getMaxColour());
       }
       seqAssociated.setSelected(acg.isSeqAssociated());
-      
+
     }
     annotations = new JComboBox(
             getAnnotationItems(seqAssociated.isSelected()));
 
-    threshold.addItem(MessageManager.getString("label.threshold_feature_no_thereshold"));
-    threshold.addItem(MessageManager.getString("label.threshold_feature_above_thereshold"));
-    threshold.addItem(MessageManager.getString("label.threshold_feature_below_thereshold"));
+    threshold.addItem(MessageManager
+            .getString("label.threshold_feature_no_thereshold"));
+    threshold.addItem(MessageManager
+            .getString("label.threshold_feature_above_thereshold"));
+    threshold.addItem(MessageManager
+            .getString("label.threshold_feature_below_thereshold"));
 
     if (oldcs instanceof AnnotationColourGradient)
     {
@@ -156,8 +187,7 @@ public class AnnotationColourChooser extends JPanel
         threshold.setSelectedIndex(2);
         break;
       default:
-        throw new Error(
-                "Implementation error: don't know about threshold setting for current AnnotationColourGradient.");
+        throw new Error(MessageManager.getString("error.implementation_error_dont_know_about_thereshold_setting"));
       }
       thresholdIsMin.setSelected(acg.thresholdIsMinMax);
       thresholdValue.setText("" + acg.getAnnotationThreshold());
@@ -201,7 +231,7 @@ public class AnnotationColourChooser extends JPanel
       if (!list.contains(label))
       {
         anmap[list.size()] = i;
-        list.addElement(label);
+        list.add(label);
 
       }
       else
@@ -209,15 +239,16 @@ public class AnnotationColourChooser extends JPanel
         if (!isSeqAssociated)
         {
           anmap[list.size()] = i;
-          list.addElement(label + "_" + (index++));
+          list.add(label + "_" + (index++));
         }
       }
     }
     seqAssociated.setEnabled(enableSeqAss);
-    annmap = new int[list.size()];
-    System.arraycopy(anmap, 0, annmap, 0, annmap.length);
+    this.annmap = new int[list.size()];
+    System.arraycopy(anmap, 0, this.annmap, 0, this.annmap.length);
     return list;
   }
+
   private void setDefaultMinMax()
   {
     minColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MIN",
@@ -245,6 +276,7 @@ public class AnnotationColourChooser extends JPanel
     minColour.setToolTipText(MessageManager.getString("label.min_colour"));
     minColour.addMouseListener(new MouseAdapter()
     {
+      @Override
       public void mousePressed(MouseEvent e)
       {
         if (minColour.isEnabled())
@@ -259,6 +291,7 @@ public class AnnotationColourChooser extends JPanel
     maxColour.setToolTipText(MessageManager.getString("label.max_colour"));
     maxColour.addMouseListener(new MouseAdapter()
     {
+      @Override
       public void mousePressed(MouseEvent e)
       {
         if (maxColour.isEnabled())
@@ -271,6 +304,7 @@ public class AnnotationColourChooser extends JPanel
     ok.setText(MessageManager.getString("action.ok"));
     ok.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         ok_actionPerformed(e);
@@ -280,6 +314,7 @@ public class AnnotationColourChooser extends JPanel
     cancel.setText(MessageManager.getString("action.cancel"));
     cancel.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         cancel_actionPerformed(e);
@@ -287,8 +322,8 @@ public class AnnotationColourChooser extends JPanel
     });
     defColours.setOpaque(false);
     defColours.setText(MessageManager.getString("action.set_defaults"));
-    defColours
-            .setToolTipText(MessageManager.getString("label.reset_min_max_colours_to_defaults"));
+    defColours.setToolTipText(MessageManager
+            .getString("label.reset_min_max_colours_to_defaults"));
     defColours.addActionListener(new ActionListener()
     {
 
@@ -301,6 +336,7 @@ public class AnnotationColourChooser extends JPanel
 
     annotations.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         annotations_actionPerformed(e);
@@ -308,6 +344,7 @@ public class AnnotationColourChooser extends JPanel
     });
     threshold.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         threshold_actionPerformed(e);
@@ -315,6 +352,7 @@ public class AnnotationColourChooser extends JPanel
     });
     thresholdValue.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         thresholdValue_actionPerformed(e);
@@ -330,9 +368,11 @@ public class AnnotationColourChooser extends JPanel
     thresholdValue.setColumns(7);
     currentColours.setFont(JvSwingUtils.getLabelFont());
     currentColours.setOpaque(false);
-    currentColours.setText(MessageManager.getString("label.use_original_colours"));
+    currentColours.setText(MessageManager
+            .getString("label.use_original_colours"));
     currentColours.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         currentColours_actionPerformed(e);
@@ -340,9 +380,11 @@ public class AnnotationColourChooser extends JPanel
     });
     thresholdIsMin.setBackground(Color.white);
     thresholdIsMin.setFont(JvSwingUtils.getLabelFont());
-    thresholdIsMin.setText(MessageManager.getString("label.threshold_minmax"));
+    thresholdIsMin.setText(MessageManager
+            .getString("label.threshold_minmax"));
     thresholdIsMin.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent actionEvent)
       {
         thresholdIsMin_actionPerformed(actionEvent);
@@ -350,7 +392,8 @@ public class AnnotationColourChooser extends JPanel
     });
     seqAssociated.setBackground(Color.white);
     seqAssociated.setFont(JvSwingUtils.getLabelFont());
-    seqAssociated.setText(MessageManager.getString("label.per_sequence_only"));
+    seqAssociated.setText(MessageManager
+            .getString("label.per_sequence_only"));
     seqAssociated.addActionListener(new ActionListener()
     {
 
@@ -456,7 +499,7 @@ public class AnnotationColourChooser extends JPanel
   public void minColour_actionPerformed()
   {
     Color col = JColorChooser.showDialog(this,
-            "Select Colour for Minimum Value", minColour.getBackground());
+            MessageManager.getString("label.select_colour_minimum_value"), minColour.getBackground());
     if (col != null)
     {
       minColour.setBackground(col);
@@ -468,7 +511,7 @@ public class AnnotationColourChooser extends JPanel
   public void maxColour_actionPerformed()
   {
     Color col = JColorChooser.showDialog(this,
-            "Select Colour for Maximum Value", maxColour.getBackground());
+            MessageManager.getString("label.select_colour_maximum_value"), maxColour.getBackground());
     if (col != null)
     {
       maxColour.setBackground(col);
@@ -489,11 +532,11 @@ public class AnnotationColourChooser extends JPanel
             .getSelectedIndex()]];
 
     int aboveThreshold = -1;
-    if (threshold.getSelectedIndex()==1)
+    if (threshold.getSelectedIndex() == 1)
     {
       aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD;
     }
-    else if (threshold.getSelectedIndex()==2)
+    else if (threshold.getSelectedIndex() == 2)
     {
       aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD;
     }
@@ -663,7 +706,7 @@ public class AnnotationColourChooser extends JPanel
     {
       changeColour();
     }
-    currentAnnotation.threshold.value = (float) slider.getValue() / 1000f;
+    currentAnnotation.threshold.value = slider.getValue() / 1000f;
     propagateSeqAssociatedThreshold(updateAllAnnotation);
     ap.paintAlignment(false);
   }
@@ -675,15 +718,26 @@ public class AnnotationColourChooser extends JPanel
     {
       return;
     }
-    // TODO: JAL-1327 only update visible annotation thresholds if allAnnotation is false, since we only need to provide a quick visual indicator
+    // TODO: JAL-1327 only update visible annotation thresholds if allAnnotation
+    // is false, since we only need to provide a quick visual indicator
 
     float thr = currentAnnotation.threshold.value;
     for (int i = 0; i < av.getAlignment().getAlignmentAnnotation().length; i++)
     {
       AlignmentAnnotation aa = av.getAlignment().getAlignmentAnnotation()[i];
-      if (aa.label.equals(currentAnnotation.label))
+      if (aa.label.equals(currentAnnotation.label)
+              && (currentAnnotation.getCalcId() == null ? aa.getCalcId() == null
+                      : currentAnnotation.getCalcId()
+                              .equals(aa.getCalcId())))
       {
-        aa.threshold.value = thr;
+        if (aa.threshold == null)
+        {
+          aa.threshold = new GraphLine(currentAnnotation.threshold);
+        }
+        else
+        {
+          aa.threshold.value = thr;
+        }
       }
     }
   }