CurrentColour must not be accessed by multiple sequence renderers
[jalview.git] / src / jalview / schemes / AnnotationColourGradient.java
index 5825612..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
@@ -34,7 +34,31 @@ public class AnnotationColourGradient extends ResidueColourScheme
     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
@@ -46,8 +70,8 @@ public class AnnotationColourGradient extends ResidueColourScheme
 \r
       aboveAnnotationThreshold = aboveThreshold;\r
 \r
-      if(aboveThreshold!=NO_THRESHOLD && annotation.graphLines!=null)\r
-        annotationThreshold = annotation.getGraphLine(0);\r
+      if(aboveThreshold!=NO_THRESHOLD && annotation.threshold!=null)\r
+        annotationThreshold = annotation.threshold;\r
 \r
       r1 = minColour.getRed();\r
       g1 = minColour.getGreen();\r
@@ -61,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
@@ -80,7 +128,6 @@ public class AnnotationColourGradient extends ResidueColourScheme
      */\r
     public Color findColour(String n)\r
     {\r
-      System.out.println("AnnotationColourGradient findColour(string)");\r
         return Color.red;\r
     }\r
 \r
@@ -94,39 +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( j+1>annotation.annotations.length || 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==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