JAL-3210 Improvements to eclipse detection. New src tree and SwingJS updated from...
[jalview.git] / src / jalview / schemes / ColourSchemeProperty.java
index 9b91066..0123384 100755 (executable)
  */
 package jalview.schemes;
 
+import jalview.api.AlignViewportI;
 import jalview.datamodel.AnnotatedCollectionI;
-import jalview.util.ColorUtils;
-
-import java.awt.Color;
 
 /**
  * ColourSchemeProperty binds names to hardwired colourschemes and tries to deal
@@ -40,9 +38,17 @@ import java.awt.Color;
 public class ColourSchemeProperty
 {
 
+  private ColourSchemeProperty()
+  {
+    // requires static call to getColourScheme(...).
+  }
+
   /**
    * Returns a colour scheme for the given name, with which the given data may
-   * be coloured. The name may be one of
+   * 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>
@@ -58,90 +64,53 @@ public class ColourSchemeProperty
    * <li>Purine/Pyrimidine</li>
    * <li>T-Coffee Scores</li>
    * <li>RNA Helices</li>
-   * <li>User Defined</li>
-   * <li>None</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.
+   * using a hashing algorithm. For name "None", returns null.
    * 
    * @param forData
    * @param name
    * @return
    */
-  public static ColourSchemeI getColour(AnnotatedCollectionI forData,
+  public static ColourSchemeI getColourScheme(AlignViewportI view,
+          AnnotatedCollectionI forData,
           String name)
   {
-    JalviewColourScheme scheme = JalviewColourScheme.forName(name);
-    if (scheme != null)
+    if (ResidueColourScheme.NONE.equalsIgnoreCase(name))
     {
-      // note JalviewColourScheme.None returns null here
-      return scheme.getColourScheme(forData);
+      return null;
+
     }
 
-    if (name.indexOf('=') == -1)
+    /*
+     * if this is the name of a registered colour scheme, just
+     * create a new instance of it
+     */
+    ColourSchemeI scheme = ColourSchemes.getInstance().getColourScheme(name,
+            view,
+            forData, null);
+    if (scheme != null)
     {
-      /*
-       * parse the name as a colour specification
-       * e.g. "red" or "ff00ed",
-       * or failing that hash the name to a colour
-       */
-      return new UserColourScheme(name);
+      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 = null;
-    try
-    {
-      // fix the launchApp user defined colourscheme transfer bug
-      ucs = new UserColourScheme("white");
-      ucs.parseAppletParameter(name);
-    } catch (Exception e)
-    {
-      // System.err.println("Ignoring exception when parsing colourscheme as applet-parameter");
-    }
+    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)
    * 
@@ -150,8 +119,7 @@ public class ColourSchemeProperty
    */
   public static String getColourName(ColourSchemeI cs)
   {
-    return cs == null ? ResidueColourScheme.NONE : cs
-            .getSchemeName();
+    return cs == null ? ResidueColourScheme.NONE : cs.getSchemeName();
   }
 
 }