/*\r
-* Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2005 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
-* as published by the Free Software Foundation; either version 2\r
-* of the License, or (at your option) any later version.\r
-*\r
-* This program is distributed in the hope that it will be useful,\r
-* but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
-* GNU General Public License for more details.\r
-*\r
-* You should have received a copy of the GNU General Public License\r
-* along with this program; if not, write to the Free Software\r
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\r
-*/\r
+ * Jalview - A Sequence Alignment Editor and Viewer\r
+ * Copyright (C) 2007 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
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\r
+ */\r
package jalview.schemes;\r
\r
import java.awt.*;\r
\r
import jalview.datamodel.*;\r
\r
-public class AnnotationColourGradient extends ResidueColourScheme\r
+public class AnnotationColourGradient\r
+ 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
+ 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
- int aboveAnnotationThreshold = -1;\r
+ AlignmentAnnotation annotation;\r
+ int aboveAnnotationThreshold = -1;\r
\r
- GraphLine annotationThreshold;\r
+ GraphLine annotationThreshold;\r
\r
- float r1, g1, b1, rr, gg, bb, dr, dg, db;\r
- float range;\r
+ float r1, g1, b1, rr, gg, bb, dr, dg, db;\r
+ float range = 0;\r
\r
- /**\r
- * Creates a new AnnotationColourGradient object.\r
- */\r
- public AnnotationColourGradient(AlignmentAnnotation annotation,\r
- Color minColour, Color maxColour, int aboveThreshold)\r
- {\r
- this.annotation = annotation;\r
+ ColourSchemeI colourScheme;\r
\r
- aboveAnnotationThreshold = aboveThreshold;\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
+ {\r
+ colourScheme = originalColour;\r
+ }\r
\r
- if(aboveThreshold!=NO_THRESHOLD && annotation.threshold!=null)\r
- annotationThreshold = annotation.threshold;\r
+ this.annotation = annotation;\r
\r
- r1 = minColour.getRed();\r
- g1 = minColour.getGreen();\r
- b1 = minColour.getBlue();\r
+ aboveAnnotationThreshold = aboveThreshold;\r
\r
- rr = maxColour.getRed() - r1;\r
- gg = maxColour.getGreen() - g1;\r
- bb = maxColour.getBlue() - b1;\r
+ if (aboveThreshold != NO_THRESHOLD && annotation.threshold != null)\r
+ {\r
+ annotationThreshold = annotation.threshold;\r
+ }\r
+ }\r
\r
- range = annotation.graphMax - annotation.graphMin;\r
+ /**\r
+ * Creates a new AnnotationColourGradient object.\r
+ */\r
+ public AnnotationColourGradient(AlignmentAnnotation annotation,\r
+ Color minColour, Color maxColour,\r
+ int aboveThreshold)\r
+ {\r
+ this.annotation = annotation;\r
\r
- }\r
+ aboveAnnotationThreshold = aboveThreshold;\r
\r
- public Color getMinColour()\r
+ if (aboveThreshold != NO_THRESHOLD && annotation.threshold != null)\r
{\r
- return new Color( (int) r1, (int) g1, (int) b1);\r
+ annotationThreshold = annotation.threshold;\r
}\r
\r
- public Color getMaxColour()\r
+ r1 = minColour.getRed();\r
+ g1 = minColour.getGreen();\r
+ b1 = minColour.getBlue();\r
+\r
+ rr = maxColour.getRed() - r1;\r
+ gg = maxColour.getGreen() - g1;\r
+ bb = maxColour.getBlue() - b1;\r
+\r
+ range = annotation.graphMax - annotation.graphMin;\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
{\r
- return new Color( (int) (r1 + rr), (int) (g1 + gg), (int) (b1 + bb));\r
+ return 0;\r
}\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param n DOCUMENT ME!\r
- *\r
- * @return DOCUMENT ME!\r
- */\r
- public Color findColour(String n)\r
+ else\r
{\r
- System.out.println("AnnotationColourGradient findColour(string)");\r
- return Color.red;\r
+ return annotationThreshold.value;\r
}\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param n DOCUMENT ME!\r
- * @param j DOCUMENT ME!\r
- *\r
- * @return DOCUMENT ME!\r
- */\r
- public Color findColour(String n, int j)\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
+ }\r
+\r
+ public Color getMaxColour()\r
+ {\r
+ return new Color( (int) (r1 + rr), (int) (g1 + gg), (int) (b1 + bb));\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param n DOCUMENT ME!\r
+ *\r
+ * @return DOCUMENT ME!\r
+ */\r
+ public Color findColour(char c)\r
+ {\r
+ return Color.red;\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param n DOCUMENT ME!\r
+ * @param j DOCUMENT ME!\r
+ *\r
+ * @return DOCUMENT ME!\r
+ */\r
+ public Color findColour(char c, int j)\r
+ {\r
+ Color currentColour = Color.white;\r
+\r
+ if ( (threshold == 0) || aboveThreshold(c, j))\r
{\r
- if ((threshold == 0) || aboveThreshold(n, j))\r
+ if (j < annotation.annotations.length\r
+ && annotation.annotations[j] != null\r
+ && !jalview.util.Comparison.isGap(c))\r
+ {\r
+ if (aboveAnnotationThreshold == NO_THRESHOLD\r
+ ||\r
+ (annotationThreshold != null && aboveAnnotationThreshold == ABOVE_THRESHOLD &&\r
+ annotation.annotations[j].value >= annotationThreshold.value)\r
+ ||\r
+ (annotationThreshold != null && aboveAnnotationThreshold == BELOW_THRESHOLD &&\r
+ annotation.annotations[j].value <= annotationThreshold.value))\r
{\r
- if( j+1>annotation.annotations.length || annotation.annotations[j]==null)\r
- currentColour = Color.white;\r
- else\r
+ if (colourScheme != null)\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
- dr = rr *\r
- ((annotation.annotations[j].value-annotation.graphMin) / range )\r
- +r1;\r
- dg = gg *\r
- ((annotation.annotations[j].value-annotation.graphMin) / range )\r
- +g1;\r
- db = bb *\r
- ((annotation.annotations[j].value-annotation.graphMin) / range )\r
- +b1;\r
-\r
- currentColour = new Color( (int) dr, (int) dg, (int) db);\r
- }\r
- else\r
- currentColour = Color.white;\r
+ currentColour = colourScheme.findColour(c, j);\r
+ }\r
+ else if (range != 0)\r
+ {\r
+ dr = rr *\r
+ ( (annotation.annotations[j].value - annotation.graphMin) /\r
+ range)\r
+ + r1;\r
+ dg = gg *\r
+ ( (annotation.annotations[j].value - annotation.graphMin) /\r
+ range)\r
+ + g1;\r
+ db = bb *\r
+ ( (annotation.annotations[j].value - annotation.graphMin) /\r
+ range)\r
+ + b1;\r
+\r
+ currentColour = new Color( (int) dr, (int) dg, (int) db);\r
}\r
}\r
- else\r
- {\r
- return Color.white;\r
- }\r
-\r
- if(conservationColouring)\r
- applyConservation(j);\r
+ }\r
+ }\r
\r
- return currentColour;\r
+ if (conservationColouring)\r
+ {\r
+ currentColour = applyConservation(currentColour, j);\r
}\r
+\r
+ return currentColour;\r
+ }\r
}\r