JAL-2015 JAL-1956 rollout of FeatureColourI in place of
[jalview.git] / src / jalview / appletgui / FeatureRenderer.java
index fdc6700..b90b8d3 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.appletgui;
 
-import java.util.*;
-import java.awt.*;
-import java.awt.event.*;
-
-import jalview.datamodel.*;
-import jalview.schemes.AnnotationColourGradient;
-import jalview.schemes.GraduatedColor;
+import jalview.api.FeatureColourI;
+import jalview.datamodel.SearchResults;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.io.FeaturesFile;
+import jalview.schemes.FeatureColour;
+import jalview.schemes.UserColourScheme;
 import jalview.util.MessageManager;
-import jalview.viewmodel.seqfeatures.FeaturesDisplayed;
+import jalview.viewmodel.AlignmentViewport;
+
+import java.awt.BorderLayout;
+import java.awt.Button;
+import java.awt.Choice;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.GridLayout;
+import java.awt.Label;
+import java.awt.Panel;
+import java.awt.ScrollPane;
+import java.awt.TextArea;
+import java.awt.TextField;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.Hashtable;
 
 /**
  * DOCUMENT ME!
@@ -36,7 +55,8 @@ import jalview.viewmodel.seqfeatures.FeaturesDisplayed;
  * @author $author$
  * @version $Revision$
  */
-public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRenderer
+public class FeatureRenderer extends
+        jalview.renderer.seqfeatures.FeatureRenderer
 {
 
   // Holds web links for feature groups and feature types
@@ -47,14 +67,14 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
    * Creates a new FeatureRenderer object.
    * 
    * @param av
-   *          DOCUMENT ME!
    */
-  public FeatureRenderer(AlignViewport av)
+  public FeatureRenderer(AlignmentViewport av)
   {
     super();
     this.av = av;
 
-    setTransparencyAvailable(!System.getProperty("java.version").startsWith("1.1"));
+    setTransparencyAvailable(!System.getProperty("java.version")
+            .startsWith("1.1"));
   }
 
   static String lastFeatureAdded;
@@ -80,49 +100,35 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
     /**
      * render a feature style in the amend feature dialog box
      */
-    public void updateColor(Object newcol)
+    public void updateColor(FeatureColourI newcol)
     {
-
-      Color bg, col = null;
-      GraduatedColor gcol = null;
+      Color bg = null;
       String vlabel = "";
-      if (newcol instanceof Color)
-      {
-        isGcol = false;
-        col = (Color) newcol;
-        gcol = null;
-      }
-      else if (newcol instanceof GraduatedColor)
-      {
-        isGcol = true;
-        gcol = (GraduatedColor) newcol;
-        col = null;
-      }
-      else
-      {
-        throw new Error(MessageManager.getString("error.invalid_colour_for_mycheckbox"));
-      }
-      if (col != null)
+      if (newcol.isSimpleColour())
       {
-        setBackground(bg = col);
+        bg = newcol.getColour();
+        setBackground(bg);
       }
       else
       {
-        if (gcol.getThreshType() != AnnotationColourGradient.NO_THRESHOLD)
+        if (newcol.isAboveThreshold())
         {
-          vlabel += " "
-                  + ((gcol.getThreshType() == AnnotationColourGradient.ABOVE_THRESHOLD) ? "(>)"
-                          : "(<)");
+          vlabel += " (>)";
         }
-        if (isColourByLabel = gcol.isColourByLabel())
+        else if (newcol.isBelowThreshold())
+        {
+          vlabel += " (<)";
+        }
+
+        if (isColourByLabel = newcol.isColourByLabel())
         {
           setBackground(bg = Color.white);
           vlabel += " (by Label)";
         }
         else
         {
-          setBackground(bg = gcol.getMinColor());
-          maxCol = gcol.getMaxColor();
+          setBackground(bg = newcol.getMinColour());
+          maxCol = newcol.getMaxColour();
         }
       }
       label = vlabel;
@@ -135,6 +141,7 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
       super(null);
     }
 
+    @Override
     public void paint(Graphics g)
     {
       Dimension d = getSize();
@@ -197,7 +204,9 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
                 + "-" + features[i].getEnd();
 
         if (features[i].getFeatureGroup() != null)
+        {
           item += " (" + features[i].getFeatureGroup() + ")";
+        }
 
         overlaps.addItem(item);
       }
@@ -206,6 +215,7 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
 
       overlaps.addItemListener(new java.awt.event.ItemListener()
       {
+        @Override
         public void itemStateChanged(java.awt.event.ItemEvent e)
         {
           int index = overlaps.getSelectedIndex();
@@ -225,11 +235,12 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
             ap.seqPanel.seqCanvas.highlightSearchResults(highlight);
 
           }
-          Object col = getFeatureStyle(name.getText());
+          FeatureColourI col = getFeatureStyle(name.getText());
           if (col == null)
           {
-            col = new jalview.schemes.UserColourScheme()
+            Color generatedColour = UserColourScheme
                     .createColourFromName(name.getText());
+            col = new FeatureColour(generatedColour);
           }
 
           colourPanel.updateColor(col);
@@ -302,8 +313,10 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
       }
     }
 
-    String title = newFeatures ? MessageManager.getString("label.create_new_sequence_features")
-            : MessageManager.formatMessage("label.amend_delete_features", new String[]{sequences[0].getName()});
+    String title = newFeatures ? MessageManager
+            .getString("label.create_new_sequence_features")
+            : MessageManager.formatMessage("label.amend_delete_features",
+                    new String[] { sequences[0].getName() });
 
     final JVDialog dialog = new JVDialog(ap.alignFrame, title, true, 385,
             240);
@@ -321,6 +334,7 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
       dialog.buttonPanel.add(deleteButton, 1);
       deleteButton.addActionListener(new ActionListener()
       {
+        @Override
         public void actionPerformed(ActionEvent evt)
         {
           deleteFeature = true;
@@ -334,20 +348,16 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
     start.setText(features[0].getBegin() + "");
     end.setText(features[0].getEnd() + "");
     description.setText(features[0].getDescription());
-    Color col = getColour(name.getText());
-    if (col == null)
-    {
-      col = new jalview.schemes.UserColourScheme()
-              .createColourFromName(name.getText());
-    }
-    Object fcol = getFeatureStyle(name.getText());
+    // lookup (or generate) the feature colour
+    FeatureColourI fcol = getFeatureStyle(name.getText());
     // simply display the feature color in a box
     colourPanel.updateColor(fcol);
     dialog.setResizable(true);
     // TODO: render the graduated color in the box.
-    colourPanel.addMouseListener(new java.awt.event.MouseAdapter()
+    colourPanel.addMouseListener(new MouseAdapter()
     {
-      public void mousePressed(java.awt.event.MouseEvent evt)
+      @Override
+      public void mousePressed(MouseEvent evt)
       {
         if (!colourPanel.isGcol)
         {
@@ -355,15 +365,14 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
         }
         else
         {
-          FeatureColourChooser fcc = new FeatureColourChooser(
-                  ap.alignFrame, name.getText());
+          new FeatureColourChooser(ap.alignFrame, name.getText());
           dialog.transferFocus();
         }
       }
     });
     dialog.setVisible(true);
 
-    jalview.io.FeaturesFile ffile = new jalview.io.FeaturesFile();
+    FeaturesFile ffile = new FeaturesFile();
 
     if (dialog.accept)
     {
@@ -376,7 +385,9 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
     }
 
     if (lastFeatureGroupAdded != null && lastFeatureGroupAdded.length() < 1)
+    {
       lastFeatureGroupAdded = null;
+    }
 
     if (!newFeatures)
     {
@@ -390,7 +401,7 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
         if (!colourPanel.isGcol)
         {
           // update colour - otherwise its already done.
-          setColour(sf.type, colourPanel.getBackground());
+          setColour(sf.type, new FeatureColour(colourPanel.getBackground()));
         }
         try
         {
@@ -401,7 +412,8 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
         }
 
         ffile.parseDescriptionHTML(sf, false);
-        setVisible(lastFeatureAdded); // if user edited name then make sure new type is visible
+        setVisible(lastFeatureAdded); // if user edited name then make sure new
+                                      // type is visible
       }
       if (deleteFeature)
       {
@@ -422,16 +434,16 @@ public class FeatureRenderer extends jalview.renderer.seqfeatures.FeatureRendere
           ffile.parseDescriptionHTML(features[i], false);
         }
 
-        col = colourPanel.getBackground();
+        Color newColour = colourPanel.getBackground();
         // setColour(lastFeatureAdded, fcol);
 
         if (lastFeatureGroupAdded != null)
         {
           setGroupVisibility(lastFeatureGroupAdded, true);
         }
-        setColour(lastFeatureAdded, fcol);
+        setColour(lastFeatureAdded, new FeatureColour(newColour)); // was fcol
         setVisible(lastFeatureAdded);
-        findAllFeatures(false); // different to original applet behaviour ? 
+        findAllFeatures(false); // different to original applet behaviour ?
         // findAllFeatures();
       }
       else