X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FGraduatedColor.java;h=665a78b77ab5227843ff1d87239c3ba7b2b650a7;hb=b2f9a8d7bce642ff4011bc6d49e02bb0569fbb11;hp=b1349684d850ecbae0c6fe7b44effdcee3502ace;hpb=7f6ab29d44b73a73192cf4382e38633eae5d95cd;p=jalview.git
diff --git a/src/jalview/schemes/GraduatedColor.java b/src/jalview/schemes/GraduatedColor.java
index b134968..665a78b 100644
--- a/src/jalview/schemes/GraduatedColor.java
+++ b/src/jalview/schemes/GraduatedColor.java
@@ -1,5 +1,20 @@
-/**
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
+ * 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.
+ *
+ * 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 .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.schemes;
@@ -8,53 +23,69 @@ import jalview.datamodel.SequenceFeature;
import java.awt.Color;
/**
- * Value and/or thresholded colour scale used for colouring by annotation and feature score
+ * Value and/or thresholded colour scale used for colouring by annotation and
+ * feature score
+ *
* @author JimP
- *
+ *
*/
public class GraduatedColor
{
- int thresholdState = AnnotationColourGradient.NO_THRESHOLD; // or ABOVE_THRESHOLD or BELOW_THRESHOLD
- float lr,lg,lb,dr,dg,db;
+ int thresholdState = AnnotationColourGradient.NO_THRESHOLD; // or
+ // ABOVE_THRESHOLD
+ // or
+ // BELOW_THRESHOLD
+
+ float lr, lg, lb, dr, dg, db;
+
/**
- * linear scaling parameters, base, minimum colour threshold, range of linear scale from lower to upper
+ * linear scaling parameters, base, minimum colour threshold, range of linear
+ * scale from lower to upper
*/
- float base,range,thrsh;
+ float base, range, thrsh;
+
/**
* when true, colour from u to u-d rather than u to u+d
*/
- boolean tolow=false;
+ boolean tolow = false;
+
/**
- * when false, min/max range has been manually set so should not be dynamically adjusted.
+ * when false, min/max range has been manually set so should not be
+ * dynamically adjusted.
*/
boolean autoScale = true;
+
/**
* construct a graduatedColor object from simple parameters
+ *
* @param low
* @param high
* @param min
* @param max
- * color low->high from min->max
+ * color low->high from min->max
*/
- public GraduatedColor(Color low,Color high, float min,float max)
+ public GraduatedColor(Color low, Color high, float min, float max)
{
thrsh = Float.NaN;
- tolow = min>=max;
- lr = low.getRed()/255f;
- lg = low.getGreen()/255f;
- lb = low.getBlue()/255f;
- dr = (high.getRed()/255f)-lr;
- dg = (high.getGreen()/255f)-lg;
- db = (high.getBlue()/255f)-lb;
+ tolow = min >= max;
+ lr = low.getRed() / 255f;
+ lg = low.getGreen() / 255f;
+ lb = low.getBlue() / 255f;
+ dr = (high.getRed() / 255f) - lr;
+ dg = (high.getGreen() / 255f) - lg;
+ db = (high.getBlue() / 255f) - lb;
if (tolow)
{
base = max;
- range = min-max;
- } else {
+ range = min - max;
+ }
+ else
+ {
base = min;
- range = max-min;
+ range = max - min;
}
}
+
public GraduatedColor(GraduatedColor oldcs)
{
lr = oldcs.lr;
@@ -69,9 +100,12 @@ public class GraduatedColor
thresholdState = oldcs.thresholdState;
thrsh = oldcs.thrsh;
autoScale = oldcs.autoScale;
+ colourByLabel = oldcs.colourByLabel;
}
+
/**
* make a new gradient from an old one with a different scale range
+ *
* @param oldcs
* @param min
* @param max
@@ -81,109 +115,182 @@ public class GraduatedColor
this(oldcs);
updateBounds(min, max);
}
+
public Color getMinColor()
{
- return new Color(lr,lg,lb);
+ return new Color(lr, lg, lb);
}
+
public Color getMaxColor()
{
- return new Color(lr+dr,lg+dg,lb+db);
+ return new Color(lr + dr, lg + dg, lb + db);
}
+
+ /**
+ *
+ * @return true if original min/max scale was from high to low
+ */
public boolean getTolow()
{
return tolow;
}
+
public void setTolow(boolean tolower)
{
tolow = tolower;
}
+
public boolean isColored(SequenceFeature feature)
{
float val = feature.getScore();
- if (val==Float.NaN)
+ if (val == Float.NaN)
{
return true;
}
- if (this.thresholdState==AnnotationColourGradient.NO_THRESHOLD)
+ if (this.thresholdState == AnnotationColourGradient.NO_THRESHOLD)
{
return true;
}
- if (this.thrsh==Float.NaN)
+ if (this.thrsh == Float.NaN)
{
return true;
}
- boolean rtn = thresholdState==AnnotationColourGradient.ABOVE_THRESHOLD;
- if (val<=thrsh)
+ boolean rtn = thresholdState == AnnotationColourGradient.ABOVE_THRESHOLD;
+ if (val <= thrsh)
+ {
+ return !rtn; // ? !tolow : tolow;
+ }
+ else
{
- return !rtn; // ? !tolow : tolow;
- } else {
- return rtn; // ? tolow : !tolow;
+ return rtn; // ? tolow : !tolow;
}
}
+
+ /**
+ * default implementor of a getColourFromString method. TODO: abstract an
+ * interface enabling pluggable colour from string
+ */
+ private UserColourScheme ucs = null;
+
+ private boolean colourByLabel = false;
+
+ /**
+ *
+ * @return true if colourByLabel style is set
+ */
+ public boolean isColourByLabel()
+ {
+ return colourByLabel;
+ }
+
+ /**
+ * @param colourByLabel
+ * the colourByLabel to set
+ */
+ public void setColourByLabel(boolean colourByLabel)
+ {
+ this.colourByLabel = colourByLabel;
+ }
+
public Color findColor(SequenceFeature feature)
- {
- if (range==0.0)
+ {
+ if (colourByLabel)
+ {
+ // TODO: allow user defined feature label colourschemes. Colour space is
+ // {type,regex,%anytype%}x{description string, regex, keyword}
+ if (ucs == null)
+ {
+ ucs = new UserColourScheme();
+ }
+ return ucs.createColourFromName(feature.getDescription());
+ }
+ if (range == 0.0)
{
return getMaxColor();
}
float scr = feature.getScore();
- if (scr==Float.NaN)
+ if (scr == Float.NaN)
{
return getMinColor();
}
- float scl = (scr-base)/range;
- if (tolow) { scl = -scl; }
- if (scl<0f) { scl = 0f; }
- if (scl>1f) { scl = 1f; }
- return new Color(lr+scl*dr,lg+scl*dg,lb+scl*db);
+ float scl = (scr - base) / range;
+ if (tolow)
+ {
+ scl = -scl;
+ }
+ if (scl < 0f)
+ {
+ scl = 0f;
+ }
+ if (scl > 1f)
+ {
+ scl = 1f;
+ }
+ return new Color(lr + scl * dr, lg + scl * dg, lb + scl * db);
}
+
public void setThresh(float value)
{
thrsh = value;
}
- public float getThresh() {
+
+ public float getThresh()
+ {
return thrsh;
}
+
public void setThreshType(int aboveThreshold)
{
thresholdState = aboveThreshold;
}
+
public int getThreshType()
{
return thresholdState;
}
+
public float getMax()
{
// regenerate the original values passed in to the constructor
return (tolow) ? base : (base + range);
}
+
public float getMin()
{
// regenerate the original value passed in to the constructor
- return (tolow) ? (base+range) : base;
+ return (tolow) ? (base + range) : base;
}
+
public boolean isAutoScale()
{
return autoScale;
}
- public void setAutoScaled(boolean autoscale) {
+
+ public void setAutoScaled(boolean autoscale)
+ {
autoScale = autoscale;
}
+
/**
- * update the base and range appropriatly for the given minmax range
- * @param a float[] {min,max} array containing minmax range for the associated score values
+ * update the base and range appropriatly for the given minmax range
+ *
+ * @param a
+ * float[] {min,max} array containing minmax range for the associated
+ * score values
*/
- public void updateBounds(float min,float max)
+ public void updateBounds(float min, float max)
{
- if (max