CurrentColour must not be accessed by multiple sequence renderers
[jalview.git] / src / jalview / schemes / AnnotationColourGradient.java
index d91ced5..8367cad 100755 (executable)
@@ -1,6 +1,6 @@
 /*\r
 * Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
 *\r
 * This program is free software; you can redistribute it and/or\r
 * modify it under the terms of the GNU General Public License\r
@@ -24,22 +24,55 @@ import jalview.datamodel.*;
 \r
 public class AnnotationColourGradient extends ResidueColourScheme\r
 {\r
+    public static int NO_THRESHOLD = -1;\r
+    public static int BELOW_THRESHOLD = 0;\r
+    public static int ABOVE_THRESHOLD = 1;\r
+\r
     AlignmentAnnotation annotation;\r
-    boolean aboveAnnotationThreshold = false;\r
+    int aboveAnnotationThreshold = -1;\r
+\r
+    GraphLine annotationThreshold;\r
 \r
     float r1, g1, b1, rr, gg, bb, dr, dg, db;\r
-    float range;\r
+    float range = 0;\r
+\r
+    ColourSchemeI colourScheme;\r
+\r
+    /**\r
+     * Creates a new AnnotationColourGradient object.\r
+     */\r
+    public AnnotationColourGradient(AlignmentAnnotation annotation,\r
+                                    ColourSchemeI originalColour,\r
+                                    int aboveThreshold)\r
+    {\r
+      if(originalColour instanceof AnnotationColourGradient)\r
+      {\r
+        colourScheme = ((AnnotationColourGradient)originalColour).colourScheme;\r
+      }\r
+      else\r
+        colourScheme = originalColour;\r
+\r
+      this.annotation = annotation;\r
+\r
+      aboveAnnotationThreshold = aboveThreshold;\r
+\r
+      if(aboveThreshold!=NO_THRESHOLD && annotation.threshold!=null)\r
+        annotationThreshold = annotation.threshold;\r
+    }\r
 \r
     /**\r
      * Creates a new AnnotationColourGradient object.\r
      */\r
     public AnnotationColourGradient(AlignmentAnnotation annotation,\r
-        Color minColour, Color maxColour, boolean aboveThreshold)\r
+        Color minColour, Color maxColour, int aboveThreshold)\r
     {\r
       this.annotation = annotation;\r
 \r
       aboveAnnotationThreshold = aboveThreshold;\r
 \r
+      if(aboveThreshold!=NO_THRESHOLD && annotation.threshold!=null)\r
+        annotationThreshold = annotation.threshold;\r
+\r
       r1 = minColour.getRed();\r
       g1 = minColour.getGreen();\r
       b1 = minColour.getBlue();\r
@@ -52,6 +85,30 @@ public class AnnotationColourGradient extends ResidueColourScheme
 \r
     }\r
 \r
+\r
+    public String getAnnotation()\r
+    {\r
+      return annotation.label;\r
+    }\r
+\r
+    public int getAboveThreshold()\r
+    {\r
+      return aboveAnnotationThreshold;\r
+    }\r
+\r
+    public float getAnnotationThreshold()\r
+    {\r
+      if(annotationThreshold==null)\r
+        return 0;\r
+      else\r
+        return annotationThreshold.value;\r
+    }\r
+\r
+    public ColourSchemeI getBaseColour()\r
+    {\r
+      return colourScheme;\r
+    }\r
+\r
     public Color getMinColour()\r
     {\r
       return new Color( (int) r1, (int) g1, (int) b1);\r
@@ -71,8 +128,7 @@ public class AnnotationColourGradient extends ResidueColourScheme
      */\r
     public Color findColour(String n)\r
     {\r
-      System.out.println("AnnotationColourGradient findColour(string)");\r
-        return Color.RED;\r
+        return Color.red;\r
     }\r
 \r
     /**\r
@@ -85,38 +141,45 @@ public class AnnotationColourGradient extends ResidueColourScheme
      */\r
     public Color findColour(String n, int j)\r
     {\r
+        Color currentColour = Color.white;\r
+\r
         if ((threshold == 0) || aboveThreshold(n, j))\r
         {\r
-          if(annotation.annotations[j]==null)\r
-            currentColour = Color.white;\r
-          else\r
+          if( j<annotation.annotations.length\r
+              && annotation.annotations[j]!=null\r
+              && !jalview.util.Comparison.isGap(n.charAt(0)))\r
           {\r
-            if(!aboveAnnotationThreshold || (annotation.graphLines!=null\r
-               && annotation.annotations[j].value>=annotation.getGraphLine(0).value))\r
+            if(  aboveAnnotationThreshold==NO_THRESHOLD\r
+               || (annotationThreshold!=null && aboveAnnotationThreshold==ABOVE_THRESHOLD && annotation.annotations[j].value>=annotationThreshold.value)\r
+               || (annotationThreshold!=null && aboveAnnotationThreshold==BELOW_THRESHOLD && annotation.annotations[j].value<=annotationThreshold.value))\r
             {\r
+              if(colourScheme!=null)\r
+              {\r
+                currentColour = colourScheme.findColour(n, j);\r
+              }\r
+              else if(range!=0)\r
+              {\r
                 dr = rr *\r
-                     ((annotation.annotations[j].value-annotation.graphMin) / range )\r
-                     +r1;\r
+                    ( (annotation.annotations[j].value - annotation.graphMin) /\r
+                     range)\r
+                    + r1;\r
                 dg = gg *\r
-                     ((annotation.annotations[j].value-annotation.graphMin)  / range )\r
-                     +g1;\r
+                    ( (annotation.annotations[j].value - annotation.graphMin) /\r
+                     range)\r
+                    + g1;\r
                 db = bb *\r
-                     ((annotation.annotations[j].value-annotation.graphMin) / range )\r
-                     +b1;\r
+                    ( (annotation.annotations[j].value - annotation.graphMin) /\r
+                     range)\r
+                    + b1;\r
 \r
-                 currentColour = new Color( (int) dr, (int) dg, (int) db);\r
+                currentColour = new Color( (int) dr, (int) dg, (int) db);\r
+              }\r
             }\r
-            else\r
-              currentColour = Color.white;\r
           }\r
         }\r
-        else\r
-        {\r
-            return Color.white;\r
-        }\r
 \r
         if(conservationColouring)\r
-         applyConservation(j);\r
+         applyConservation(currentColour, j);\r
 \r
        return currentColour;\r
     }\r