-/*\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
-package jalview.schemes;\r
-\r
-import java.awt.*;\r
-/**\r
- * DOCUMENT ME!\r
- *\r
- * @author $author$\r
- * @version $Revision$\r
- */\r
-public class ColourSchemeProperty\r
-{\r
- /** DOCUMENT ME!! */\r
- public static final int CLUSTAL = 0;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int BLOSUM = 1;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int PID = 2;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int ZAPPO = 3;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int HYDROPHOBIC = 4;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int HELIX = 5;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int STRAND = 6;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int TURN = 7;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int BURIED = 8;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int NUCLEOTIDE = 9;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int USER_DEFINED = 10;\r
-\r
- /** DOCUMENT ME!! */\r
- public static final int NONE = 11;\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param name DOCUMENT ME!\r
- *\r
- * @return DOCUMENT ME!\r
- */\r
- public static int getColourIndexFromName(String name)\r
- {\r
- int ret = 11;\r
-\r
- if (name.equalsIgnoreCase("Clustal"))\r
- {\r
- ret = CLUSTAL;\r
- }\r
- else if (name.equalsIgnoreCase("Blosum62"))\r
- {\r
- ret = BLOSUM;\r
- }\r
- else if (name.equalsIgnoreCase("% Identity"))\r
- {\r
- ret = PID;\r
- }\r
- else if (name.equalsIgnoreCase("Zappo"))\r
- {\r
- ret = ZAPPO;\r
- }\r
- else if (name.equalsIgnoreCase("Hydrophobic"))\r
- {\r
- ret = HYDROPHOBIC;\r
- }\r
- else if (name.equalsIgnoreCase("Helix Propensity"))\r
- {\r
- ret = HELIX;\r
- }\r
- else if (name.equalsIgnoreCase("Strand Propensity"))\r
- {\r
- ret = STRAND;\r
- }\r
- else if (name.equalsIgnoreCase("Turn Propensity"))\r
- {\r
- ret = TURN;\r
- }\r
- else if (name.equalsIgnoreCase("Buried Index"))\r
- {\r
- ret = BURIED;\r
- }\r
- else if (name.equalsIgnoreCase("Nucleotide"))\r
- {\r
- ret = NUCLEOTIDE;\r
- }\r
- else if (name.equalsIgnoreCase("User Defined"))\r
- {\r
- ret = USER_DEFINED;\r
- }\r
-\r
- return ret;\r
- }\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param cs DOCUMENT ME!\r
- *\r
- * @return DOCUMENT ME!\r
- */\r
- public static String getColourName(ColourSchemeI cs)\r
- {\r
- if (cs instanceof ConservationColourScheme)\r
- {\r
- cs = ((ConservationColourScheme) cs).cs;\r
- }\r
-\r
- int index = 11;\r
-\r
- if (cs instanceof ClustalxColourScheme)\r
- {\r
- index = CLUSTAL;\r
- }\r
- else if (cs instanceof Blosum62ColourScheme)\r
- {\r
- index = BLOSUM;\r
- }\r
- else if (cs instanceof PIDColourScheme)\r
- {\r
- index = PID;\r
- }\r
- else if (cs instanceof ZappoColourScheme)\r
- {\r
- index = ZAPPO;\r
- }\r
- else if (cs instanceof HydrophobicColourScheme)\r
- {\r
- index = HYDROPHOBIC;\r
- }\r
- else if (cs instanceof HelixColourScheme)\r
- {\r
- index = HELIX;\r
- }\r
- else if (cs instanceof StrandColourScheme)\r
- {\r
- index = STRAND;\r
- }\r
- else if (cs instanceof TurnColourScheme)\r
- {\r
- index = TURN;\r
- }\r
- else if (cs instanceof BuriedColourScheme)\r
- {\r
- index = BURIED;\r
- }\r
- else if (cs instanceof NucleotideColourScheme)\r
- {\r
- index = NUCLEOTIDE;\r
- }\r
- else if (cs instanceof UserColourScheme)\r
- {\r
- index = USER_DEFINED;\r
- }\r
-\r
- return getColourName(index);\r
- }\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param index DOCUMENT ME!\r
- *\r
- * @return DOCUMENT ME!\r
- */\r
- public static String getColourName(int index)\r
- {\r
- String ret = null;\r
-\r
- switch (index)\r
- {\r
- case CLUSTAL:\r
- ret = "Clustal";\r
-\r
- break;\r
-\r
- case BLOSUM:\r
- ret = "Blosum62";\r
-\r
- break;\r
-\r
- case PID:\r
- ret = "% Identity";\r
-\r
- break;\r
-\r
- case ZAPPO:\r
- ret = "Zappo";\r
-\r
- break;\r
-\r
- case HYDROPHOBIC:\r
- ret = "Hydrophobic";\r
-\r
- break;\r
-\r
- case HELIX:\r
- ret = "Helix Propensity";\r
-\r
- break;\r
-\r
- case STRAND:\r
- ret = "Strand Propensity";\r
-\r
- break;\r
-\r
- case TURN:\r
- ret = "Turn Propensity";\r
-\r
- break;\r
-\r
- case BURIED:\r
- ret = "Buried Index";\r
-\r
- break;\r
-\r
- case NUCLEOTIDE:\r
- ret = "Nucleotide";\r
-\r
- break;\r
-\r
- case USER_DEFINED:\r
- ret = "User Defined";\r
-\r
- break;\r
-\r
- default:\r
- ret = "None";\r
-\r
- break;\r
- }\r
-\r
- return ret;\r
- }\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param al DOCUMENT ME!\r
- * @param name DOCUMENT ME!\r
- *\r
- * @return DOCUMENT ME!\r
- */\r
- public static ColourSchemeI getColour(jalview.datamodel.AlignmentI al,\r
- String name)\r
- {\r
- return getColour(al.getSequences(), al.getWidth(), name);\r
- }\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param seqs DOCUMENT ME!\r
- * @param width DOCUMENT ME!\r
- * @param name DOCUMENT ME!\r
- *\r
- * @return DOCUMENT ME!\r
- */\r
- public static ColourSchemeI getColour(java.util.Vector seqs, int width,\r
- String name)\r
- {\r
- return getColour(seqs, width, getColourIndexFromName(name));\r
- }\r
-\r
- /**\r
- * DOCUMENT ME!\r
- *\r
- * @param seqs DOCUMENT ME!\r
- * @param width DOCUMENT ME!\r
- * @param index DOCUMENT ME!\r
- *\r
- * @return DOCUMENT ME!\r
- */\r
- public static ColourSchemeI getColour(java.util.Vector seqs, int width,\r
- int index)\r
- {\r
- ColourSchemeI cs = null;\r
-\r
- switch (index)\r
- {\r
- case CLUSTAL:\r
- cs = new ClustalxColourScheme(seqs, width);\r
-\r
- break;\r
-\r
- case BLOSUM:\r
- cs = new Blosum62ColourScheme();\r
-\r
- break;\r
-\r
- case PID:\r
- cs = new PIDColourScheme();\r
-\r
- break;\r
-\r
- case ZAPPO:\r
- cs = new ZappoColourScheme();\r
-\r
- break;\r
-\r
- case HYDROPHOBIC:\r
- cs = new HydrophobicColourScheme();\r
-\r
- break;\r
-\r
- case HELIX:\r
- cs = new HelixColourScheme();\r
-\r
- break;\r
-\r
- case STRAND:\r
- cs = new StrandColourScheme();\r
-\r
- break;\r
-\r
- case TURN:\r
- cs = new TurnColourScheme();\r
-\r
- break;\r
-\r
- case BURIED:\r
- cs = new BuriedColourScheme();\r
-\r
- break;\r
-\r
- case NUCLEOTIDE:\r
- cs = new NucleotideColourScheme();\r
-\r
- break;\r
-\r
- case USER_DEFINED:\r
- cs = new UserColourScheme(new Color[0]);\r
-\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return cs;\r
- }\r
-\r
- public static Color getAWTColorFromName(String name)\r
- {\r
- Color col = null;\r
- name = name.toLowerCase();\r
- if(name.equals("black"))\r
- col = Color.black;\r
- else if(name.equals("blue"))\r
- col = Color.blue;\r
- else if(name.equals("cyan"))\r
- col = Color.cyan;\r
- else if(name.equals("darkGray"))\r
- col = Color.darkGray;\r
- else if(name.equals("gray"))\r
- col = Color.gray;\r
- else if(name.equals("green"))\r
- col = Color.green;\r
- else if(name.equals("lightGray"))\r
- col = Color.lightGray;\r
- else if(name.equals("magenta"))\r
- col = Color.magenta;\r
- else if(name.equals("orange"))\r
- col = Color.orange;\r
- else if(name.equals("pink"))\r
- col = Color.pink;\r
- else if(name.equals("red"))\r
- col = Color.red;\r
- else if(name.equals("white"))\r
- col = Color.white;\r
- else if(name.equals("yellow"))\r
- col = Color.yellow;\r
-\r
- return col;\r
- }\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.schemes;
+
+import jalview.datamodel.AnnotatedCollectionI;
+import jalview.util.ColorUtils;
+
+import java.awt.Color;
+
+/**
+ * ColourSchemeProperty binds names to hardwired colourschemes and tries to deal
+ * intelligently with mapping unknown names to user defined colourschemes (that
+ * exist or can be created from the string representation of the colourscheme
+ * name - either a hex RGB triplet or a named colour under java.awt.color ). The
+ * values of the colourscheme constants is important for callers of
+ * getColourName(int i), since it can be used to enumerate the set of built in
+ * colours. The FIRST_COLOUR and LAST_COLOUR symbols are provided for this.
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+public class ColourSchemeProperty
+{
+
+ /**
+ * Returns a colour scheme for the given name, with which the given data may
+ * be coloured. The name is not case-sensitive, and may be one of
+ * <ul>
+ * <li>any currently registered colour scheme; Jalview by default provides</li>
+ * <ul>
+ * <li>Clustal</li>
+ * <li>Blosum62</li>
+ * <li>% Identity</li>
+ * <li>Hydrophobic</li>
+ * <li>Zappo</li>
+ * <li>Taylor</li>
+ * <li>Helix Propensity</li>
+ * <li>Strand Propensity</li>
+ * <li>Turn Propensity</li>
+ * <li>Buried Index</li>
+ * <li>Nucleotide</li>
+ * <li>Purine/Pyrimidine</li>
+ * <li>T-Coffee Scores</li>
+ * <li>RNA Helices</li>
+ * </ul>
+ * <li>the name of a programmatically added colour scheme</li> <li>an AWT
+ * colour name e.g. red</li> <li>an AWT hex rgb colour e.g. ff2288</li> <li>
+ * residue colours list e.g. D,E=red;K,R,H=0022FF;c=yellow</li> </ul>
+ *
+ * If none of these formats is matched, the string is converted to a colour
+ * using a hashing algorithm. For name "None", returns null.
+ *
+ * @param forData
+ * @param name
+ * @return
+ */
+ public static ColourSchemeI getColourScheme(AnnotatedCollectionI forData,
+ String name)
+ {
+ if (ResidueColourScheme.NONE.equalsIgnoreCase(name))
+ {
+ return null;
+
+ }
+
+ /*
+ * if this is the name of a registered colour scheme, just
+ * create a new instance of it
+ */
+ ColourSchemeI scheme = ColourSchemes.getInstance().getColourScheme(
+ name, forData, null);
+ if (scheme != null)
+ {
+ return scheme;
+ }
+
+ /*
+ * try to parse the string as a residues colour scheme
+ * e.g. A=red;T,G=blue etc
+ * else parse the name as a colour specification
+ * e.g. "red" or "ff00ed",
+ * or failing that hash the name to a colour
+ */
+ UserColourScheme ucs = new UserColourScheme(name);
+ return ucs;
+ }
+
+ public static Color rnaHelices[] = null;
+
+ public static void initRnaHelicesShading(int n)
+ {
+ int j = 0;
+ if (rnaHelices == null)
+ {
+ rnaHelices = new Color[n + 1];
+ }
+ else if (rnaHelices != null && rnaHelices.length <= n)
+ {
+ Color[] t = new Color[n + 1];
+ System.arraycopy(rnaHelices, 0, t, 0, rnaHelices.length);
+ j = rnaHelices.length;
+ rnaHelices = t;
+ }
+ else
+ {
+ return;
+ }
+ // Generate random colors and store
+ for (; j <= n; j++)
+ {
+ rnaHelices[j] = ColorUtils.generateRandomColor(Color.white);
+ }
+ }
+
+ /**
+ * delete the existing cached RNA helices colours
+ */
+ public static void resetRnaHelicesShading()
+ {
+ rnaHelices = null;
+ }
+
+ /**
+ * Returns the name of the colour scheme (or "None" if it is null)
+ *
+ * @param cs
+ * @return
+ */
+ public static String getColourName(ColourSchemeI cs)
+ {
+ return cs == null ? ResidueColourScheme.NONE : cs
+ .getSchemeName();
+ }
+
+}