Merge branch 'develop' into features/JAL-2094_colourInterface features/JAL-2094_colourInterface
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 19 Sep 2016 16:56:18 +0000 (17:56 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 19 Sep 2016 16:56:18 +0000 (17:56 +0100)
Conflicts:
src/jalview/api/FeatureColourI.java
src/jalview/api/FeatureRenderer.java
src/jalview/appletgui/FeatureColourChooser.java
src/jalview/appletgui/FeatureRenderer.java
src/jalview/appletgui/FeatureSettings.java
src/jalview/appletgui/SeqCanvas.java
src/jalview/appletgui/SequenceRenderer.java
src/jalview/appletgui/UserDefinedColours.java
src/jalview/ext/ensembl/EnsemblGene.java
src/jalview/gui/FeatureColourChooser.java
src/jalview/gui/FeatureRenderer.java
src/jalview/gui/FeatureSettings.java
src/jalview/gui/Jalview2XML.java
src/jalview/gui/SeqCanvas.java
src/jalview/gui/TreeCanvas.java
src/jalview/io/FeaturesFile.java
src/jalview/io/PDBFeatureSettings.java
src/jalview/renderer/seqfeatures/FeatureRenderer.java
src/jalview/schemes/FeatureColour.java
src/jalview/schemes/FeatureColourAdapter.java
src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java
src/jalview/viewmodel/seqfeatures/FeatureRendererSettings.java
src/jalview/ws/jws1/SeqSearchWSThread.java
src/jalview/ws/jws2/AADisorderClient.java
test/jalview/io/FeaturesFileTest.java
test/jalview/schemes/FeatureColourTest.java

67 files changed:
examples/exampleFeatures.txt
src/MCview/AppletPDBCanvas.java
src/MCview/Atom.java
src/MCview/Bond.java
src/MCview/PDBCanvas.java
src/MCview/PDBChain.java
src/jalview/api/AlignViewportI.java
src/jalview/api/ColorI.java [new file with mode: 0644]
src/jalview/api/FeatureColourI.java
src/jalview/api/FeatureRenderer.java
src/jalview/api/SequenceRenderer.java
src/jalview/api/ViewStyleI.java
src/jalview/appletgui/AnnotationColourChooser.java
src/jalview/appletgui/FeatureColourChooser.java
src/jalview/appletgui/FeatureRenderer.java
src/jalview/appletgui/FeatureSettings.java
src/jalview/appletgui/IdCanvas.java
src/jalview/appletgui/OverviewPanel.java
src/jalview/appletgui/RotatableCanvas.java
src/jalview/appletgui/SeqCanvas.java
src/jalview/appletgui/SequenceRenderer.java
src/jalview/appletgui/TreeCanvas.java
src/jalview/appletgui/UserDefinedColours.java
src/jalview/controller/AlignViewController.java
src/jalview/datamodel/SequenceGroup.java
src/jalview/ext/ensembl/EnsemblGene.java
src/jalview/ext/jmol/JmolCommands.java
src/jalview/ext/rbvi/chimera/ChimeraCommands.java
src/jalview/ext/varna/VarnaCommands.java
src/jalview/gui/AlignmentPanel.java
src/jalview/gui/AppVarna.java
src/jalview/gui/FeatureColourChooser.java
src/jalview/gui/FeatureRenderer.java
src/jalview/gui/FeatureSettings.java
src/jalview/gui/IdCanvas.java
src/jalview/gui/Jalview2XML.java
src/jalview/gui/Jalview2XML_V1.java
src/jalview/gui/RotatableCanvas.java
src/jalview/gui/SeqCanvas.java
src/jalview/gui/SequenceRenderer.java
src/jalview/gui/TextColourChooser.java
src/jalview/gui/TreeCanvas.java
src/jalview/io/AnnotationFile.java
src/jalview/io/FeaturesFile.java
src/jalview/io/HTMLOutput.java
src/jalview/io/HtmlSvgOutput.java
src/jalview/io/JSONFile.java
src/jalview/io/PDBFeatureSettings.java
src/jalview/renderer/seqfeatures/FeatureRenderer.java
src/jalview/schemes/Colour.java [new file with mode: 0644]
src/jalview/schemes/FeatureColour.java
src/jalview/schemes/FeatureColourAdapter.java [new file with mode: 0644]
src/jalview/util/ColorUtils.java
src/jalview/util/Format.java
src/jalview/viewmodel/AlignmentViewport.java
src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java
src/jalview/viewmodel/seqfeatures/FeatureRendererSettings.java
src/jalview/viewmodel/styles/ViewStyle.java
src/jalview/ws/jws2/AADisorderClient.java
test/MCview/PDBChainTest.java
test/jalview/ext/ensembl/EnsemblGeneTest.java
test/jalview/ext/rbvi/chimera/ChimeraCommandsTest.java
test/jalview/gui/SequenceRendererTest.java
test/jalview/io/FeaturesFileTest.java
test/jalview/schemes/FeatureColourTest.java
test/jalview/util/ColorUtilsTest.java
test/jalview/viewmodel/styles/ViewStyleTest.java

index c0098a9..7c8d26c 100755 (executable)
@@ -22,8 +22,10 @@ NEST-RL      3e16b2
 ASX-TURN-IIL   a67c98
 BETA-TURN-IIR  c79792
 PHOSPHORYLATION (T)    c88395
-BETA-TURN-IIL  8b5b50
-ST-MOTIF       ac25a1
+BETA-TURN-IIL  label
+#8b5b50
+ST-MOTIF       label|||0|0
+#ac25a1
 
 STARTGROUP     uniprot
 <html><a href="http://pfam.xfam.org/family/PF00111">Pfam family</a></html>     FER_CAPAA       -1      0       0       Pfam
index df98833..89318d5 100644 (file)
@@ -27,10 +27,12 @@ import jalview.appletgui.SequenceRenderer;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
 import jalview.io.StructureFile;
+import jalview.schemes.Colour;
 import jalview.structure.AtomSpec;
 import jalview.structure.StructureListener;
 import jalview.structure.StructureMapping;
 import jalview.structure.StructureSelectionManager;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 
 import java.awt.Color;
@@ -584,8 +586,8 @@ public class AppletPDBCanvas extends Panel implements MouseListener,
         for (int i = 0; i < chain.bonds.size(); i++)
         {
           Bond tmp = chain.bonds.elementAt(i);
-          tmp.startCol = Color.lightGray;
-          tmp.endCol = Color.lightGray;
+          tmp.startCol = Colour.lightGray;
+          tmp.endCol = Colour.lightGray;
           if (chain != mainchain)
           {
             continue;
@@ -660,26 +662,27 @@ public class AppletPDBCanvas extends Panel implements MouseListener,
       {
         if (tmpBond.start[2] < (centre[2] - (maxwidth / 6)))
         {
-          g.setColor(tmpBond.startCol.darker().darker());
+          g.setColor(ColorUtils.getColor(tmpBond.startCol).darker()
+                  .darker());
           drawLine(g, xstart, ystart, xmid, ymid);
 
-          g.setColor(tmpBond.endCol.darker().darker());
+          g.setColor(ColorUtils.getColor(tmpBond.endCol).darker().darker());
           drawLine(g, xmid, ymid, xend, yend);
         }
         else if (tmpBond.start[2] < (centre[2] + (maxwidth / 6)))
         {
-          g.setColor(tmpBond.startCol.darker());
+          g.setColor(ColorUtils.getColor(tmpBond.startCol).darker());
           drawLine(g, xstart, ystart, xmid, ymid);
 
-          g.setColor(tmpBond.endCol.darker());
+          g.setColor(ColorUtils.getColor(tmpBond.endCol).darker());
           drawLine(g, xmid, ymid, xend, yend);
         }
         else
         {
-          g.setColor(tmpBond.startCol);
+          g.setColor(ColorUtils.getColor(tmpBond.startCol));
           drawLine(g, xstart, ystart, xmid, ymid);
 
-          g.setColor(tmpBond.endCol);
+          g.setColor(ColorUtils.getColor(tmpBond.endCol));
           drawLine(g, xmid, ymid, xend, yend);
         }
 
@@ -704,9 +707,9 @@ public class AppletPDBCanvas extends Panel implements MouseListener,
       }
       else if (!depthcue && !bymolecule)
       {
-        g.setColor(tmpBond.startCol);
+        g.setColor(ColorUtils.getColor(tmpBond.startCol));
         drawLine(g, xstart, ystart, xmid, ymid);
-        g.setColor(tmpBond.endCol);
+        g.setColor(ColorUtils.getColor(tmpBond.endCol));
         drawLine(g, xmid, ymid, xend, yend);
       }
       else
index fe6a0ac..84fefc0 100755 (executable)
  */
 package MCview;
 
+import jalview.api.ColorI;
+import jalview.schemes.Colour;
 import jalview.schemes.ResidueProperties;
 
-import java.awt.Color;
-
 public class Atom
 {
   public float x;
@@ -46,7 +46,7 @@ public class Atom
 
   public int type;
 
-  Color color = Color.lightGray;
+  ColorI color = Colour.lightGray;
 
   public String chain;
 
index 371ccd5..57d77bd 100755 (executable)
@@ -20,7 +20,8 @@
  */
 package MCview;
 
-import java.awt.Color;
+import jalview.api.ColorI;
+import jalview.schemes.Colour;
 
 public class Bond
 {
@@ -28,9 +29,9 @@ public class Bond
 
   float[] end;
 
-  Color startCol = Color.lightGray;
+  ColorI startCol = Colour.lightGray;
 
-  Color endCol = Color.lightGray;
+  ColorI endCol = Colour.lightGray;
 
   public Atom at1;
 
index 1c7a1f7..d8e0366 100644 (file)
@@ -27,10 +27,12 @@ import jalview.gui.AlignmentPanel;
 import jalview.gui.FeatureRenderer;
 import jalview.gui.SequenceRenderer;
 import jalview.io.StructureFile;
+import jalview.schemes.Colour;
 import jalview.structure.AtomSpec;
 import jalview.structure.StructureListener;
 import jalview.structure.StructureMapping;
 import jalview.structure.StructureSelectionManager;
+import jalview.util.ColorUtils;
 
 import java.awt.Color;
 import java.awt.Dimension;
@@ -553,8 +555,8 @@ public class PDBCanvas extends JPanel implements MouseListener,
         for (int i = 0; i < chain.bonds.size(); i++)
         {
           Bond tmp = chain.bonds.elementAt(i);
-          tmp.startCol = Color.lightGray;
-          tmp.endCol = Color.lightGray;
+          tmp.startCol = Colour.lightGray;
+          tmp.endCol = Colour.lightGray;
           if (chain != mainchain)
           {
             continue;
@@ -629,26 +631,27 @@ public class PDBCanvas extends JPanel implements MouseListener,
         if (tmpBond.start[2] < (centre[2] - (maxwidth / 6)))
         {
 
-          g.setColor(tmpBond.startCol.darker().darker());
+          g.setColor(ColorUtils.getColor(tmpBond.startCol).darker()
+                  .darker());
           drawLine(g, xstart, ystart, xmid, ymid);
-          g.setColor(tmpBond.endCol.darker().darker());
+          g.setColor(ColorUtils.getColor(tmpBond.endCol).darker().darker());
           drawLine(g, xmid, ymid, xend, yend);
 
         }
         else if (tmpBond.start[2] < (centre[2] + (maxwidth / 6)))
         {
-          g.setColor(tmpBond.startCol.darker());
+          g.setColor(ColorUtils.getColor(tmpBond.startCol).darker());
           drawLine(g, xstart, ystart, xmid, ymid);
 
-          g.setColor(tmpBond.endCol.darker());
+          g.setColor(ColorUtils.getColor(tmpBond.endCol).darker());
           drawLine(g, xmid, ymid, xend, yend);
         }
         else
         {
-          g.setColor(tmpBond.startCol);
+          g.setColor(ColorUtils.getColor(tmpBond.startCol));
           drawLine(g, xstart, ystart, xmid, ymid);
 
-          g.setColor(tmpBond.endCol);
+          g.setColor(ColorUtils.getColor(tmpBond.endCol));
           drawLine(g, xmid, ymid, xend, yend);
         }
       }
@@ -672,9 +675,9 @@ public class PDBCanvas extends JPanel implements MouseListener,
       }
       else if (!depthcue && !bymolecule)
       {
-        g.setColor(tmpBond.startCol);
+        g.setColor(ColorUtils.getColor(tmpBond.startCol));
         drawLine(g, xstart, ystart, xmid, ymid);
-        g.setColor(tmpBond.endCol);
+        g.setColor(ColorUtils.getColor(tmpBond.endCol));
         drawLine(g, xmid, ymid, xend, yend);
       }
       else
@@ -684,14 +687,16 @@ public class PDBCanvas extends JPanel implements MouseListener,
 
       if (highlightBond1 != null && highlightBond1 == tmpBond)
       {
-        g.setColor(tmpBond.endCol.brighter().brighter().brighter()
+        g.setColor(ColorUtils.getColor(tmpBond.endCol).brighter()
+                .brighter().brighter()
                 .brighter());
         drawLine(g, xmid, ymid, xend, yend);
       }
 
       if (highlightBond2 != null && highlightBond2 == tmpBond)
       {
-        g.setColor(tmpBond.startCol.brighter().brighter().brighter()
+        g.setColor(ColorUtils.getColor(tmpBond.startCol).brighter()
+                .brighter().brighter()
                 .brighter());
         drawLine(g, xstart, ystart, xmid, ymid);
       }
index cf794b6..67ff286 100755 (executable)
 package MCview;
 
 import jalview.analysis.AlignSeq;
+import jalview.api.ColorI;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.Mapping;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ResidueProperties;
 import jalview.structure.StructureImportSettings;
@@ -473,26 +475,26 @@ public class PDBChain
       }
       else
       {
-        b.startCol = Color.gray;
-        b.endCol = Color.gray;
+        b.startCol = Colour.gray;
+        b.endCol = Colour.gray;
       }
     }
   }
 
-  public static Color getChargeColour(String resName)
+  public static ColorI getChargeColour(String resName)
   {
-    Color result = Color.lightGray;
+    ColorI result = Colour.lightGray;
     if ("ASP".equals(resName) || "GLU".equals(resName))
     {
-      result = Color.red;
+      result = Colour.red;
     }
     else if ("LYS".equals(resName) || "ARG".equals(resName))
     {
-      result = Color.blue;
+      result = Colour.blue;
     }
     else if ("CYS".equals(resName))
     {
-      result = Color.yellow;
+      result = Colour.yellow;
     }
     return result;
   }
@@ -512,15 +514,17 @@ public class PDBChain
       try
       {
         index = ResidueProperties.aa3Hash.get(b.at1.resName).intValue();
-        b.startCol = cs.findColour(ResidueProperties.aa[index].charAt(0));
+        b.startCol = new Colour(cs.findColour(ResidueProperties.aa[index]
+                .charAt(0)));
 
         index = ResidueProperties.aa3Hash.get(b.at2.resName).intValue();
-        b.endCol = cs.findColour(ResidueProperties.aa[index].charAt(0));
+        b.endCol = new Colour(cs.findColour(ResidueProperties.aa[index]
+                .charAt(0)));
 
       } catch (Exception e)
       {
-        b.startCol = Color.gray;
-        b.endCol = Color.gray;
+        b.startCol = Colour.gray;
+        b.endCol = Colour.gray;
       }
     }
   }
@@ -529,8 +533,8 @@ public class PDBChain
   {
     for (Bond b : bonds)
     {
-      b.startCol = col;
-      b.endCol = col;
+      b.startCol = new Colour(col);
+      b.endCol = new Colour(col);
     }
   }
 
index c08527c..f92160e 100644 (file)
@@ -31,7 +31,6 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.schemes.ColourSchemeI;
 
-import java.awt.Color;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -191,9 +190,9 @@ public interface AlignViewportI extends ViewStyleI
   void updateGroupAnnotationSettings(boolean applyGlobalSettings,
           boolean preserveNewGroupSettings);
 
-  void setSequenceColour(SequenceI seq, Color col);
+  void setSequenceColour(SequenceI seq, ColorI col);
 
-  Color getSequenceColour(SequenceI seq);
+  ColorI getSequenceColour(SequenceI seq);
 
   void updateSequenceIdColours();
 
diff --git a/src/jalview/api/ColorI.java b/src/jalview/api/ColorI.java
new file mode 100644 (file)
index 0000000..c46db90
--- /dev/null
@@ -0,0 +1,12 @@
+package jalview.api;
+
+public interface ColorI
+{
+  int getGreen();
+
+  int getBlue();
+
+  int getRed();
+
+  int getRGB();
+}
index 1fcbfd0..922a038 100644 (file)
@@ -2,8 +2,6 @@ package jalview.api;
 
 import jalview.datamodel.SequenceFeature;
 
-import java.awt.Color;
-
 public interface FeatureColourI
 {
 
@@ -19,21 +17,21 @@ public interface FeatureColourI
    * 
    * @return
    */
-  Color getColour();
+  ColorI getColour();
 
   /**
    * Returns the minimum colour (when isGraduatedColour answers true)
    * 
    * @return
    */
-  Color getMinColour();
+  ColorI getMinColour();
 
   /**
    * Returns the maximum colour (when isGraduatedColour answers true)
    * 
    * @return
    */
-  Color getMaxColour();
+  ColorI getMaxColour();
 
   /**
    * Answers true if the feature has a single colour, i.e. if isColourByLabel()
@@ -94,6 +92,13 @@ public interface FeatureColourI
   void setThreshold(float f);
 
   /**
+   * Answers true if either isAboveThreshold or isBelowThreshold answers true
+   * 
+   * @return
+   */
+  boolean hasThreshold();
+
+  /**
    * Answers true if the colour varies between the actual minimum and maximum
    * score values of the feature, or false if between absolute minimum and
    * maximum values (or if not a graduated colour).
@@ -105,57 +110,50 @@ public interface FeatureColourI
   void setAutoScaled(boolean b);
 
   /**
-   * Returns the maximum score of the graduated colour range
+   * Answers true if the feature has a simple colour, or is coloured by label,
+   * or has a graduated colour and the score of this feature instance is within
+   * the range to render (if any), i.e. does not lie below or above any
+   * threshold set.
    * 
+   * @param feature
    * @return
    */
-  float getMax();
+  boolean isColored(SequenceFeature feature);
 
   /**
-   * Returns the minimum score of the graduated colour range
+   * Update the min-max range for a graduated colour scheme
    * 
-   * @return
+   * @param min
+   * @param max
    */
-  float getMin();
+  void updateBounds(float min, float max);
 
   /**
-   * Answers true if either isAboveThreshold or isBelowThreshold answers true
+   * Returns the colour in Jalview features file format
    * 
    * @return
    */
-  boolean hasThreshold();
+  String toJalviewFormat(String featureType);
 
   /**
-   * Returns the computed colour for the given sequence feature
+   * Returns the maximum score of the graduated colour range
    * 
-   * @param feature
    * @return
    */
-  Color getColor(SequenceFeature feature);
+  float getMax();
 
   /**
-   * Answers true if the feature has a simple colour, or is coloured by label,
-   * or has a graduated colour and the score of this feature instance is within
-   * the range to render (if any), i.e. does not lie below or above any
-   * threshold set.
+   * Returns the minimum score of the graduated colour range
    * 
-   * @param feature
    * @return
    */
-  boolean isColored(SequenceFeature feature);
-
-  /**
-   * Update the min-max range for a graduated colour scheme
-   * 
-   * @param min
-   * @param max
-   */
-  void updateBounds(float min, float max);
+  float getMin();
 
   /**
-   * Returns the colour in Jalview features file format
+   * Returns the computed colour for the given sequence feature
    * 
+   * @param feature
    * @return
    */
-  String toJalviewFormat(String featureType);
+  ColorI getColor(SequenceFeature feature);
 }
index dbc9880..5477f57 100644 (file)
@@ -23,7 +23,6 @@ package jalview.api;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 
-import java.awt.Color;
 import java.util.List;
 import java.util.Map;
 
@@ -48,7 +47,7 @@ public interface FeatureRenderer
    *          - column position
    * @return
    */
-  Color findFeatureColour(Color col, SequenceI sequenceI, int r);
+  ColorI findFeatureColour(ColorI col, SequenceI sequenceI, int r);
 
   /**
    * trigger the feature discovery process for a newly created feature renderer.
@@ -65,10 +64,10 @@ public interface FeatureRenderer
   /**
    * update the feature style for a particular feature
    * 
-   * @param ft
-   * @param ggc
+   * @param featureType
+   * @param featureColour
    */
-  void setColour(String ft, FeatureColourI ggc);
+  void setColour(String featureType, FeatureColourI featureColour);
 
   AlignViewportI getViewport();
 
index d708902..81bb386 100644 (file)
@@ -22,13 +22,11 @@ package jalview.api;
 
 import jalview.datamodel.SequenceI;
 
-import java.awt.Color;
-
 public interface SequenceRenderer
 {
 
-  Color getResidueBoxColour(SequenceI sequenceI, int r);
+  ColorI getResidueBoxColour(SequenceI sequenceI, int r);
 
-  Color getResidueColour(SequenceI seq, int position, FeatureRenderer fr);
+  ColorI getResidueColour(SequenceI seq, int position, FeatureRenderer fr);
 
 }
index db82dcf..2375a72 100644 (file)
@@ -20,8 +20,6 @@
  */
 package jalview.api;
 
-import java.awt.Color;
-
 public interface ViewStyleI
 {
 
@@ -148,9 +146,9 @@ public interface ViewStyleI
    */
   void setColourByReferenceSeq(boolean colourByReferenceSeq);
 
-  Color getTextColour();
+  ColorI getTextColour();
 
-  Color getTextColour2();
+  ColorI getTextColour2();
 
   int getThresholdTextColour();
 
@@ -166,11 +164,11 @@ public interface ViewStyleI
 
   void setShowColourText(boolean showColourText);
 
-  void setTextColour(Color textColour);
+  void setTextColour(ColorI textColour);
 
   void setThresholdTextColour(int thresholdTextColour);
 
-  void setTextColour2(Color textColour2);
+  void setTextColour2(ColorI textColour2);
 
   boolean isSeqNameItalics();
 
index 5a9cd55..4b51d78 100644 (file)
@@ -309,6 +309,7 @@ public class AnnotationColourChooser extends Panel implements
 
   Checkbox thresholdIsMin = new Checkbox();
 
+  @Override
   public void actionPerformed(ActionEvent evt)
   {
     if (evt.getSource() == thresholdValue)
@@ -351,6 +352,7 @@ public class AnnotationColourChooser extends Panel implements
     }
   }
 
+  @Override
   public void itemStateChanged(ItemEvent evt)
   {
     if (evt.getSource() == currentColours)
@@ -368,6 +370,7 @@ public class AnnotationColourChooser extends Panel implements
     changeColour();
   }
 
+  @Override
   public void adjustmentValueChanged(AdjustmentEvent evt)
   {
     if (!adjusting)
@@ -552,23 +555,28 @@ public class AnnotationColourChooser extends Panel implements
 
   }
 
+  @Override
   public void mouseClicked(MouseEvent evt)
   {
   }
 
+  @Override
   public void mousePressed(MouseEvent evt)
   {
   }
 
+  @Override
   public void mouseReleased(MouseEvent evt)
   {
     ap.paintAlignment(true);
   }
 
+  @Override
   public void mouseEntered(MouseEvent evt)
   {
   }
 
+  @Override
   public void mouseExited(MouseEvent evt)
   {
   }
index 0e85017..d0834e6 100644 (file)
@@ -23,7 +23,9 @@ package jalview.appletgui;
 import jalview.api.FeatureColourI;
 import jalview.datamodel.GraphLine;
 import jalview.schemes.AnnotationColourGradient;
+import jalview.schemes.Colour;
 import jalview.schemes.FeatureColour;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 
 import java.awt.Checkbox;
@@ -106,15 +108,16 @@ public class FeatureColourChooser extends Panel implements ActionListener,
       Color bl = Color.black;
       if (oldcs.isSimpleColour())
       {
-        bl = oldcs.getColour();
+        bl = ColorUtils.getColor(oldcs.getColour());
       }
       // original colour becomes the maximum colour
-      cs = new FeatureColour(Color.white, bl, mm[0], mm[1]);
+      cs = new FeatureColour(new Colour(Color.white), new Colour(bl),
+              mm[0], mm[1]);
     }
-    minColour.setBackground(cs.getMinColour());
-    maxColour.setBackground(cs.getMaxColour());
-    minColour.setForeground(cs.getMinColour());
-    maxColour.setForeground(cs.getMaxColour());
+    minColour.setBackground(ColorUtils.getColor(cs.getMinColour()));
+    maxColour.setBackground(ColorUtils.getColor(cs.getMaxColour()));
+    minColour.setForeground(ColorUtils.getColor(cs.getMinColour()));
+    maxColour.setForeground(ColorUtils.getColor(cs.getMaxColour()));
     colourFromLabel.setState(cs.isColourByLabel());
     adjusting = true;
 
@@ -313,9 +316,9 @@ public class FeatureColourChooser extends Panel implements ActionListener,
     // ap.paintAlignment(false);
   }
 
-  public void minColour_actionPerformed(Color newCol)
+  public void minColour_actionPerformed(Color c)
   {
-    if (newCol == null)
+    if (c == null)
     {
       UserDefinedColours udc = new UserDefinedColours(this,
               minColour.getBackground(), owner,
@@ -323,8 +326,8 @@ public class FeatureColourChooser extends Panel implements ActionListener,
     }
     else
     {
-      minColour.setBackground(newCol);
-      minColour.setForeground(newCol);
+      minColour.setBackground(c);
+      minColour.setForeground(c);
       minColour.repaint();
       changeColour();
     }
@@ -371,8 +374,9 @@ public class FeatureColourChooser extends Panel implements ActionListener,
 
     slider.setEnabled(true);
     thresholdValue.setEnabled(true);
-    FeatureColour acg = new FeatureColour(minColour.getBackground(),
-            maxColour.getBackground(), min, max);
+    FeatureColour acg = new FeatureColour(new Colour(
+            minColour.getBackground()), new Colour(
+            maxColour.getBackground()), min, max);
 
     acg.setColourByLabel(colourFromLabel.getState());
     maxColour.setEnabled(!colourFromLabel.getState());
index 82736d7..cd9495e 100644 (file)
@@ -25,8 +25,10 @@ import jalview.datamodel.SearchResults;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.io.FeaturesFile;
+import jalview.schemes.Colour;
 import jalview.schemes.FeatureColour;
 import jalview.schemes.UserColourScheme;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
 
@@ -58,22 +60,10 @@ import java.util.Hashtable;
 public class FeatureRenderer extends
         jalview.renderer.seqfeatures.FeatureRenderer
 {
-
   // Holds web links for feature groups and feature types
   // in the form label|link
   Hashtable featureLinks = null;
 
-  /**
-   * Creates a new FeatureRenderer object.
-   * 
-   * @param av
-   */
-  public FeatureRenderer(AlignmentViewport av)
-  {
-    super(av);
-
-  }
-
   static String lastFeatureAdded;
 
   static String lastFeatureGroupAdded;
@@ -86,6 +76,16 @@ public class FeatureRenderer extends
 
   FeatureColourPanel colourPanel;
 
+  /**
+   * Creates a new FeatureRenderer object.
+   * 
+   * @param av
+   */
+  public FeatureRenderer(AlignmentViewport av)
+  {
+    super(av);
+  }
+
   class FeatureColourPanel extends Panel
   {
     String label = "";
@@ -103,7 +103,7 @@ public class FeatureRenderer extends
       String vlabel = "";
       if (newcol.isSimpleColour())
       {
-        bg = newcol.getColour();
+        bg = ColorUtils.getColor(newcol.getColour());
         setBackground(bg);
       }
       else
@@ -124,8 +124,8 @@ public class FeatureRenderer extends
         }
         else
         {
-          setBackground(bg = newcol.getMinColour());
-          maxCol = newcol.getMaxColour();
+          setBackground(bg = ColorUtils.getColor(newcol.getMinColour()));
+          maxCol = ColorUtils.getColor(newcol.getMaxColour());
         }
       }
       label = vlabel;
@@ -237,7 +237,7 @@ public class FeatureRenderer extends
           {
             Color generatedColour = UserColourScheme
                     .createColourFromName(name.getText());
-            col = new FeatureColour(generatedColour);
+            col = new FeatureColour(new Colour(generatedColour));
           }
 
           colourPanel.updateColor(col);
@@ -401,7 +401,9 @@ public class FeatureRenderer extends
         if (!colourPanel.isGcol)
         {
           // update colour - otherwise its already done.
-          setColour(sf.type, new FeatureColour(colourPanel.getBackground()));
+          setColour(
+                  sf.type,
+                  new FeatureColour(new Colour(colourPanel.getBackground())));
         }
         try
         {
@@ -441,7 +443,8 @@ public class FeatureRenderer extends
         {
           setGroupVisibility(lastFeatureGroupAdded, true);
         }
-        setColour(lastFeatureAdded, new FeatureColour(newColour)); // was fcol
+        setColour(lastFeatureAdded,
+                new FeatureColour(new Colour(newColour))); // was fcol
         setVisible(lastFeatureAdded);
         findAllFeatures(false); // different to original applet behaviour ?
         // findAllFeatures();
index 9733c86..79812ae 100755 (executable)
@@ -24,6 +24,7 @@ import jalview.api.FeatureColourI;
 import jalview.api.FeatureSettingsControllerI;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceFeature;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 
 import java.awt.BorderLayout;
@@ -192,7 +193,7 @@ public class FeatureSettings extends Panel implements ItemListener,
     final FeatureColourI typeCol = fr.getFeatureStyle(type);
     PopupMenu men = new PopupMenu(MessageManager.formatMessage(
             "label.settings_for_type", new String[] { type }));
-    java.awt.MenuItem scr = new MenuItem(
+    MenuItem scr = new MenuItem(
             MessageManager.getString("label.sort_by_score"));
     men.add(scr);
     final FeatureSettings me = this;
@@ -677,7 +678,8 @@ public class FeatureSettings extends Panel implements ItemListener,
       FeatureColourI fcol = fr.getFeatureStyle(check.type);
       if (fcol.isSimpleColour())
       {
-        new UserDefinedColours(this, check.type, fcol.getColour());
+        new UserDefinedColours(this, check.type, ColorUtils.getColor(fcol
+                .getColour()));
       }
       else
       {
@@ -716,7 +718,7 @@ public class FeatureSettings extends Panel implements ItemListener,
       col = newcol;
       if (col.isSimpleColour())
       {
-        setBackground(col.getColour());
+        setBackground(ColorUtils.getColor(col.getColour()));
       }
       else
       {
@@ -736,7 +738,7 @@ public class FeatureSettings extends Panel implements ItemListener,
         }
         else
         {
-          setBackground(col.getMinColour());
+          setBackground(ColorUtils.getColor(col.getMinColour()));
         }
         this.setLabel(vlabel);
       }
@@ -779,14 +781,12 @@ public class FeatureSettings extends Panel implements ItemListener,
            * height/g.getFontMetrics().getHeight()))); g.drawString("Label",
            * width/2, 0);
            */
-
         }
         else if (col.isGraduatedColour())
         {
-          Color maxCol = col.getMaxColour();
+          Color maxCol = ColorUtils.getColor(col.getMaxColour());
           g.setColor(maxCol);
           g.fillRect(d.width / 2, 0, d.width / 2, d.height);
-
         }
       }
 
index d72e91f..4386dee 100755 (executable)
@@ -21,6 +21,7 @@
 package jalview.appletgui;
 
 import jalview.datamodel.SequenceI;
+import jalview.util.ColorUtils;
 
 import java.awt.Color;
 import java.awt.Font;
@@ -78,7 +79,7 @@ public class IdCanvas extends Panel
     }
     else
     {
-      gg.setColor(av.getSequenceColour(s));
+      gg.setColor(ColorUtils.getColor(av.getSequenceColour(s)));
       gg.fillRect(0, ((i - starty) * charHeight) + ypos, getSize().width,
               charHeight);
       gg.setColor(Color.black);
@@ -293,7 +294,7 @@ public class IdCanvas extends Panel
         }
         else
         {
-          currentColor = av.getSequenceColour(seq);
+          currentColor = ColorUtils.getColor(av.getSequenceColour(seq));
           currentTextColor = Color.black;
         }
 
index 9b2be4c..39d578a 100755 (executable)
@@ -21,6 +21,7 @@
 package jalview.appletgui;
 
 import jalview.datamodel.AlignmentI;
+import jalview.util.ColorUtils;
 
 import java.awt.Color;
 import java.awt.Dimension;
@@ -349,11 +350,12 @@ public class OverviewPanel extends Panel implements Runnable,
 
         if (seq.getLength() > lastcol)
         {
-          color = sr.getResidueBoxColour(seq, lastcol);
+          color = ColorUtils.getColor(sr.getResidueBoxColour(seq, lastcol));
 
           if (av.isShowSequenceFeatures())
           {
-            color = fr.findFeatureColour(color, seq, lastcol);
+            color = ColorUtils.getColor(fr.findFeatureColour(color, seq,
+                    lastcol));
           }
         }
         else
index 5c91ea8..615edbd 100755 (executable)
@@ -25,6 +25,7 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.SequencePoint;
 import jalview.math.RotatableMatrix;
+import jalview.util.ColorUtils;
 import jalview.util.Format;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
@@ -126,6 +127,7 @@ public class RotatableCanvas extends Panel implements MouseListener,
     repaint();
   }
 
+  @Override
   public void setPoints(Vector points, int npoint)
   {
     this.points = points;
@@ -287,7 +289,7 @@ public class RotatableCanvas extends Panel implements MouseListener,
       dim = height;
     }
 
-    return (float) (dim * scalefactor / (2 * maxwidth));
+    return dim * scalefactor / (2 * maxwidth);
   }
 
   public void findCentre()
@@ -304,6 +306,7 @@ public class RotatableCanvas extends Panel implements MouseListener,
     // System.out.println("Centre z " + centre[2]);
   }
 
+  @Override
   public Dimension getPreferredSize()
   {
     if (prefsize != null)
@@ -316,16 +319,19 @@ public class RotatableCanvas extends Panel implements MouseListener,
     }
   }
 
+  @Override
   public Dimension getMinimumSize()
   {
     return getPreferredSize();
   }
 
+  @Override
   public void update(Graphics g)
   {
     paint(g);
   }
 
+  @Override
   public void paint(Graphics g)
   {
     if (points == null)
@@ -397,8 +403,8 @@ public class RotatableCanvas extends Panel implements MouseListener,
     for (int i = 0; i < npoint; i++)
     {
       SequencePoint sp = (SequencePoint) points.elementAt(i);
-      int x = (int) ((float) (sp.coord[0] - centre[0]) * scale) + halfwidth;
-      int y = (int) ((float) (sp.coord[1] - centre[1]) * scale)
+      int x = (int) ((sp.coord[0] - centre[0]) * scale) + halfwidth;
+      int y = (int) ((sp.coord[1] - centre[1]) * scale)
               + halfheight;
       float z = sp.coord[1] - centre[2];
 
@@ -408,7 +414,7 @@ public class RotatableCanvas extends Panel implements MouseListener,
       }
       else
       {
-        g.setColor(av.getSequenceColour(sp.sequence));
+        g.setColor(ColorUtils.getColor(av.getSequenceColour(sp.sequence)));
       }
 
       if (av.getSelectionGroup() != null)
@@ -445,14 +451,17 @@ public class RotatableCanvas extends Panel implements MouseListener,
     return prefsize;
   }
 
+  @Override
   public void keyTyped(KeyEvent evt)
   {
   }
 
+  @Override
   public void keyReleased(KeyEvent evt)
   {
   }
 
+  @Override
   public void keyPressed(KeyEvent evt)
   {
     if (evt.getKeyCode() == KeyEvent.VK_UP)
@@ -491,22 +500,27 @@ public class RotatableCanvas extends Panel implements MouseListener,
     }
   }
 
+  @Override
   public void mouseClicked(MouseEvent evt)
   {
   }
 
+  @Override
   public void mouseEntered(MouseEvent evt)
   {
   }
 
+  @Override
   public void mouseExited(MouseEvent evt)
   {
   }
 
+  @Override
   public void mouseReleased(MouseEvent evt)
   {
   }
 
+  @Override
   public void mousePressed(MouseEvent evt)
   {
     int x = evt.getX();
@@ -551,6 +565,7 @@ public class RotatableCanvas extends Panel implements MouseListener,
     repaint();
   }
 
+  @Override
   public void mouseMoved(MouseEvent evt)
   {
     SequenceI found = findPoint(evt.getX(), evt.getY());
@@ -567,6 +582,7 @@ public class RotatableCanvas extends Panel implements MouseListener,
     repaint();
   }
 
+  @Override
   public void mouseDragged(MouseEvent evt)
   {
     mx = evt.getX();
@@ -574,8 +590,8 @@ public class RotatableCanvas extends Panel implements MouseListener,
 
     rotmat.setIdentity();
 
-    rotmat.rotate((float) (my - omy), 'x');
-    rotmat.rotate((float) (mx - omx), 'y');
+    rotmat.rotate(my - omy, 'x');
+    rotmat.rotate(mx - omx, 'y');
 
     for (int i = 0; i < npoint; i++)
     {
@@ -609,8 +625,8 @@ public class RotatableCanvas extends Panel implements MouseListener,
     for (int i = 0; i < npoint; i++)
     {
       SequencePoint sp = (SequencePoint) points.elementAt(i);
-      int tmp1 = (int) ((sp.coord[0] - centre[0]) * scale + (float) getSize().width / 2.0);
-      int tmp2 = (int) ((sp.coord[1] - centre[1]) * scale + (float) getSize().height / 2.0);
+      int tmp1 = (int) ((sp.coord[0] - centre[0]) * scale + getSize().width / 2.0);
+      int tmp2 = (int) ((sp.coord[1] - centre[1]) * scale + getSize().height / 2.0);
 
       if (tmp1 > x1 && tmp1 < x2 && tmp2 > y1 && tmp2 < y2)
       {
@@ -638,9 +654,9 @@ public class RotatableCanvas extends Panel implements MouseListener,
     {
 
       SequencePoint sp = (SequencePoint) points.elementAt(i);
-      int px = (int) ((float) (sp.coord[0] - centre[0]) * scale)
+      int px = (int) ((sp.coord[0] - centre[0]) * scale)
               + halfwidth;
-      int py = (int) ((float) (sp.coord[1] - centre[1]) * scale)
+      int py = (int) ((sp.coord[1] - centre[1]) * scale)
               + halfheight;
 
       if (Math.abs(px - x) < 3 && Math.abs(py - y) < 3)
index 22849f1..b3f5ac8 100755 (executable)
@@ -26,6 +26,7 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.renderer.ScaleRenderer;
 import jalview.renderer.ScaleRenderer.ScaleMark;
+import jalview.util.ColorUtils;
 import jalview.viewmodel.AlignmentViewport;
 
 import java.awt.Color;
@@ -737,7 +738,7 @@ public class SeqCanvas extends Panel
               }
               else
               {
-                g.setColor(group.getOutlineColour());
+                g.setColor(ColorUtils.getColor(group.getOutlineColour()));
               }
             }
           }
index 970d20e..276ad9e 100755 (executable)
  */
 package jalview.appletgui;
 
+import jalview.api.ColorI;
 import jalview.api.FeatureRenderer;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 
 import java.awt.Color;
@@ -70,7 +72,7 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
   }
 
   @Override
-  public Color getResidueBoxColour(SequenceI seq, int i)
+  public ColorI getResidueBoxColour(SequenceI seq, int i)
   {
     allGroups = av.getAlignment().findAllGroups(seq);
 
@@ -86,7 +88,7 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
       getBoxColour(av.getGlobalColourScheme(), seq, i);
     }
 
-    return resBoxColour;
+    return new Colour(resBoxColour);
   }
 
   /**
@@ -100,12 +102,12 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
    * @return
    */
   @Override
-  public Color getResidueColour(final SequenceI seq, int position,
+  public ColorI getResidueColour(final SequenceI seq, int position,
           FeatureRenderer fr)
   {
     // TODO replace 8 or so code duplications with calls to this method
     // (refactored as needed)
-    Color col = getResidueBoxColour(seq, position);
+    ColorI col = getResidueBoxColour(seq, position);
 
     if (fr != null)
     {
index c8f526c..9072a62 100755 (executable)
@@ -27,10 +27,12 @@ import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.SequenceNode;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.schemes.ResidueProperties;
 import jalview.schemes.UserColourScheme;
+import jalview.util.ColorUtils;
 import jalview.util.Format;
 import jalview.util.MappingUtils;
 import jalview.viewmodel.AlignmentViewport;
@@ -176,7 +178,8 @@ public class TreeCanvas extends Panel implements MouseListener,
         }
         else
         {
-          g.setColor(av.getSequenceColour(seq).darker());
+          g.setColor(ColorUtils.getColor(av.getSequenceColour(seq))
+                  .darker());
         }
 
       }
@@ -403,7 +406,7 @@ public class TreeCanvas extends Panel implements MouseListener,
 
       if (node.element() instanceof SequenceI)
       {
-        av.setSequenceColour((SequenceI) node.element(), c);
+        av.setSequenceColour((SequenceI) node.element(), new Colour(c));
       }
     }
     else
@@ -706,7 +709,7 @@ public class TreeCanvas extends Panel implements MouseListener,
           for (SequenceI seq : mappedGroup.getSequences())
           {
             // TODO why does gui require col.brighter() here??
-            codingComplement.setSequenceColour(seq, col);
+            codingComplement.setSequenceColour(seq, new Colour(col));
           }
         }
       }
index 88098a9..b1ccd51 100644 (file)
@@ -22,10 +22,12 @@ package jalview.appletgui;
 
 import jalview.api.FeatureColourI;
 import jalview.datamodel.SequenceGroup;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.FeatureColour;
 import jalview.schemes.ResidueProperties;
 import jalview.schemes.UserColourScheme;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 
 import java.awt.Button;
@@ -118,7 +120,8 @@ public class UserDefinedColours extends Panel implements ActionListener,
   public UserDefinedColours(FeatureRenderer fr, Frame alignframe)
   {
     caller = fr;
-    originalColour = new FeatureColour(fr.colourPanel.getBackground());
+    originalColour = new FeatureColour(new Colour(
+            fr.colourPanel.getBackground()));
     originalLabel = "Feature Colour";
     setForDialog("Select Feature Colour", alignframe);
     setTargetColour(fr.colourPanel.getBackground());
@@ -146,7 +149,7 @@ public class UserDefinedColours extends Panel implements ActionListener,
           String title)
   {
     this.caller = caller;
-    originalColour = new FeatureColour(col);
+    originalColour = new FeatureColour(new Colour(col));
     originalLabel = title;
     setForDialog(title, alignframe);
     setTargetColour(col);
@@ -162,7 +165,7 @@ public class UserDefinedColours extends Panel implements ActionListener,
    */
   public UserDefinedColours(Object caller, String label, Color colour)
   {
-    this(caller, label, new FeatureColour(colour), colour);
+    this(caller, label, new FeatureColour(new Colour(colour)), colour);
   }
 
   /**
@@ -175,7 +178,8 @@ public class UserDefinedColours extends Panel implements ActionListener,
   public UserDefinedColours(FeatureSettings me, String type,
           FeatureColourI graduatedColor)
   {
-    this(me, type, graduatedColor, graduatedColor.getMaxColour());
+    this(me, type, graduatedColor, ColorUtils.getColor(graduatedColor
+            .getMaxColour()));
   }
 
   private UserDefinedColours(Object caller, String label,
@@ -456,7 +460,7 @@ public class UserDefinedColours extends Panel implements ActionListener,
       if (caller instanceof FeatureSettings)
       {
         ((FeatureSettings) caller).setUserColour(originalLabel,
-                new FeatureColour(getColor()));
+                new FeatureColour(new Colour(getColor())));
       }
       else if (caller instanceof AnnotationColourChooser)
       {
@@ -474,7 +478,7 @@ public class UserDefinedColours extends Panel implements ActionListener,
       else if (caller instanceof FeatureRenderer)
       {
         ((FeatureRenderer) caller).colourPanel
-                .updateColor(new FeatureColour(getColor()));
+                .updateColor(new FeatureColour(new Colour(getColor())));
       }
       else if (caller instanceof FeatureColourChooser)
       {
@@ -543,12 +547,14 @@ public class UserDefinedColours extends Panel implements ActionListener,
         if (originalLabel.equals("Min Colour"))
         {
           ((AnnotationColourChooser) caller)
-                  .minColour_actionPerformed(originalColour.getColour());
+                  .minColour_actionPerformed(ColorUtils
+                          .getColor(originalColour.getColour()));
         }
         else
         {
           ((AnnotationColourChooser) caller)
-                  .maxColour_actionPerformed(originalColour.getColour());
+                  .maxColour_actionPerformed(ColorUtils
+                          .getColor(originalColour.getColour()));
         }
       }
       else if (caller instanceof FeatureRenderer)
@@ -562,12 +568,14 @@ public class UserDefinedColours extends Panel implements ActionListener,
         if (originalLabel.indexOf("inimum") > -1)
         {
           ((FeatureColourChooser) caller)
-                  .minColour_actionPerformed(originalColour.getColour());
+                  .minColour_actionPerformed(ColorUtils
+                          .getColor(originalColour.getColour()));
         }
         else
         {
           ((FeatureColourChooser) caller)
-                  .maxColour_actionPerformed(originalColour.getColour());
+                  .maxColour_actionPerformed(ColorUtils
+                          .getColor(originalColour.getColour()));
         }
       }
       if (dialog != null)
index f508bc3..35a0ba7 100644 (file)
@@ -25,6 +25,7 @@ import jalview.api.AlignViewControllerGuiI;
 import jalview.api.AlignViewControllerI;
 import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
+import jalview.api.ColorI;
 import jalview.api.FeatureRenderer;
 import jalview.commands.OrderCommand;
 import jalview.datamodel.AlignmentI;
@@ -34,6 +35,7 @@ import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.io.FeaturesFile;
+import jalview.schemes.Colour;
 import jalview.util.MessageManager;
 
 import java.awt.Color;
@@ -112,10 +114,10 @@ public class AlignViewController implements AlignViewControllerI
         viewport.getAlignment().addGroup(gps[g]);
         Color col = new Color((int) (Math.random() * 255),
                 (int) (Math.random() * 255), (int) (Math.random() * 255));
-        col = col.brighter();
+        ColorI newcol = new Colour(col.brighter());
         for (SequenceI sq : gps[g].getSequences(null))
         {
-          viewport.setSequenceColour(sq, col);
+          viewport.setSequenceColour(sq, newcol);
         }
       }
       return true;
index 046f1e6..3199240 100755 (executable)
@@ -22,6 +22,8 @@ package jalview.datamodel;
 
 import jalview.analysis.AAFrequency;
 import jalview.analysis.Conservation;
+import jalview.api.ColorI;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ResidueProperties;
 
@@ -82,15 +84,15 @@ public class SequenceGroup implements AnnotatedCollectionI
   // end column (base 0)
   int endRes = 0;
 
-  public Color outlineColour = Color.black;
+  public ColorI outlineColour = Colour.black;
 
-  public Color idColour = null;
+  public ColorI idColour = null;
 
   public int thresholdTextColour = 0;
 
-  public Color textColour = Color.black;
+  public ColorI textColour = Colour.black;
 
-  public Color textColour2 = Color.white;
+  public ColorI textColour2 = Colour.white;
 
   /**
    * consensus calculation property
@@ -824,7 +826,7 @@ public class SequenceGroup implements AnnotatedCollectionI
    */
   public void setOutlineColour(Color c)
   {
-    outlineColour = c;
+    outlineColour = new Colour(c);
   }
 
   /**
@@ -832,7 +834,7 @@ public class SequenceGroup implements AnnotatedCollectionI
    * 
    * @return DOCUMENT ME!
    */
-  public Color getOutlineColour()
+  public ColorI getOutlineColour()
   {
     return outlineColour;
   }
@@ -905,7 +907,7 @@ public class SequenceGroup implements AnnotatedCollectionI
   /**
    * @return the idColour
    */
-  public Color getIdColour()
+  public ColorI getIdColour()
   {
     return idColour;
   }
@@ -916,7 +918,7 @@ public class SequenceGroup implements AnnotatedCollectionI
    */
   public void setIdColour(Color idColour)
   {
-    this.idColour = idColour;
+    this.idColour = new Colour(idColour);
   }
 
   /**
index 0c20e12..6f3c062 100644 (file)
@@ -1,5 +1,6 @@
 package jalview.ext.ensembl;
 
+import jalview.api.ColorI;
 import jalview.api.FeatureColourI;
 import jalview.api.FeatureSettingsModelI;
 import jalview.datamodel.AlignmentI;
@@ -8,11 +9,11 @@ import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.io.gff.SequenceOntologyFactory;
 import jalview.io.gff.SequenceOntologyI;
-import jalview.schemes.FeatureColour;
+import jalview.schemes.Colour;
+import jalview.schemes.FeatureColourAdapter;
 import jalview.schemes.FeatureSettingsAdapter;
 import jalview.util.MapList;
 
-import java.awt.Color;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.util.ArrayList;
@@ -541,7 +542,7 @@ public class EnsemblGene extends EnsemblSeqProxy
       {
         if (so.isA(type, SequenceOntologyI.EXON))
         {
-          return new FeatureColour()
+          return new FeatureColourAdapter()
           {
             @Override
             public boolean isColourByLabel()
@@ -552,13 +553,13 @@ public class EnsemblGene extends EnsemblSeqProxy
         }
         if (so.isA(type, SequenceOntologyI.SEQUENCE_VARIANT))
         {
-          return new FeatureColour()
+          return new FeatureColourAdapter()
           {
 
             @Override
-            public Color getColour()
+            public ColorI getColour()
             {
-              return Color.RED;
+              return Colour.red;
             }
           };
         }
index d5676c5..0114d1c 100644 (file)
@@ -20,6 +20,7 @@
  */
 package jalview.ext.jmol;
 
+import jalview.api.ColorI;
 import jalview.api.FeatureRenderer;
 import jalview.api.SequenceRenderer;
 import jalview.datamodel.AlignmentI;
@@ -28,7 +29,6 @@ import jalview.structure.StructureMapping;
 import jalview.structure.StructureMappingcommandSet;
 import jalview.structure.StructureSelectionManager;
 
-import java.awt.Color;
 import java.util.ArrayList;
 
 /**
@@ -93,7 +93,7 @@ public class JmolCommands
 
               lastPos = pos;
 
-              Color col = sr.getResidueBoxColour(sequence[pdbfnum][s], r);
+              ColorI col = sr.getResidueBoxColour(sequence[pdbfnum][s], r);
 
               if (fr != null)
               {
index a551ca2..930d6fe 100644 (file)
@@ -20,6 +20,7 @@
  */
 package jalview.ext.rbvi.chimera;
 
+import jalview.api.ColorI;
 import jalview.api.FeatureRenderer;
 import jalview.api.SequenceRenderer;
 import jalview.datamodel.AlignmentI;
@@ -30,7 +31,6 @@ import jalview.structure.StructureSelectionManager;
 import jalview.util.ColorUtils;
 import jalview.util.Comparison;
 
-import java.awt.Color;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -58,7 +58,7 @@ public class ChimeraCommands
           SequenceI[][] sequence, SequenceRenderer sr, FeatureRenderer fr,
           AlignmentI alignment)
   {
-    Map<Color, Map<Integer, Map<String, List<int[]>>>> colourMap = buildColoursMap(
+    Map<ColorI, Map<Integer, Map<String, List<int[]>>>> colourMap = buildColoursMap(
             ssm, files, sequence, sr, fr, alignment);
 
     List<String> colourCommands = buildColourCommands(colourMap);
@@ -86,7 +86,7 @@ public class ChimeraCommands
    * @return
    */
   protected static List<String> buildColourCommands(
-          Map<Color, Map<Integer, Map<String, List<int[]>>>> colourMap)
+          Map<ColorI, Map<Integer, Map<String, List<int[]>>>> colourMap)
   {
     /*
      * This version concatenates all commands into a single String (semi-colon
@@ -96,7 +96,7 @@ public class ChimeraCommands
     List<String> commands = new ArrayList<String>();
     StringBuilder sb = new StringBuilder(256);
     boolean firstColour = true;
-    for (Color colour : colourMap.keySet())
+    for (ColorI colour : colourMap.keySet())
     {
       String colourCode = ColorUtils.toTkCode(colour);
       if (!firstColour)
@@ -161,13 +161,13 @@ public class ChimeraCommands
    * Ordering is by order of addition (for colours and positions), natural ordering (for models and chains)
    * </pre>
    */
-  protected static Map<Color, Map<Integer, Map<String, List<int[]>>>> buildColoursMap(
+  protected static Map<ColorI, Map<Integer, Map<String, List<int[]>>>> buildColoursMap(
           StructureSelectionManager ssm, String[] files,
           SequenceI[][] sequence, SequenceRenderer sr, FeatureRenderer fr,
           AlignmentI alignment)
   {
-    Map<Color, Map<Integer, Map<String, List<int[]>>>> colourMap = new LinkedHashMap<Color, Map<Integer, Map<String, List<int[]>>>>();
-    Color lastColour = null;
+    Map<ColorI, Map<Integer, Map<String, List<int[]>>>> colourMap = new LinkedHashMap<ColorI, Map<Integer, Map<String, List<int[]>>>>();
+    ColorI lastColour = null;
     for (int pdbfnum = 0; pdbfnum < files.length; pdbfnum++)
     {
       StructureMapping[] mapping = ssm.getMapping(files[pdbfnum]);
@@ -202,7 +202,7 @@ public class ChimeraCommands
                 continue;
               }
 
-              Color colour = sr.getResidueColour(seq, r, fr);
+              ColorI colour = sr.getResidueColour(seq, r, fr);
               final String chain = mapping[m].getChain();
 
               /*
@@ -251,8 +251,8 @@ public class ChimeraCommands
    * @param chain
    */
   protected static void addColourRange(
-          Map<Color, Map<Integer, Map<String, List<int[]>>>> colourMap,
-          Color colour, int model, int startPos, int endPos, String chain)
+          Map<ColorI, Map<Integer, Map<String, List<int[]>>>> colourMap,
+          ColorI colour, int model, int startPos, int endPos, String chain)
   {
     /*
      * Get/initialize map of data for the colour
index a41e10e..d0d0b5b 100644 (file)
@@ -20,6 +20,7 @@
  */
 package jalview.ext.varna;
 
+import jalview.api.ColorI;
 import jalview.api.FeatureRenderer;
 import jalview.api.SequenceRenderer;
 import jalview.datamodel.AlignmentI;
@@ -27,7 +28,6 @@ import jalview.datamodel.SequenceI;
 import jalview.structure.StructureMapping;
 import jalview.structure.StructureSelectionManager;
 
-import java.awt.Color;
 import java.util.ArrayList;
 
 /**
@@ -58,7 +58,9 @@ public class VarnaCommands
       StructureMapping[] mapping = ssm.getMapping(files[pdbfnum]);
 
       if (mapping == null || mapping.length < 1)
+      {
         continue;
+      }
 
       int lastPos = -1;
       for (int s = 0; s < sequence[pdbfnum].length; s++)
@@ -79,14 +81,18 @@ public class VarnaCommands
               int pos = mapping[m].getPDBResNum(asp.findPosition(r));
 
               if (pos < 1 || pos == lastPos)
+              {
                 continue;
+              }
 
               lastPos = pos;
 
-              Color col = sr.getResidueBoxColour(sequence[pdbfnum][s], r);
+              ColorI col = sr.getResidueBoxColour(sequence[pdbfnum][s], r);
 
               if (fr != null)
+              {
                 col = fr.findFeatureColour(col, sequence[pdbfnum][s], r);
+              }
               String newSelcom = (mapping[m].getChain() != " " ? ":"
                       + mapping[m].getChain() : "")
                       + "/"
index 87d5933..c259ef3 100644 (file)
@@ -33,6 +33,7 @@ import jalview.jbgui.GAlignmentPanel;
 import jalview.math.AlignmentDimension;
 import jalview.schemes.ResidueProperties;
 import jalview.structure.StructureSelectionManager;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
 
@@ -1068,7 +1069,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
       }
       else
       {
-        currentColor = av.getSequenceColour(seq);
+        currentColor = ColorUtils.getColor(av.getSequenceColour(seq));
         currentTextColor = Color.black;
       }
 
index f4a4f4d..e754adf 100644 (file)
@@ -32,6 +32,7 @@ import jalview.structure.SelectionListener;
 import jalview.structure.SelectionSource;
 import jalview.structure.StructureSelectionManager;
 import jalview.structure.VamsasSource;
+import jalview.util.ColorUtils;
 import jalview.util.Comparison;
 import jalview.util.MessageManager;
 import jalview.util.ShiftList;
@@ -424,7 +425,7 @@ public class AppVarna extends JInternalFrame implements SelectionListener,
       }
       selectionHighlighter.highlightRegion(rna, start, end);
       selectionHighlighter.getLastHighlight().setOutlineColor(
-              seqsel.getOutlineColour());
+              ColorUtils.getColor(seqsel.getOutlineColour()));
       // TODO - translate column markings to positions on structure if present.
       vab.updateSelectedRNA(rna);
     }
index 5594e1a..4c4c69a 100644 (file)
@@ -22,7 +22,9 @@ package jalview.gui;
 
 import jalview.api.FeatureColourI;
 import jalview.datamodel.GraphLine;
+import jalview.schemes.Colour;
 import jalview.schemes.FeatureColour;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 
 import java.awt.BorderLayout;
@@ -151,17 +153,20 @@ public class FeatureColourChooser extends JalviewDialog
     else
     {
       // promote original color to a graduated color
-      Color bl = oldcs.getColour();
+      Color bl = ColorUtils.getColor(oldcs.getColour());
       if (bl == null)
       {
         bl = Color.BLACK;
       }
       // original colour becomes the maximum colour
-      cs = new FeatureColour(Color.white, bl, mm[0], mm[1]);
+      cs = new FeatureColour(new Colour(Color.white), new Colour(bl),
+              mm[0], mm[1]);
       cs.setColourByLabel(false);
     }
-    minColour.setBackground(oldminColour = cs.getMinColour());
-    maxColour.setBackground(oldmaxColour = cs.getMaxColour());
+    minColour.setBackground(oldminColour = ColorUtils.getColor(cs
+            .getMinColour()));
+    maxColour.setBackground(oldmaxColour = ColorUtils.getColor(cs
+            .getMaxColour()));
     adjusting = true;
 
     try
@@ -407,13 +412,14 @@ public class FeatureColourChooser extends JalviewDialog
     FeatureColourI acg;
     if (cs.isColourByLabel())
     {
-      acg = new FeatureColour(oldminColour, oldmaxColour, min, max);
+      acg = new FeatureColour(new Colour(oldminColour), new Colour(
+              oldmaxColour), min, max);
     }
     else
     {
-      acg = new FeatureColour(oldminColour = minColour.getBackground(),
-              oldmaxColour = maxColour.getBackground(), min, max);
-
+      acg = new FeatureColour(new Colour(
+              oldminColour = minColour.getBackground()), new Colour(
+              oldmaxColour = maxColour.getBackground()), min, max);
     }
 
     if (!hasThreshold)
index 426ea32..3c4d733 100644 (file)
@@ -24,8 +24,10 @@ import jalview.api.FeatureColourI;
 import jalview.datamodel.SearchResults;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
+import jalview.schemes.Colour;
 import jalview.schemes.FeatureColour;
 import jalview.schemes.UserColourScheme;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 
 import java.awt.BorderLayout;
@@ -131,11 +133,11 @@ public class FeatureRenderer extends
         {
           Color col = JColorChooser.showDialog(Desktop.desktop,
                   MessageManager.getString("label.select_feature_colour"),
-                  fcol.getColour());
+                  ColorUtils.getColor(fcol.getColour()));
           if (col != null)
           {
-            fcol = new FeatureColour(col);
-            updateColourButton(bigPanel, colour, new FeatureColour(col));
+            fcol = new FeatureColour(new Colour(col));
+            updateColourButton(bigPanel, colour, fcol);
           }
         }
         else
@@ -210,8 +212,8 @@ public class FeatureRenderer extends
           FeatureColourI col = getFeatureStyle(name.getText());
           if (col == null)
           {
-            col = new FeatureColour(UserColourScheme
-                    .createColourFromName(name.getText()));
+            col = new FeatureColour(new Colour(UserColourScheme
+                    .createColourFromName(name.getText())));
           }
           oldcol = fcol = col;
           updateColourButton(bigPanel, colour, col);
@@ -422,8 +424,12 @@ public class FeatureRenderer extends
    * update the amend feature button dependent on the given style
    * 
    * @param bigPanel
+   * @param colour
    * @param col
+<<<<<<< HEAD
+=======
    * @param col
+>>>>>>> refs/heads/develop
    */
   protected void updateColourButton(JPanel bigPanel, JLabel colour,
           FeatureColourI col)
@@ -435,7 +441,7 @@ public class FeatureRenderer extends
 
     if (col.isSimpleColour())
     {
-      colour.setBackground(col.getColour());
+      colour.setBackground(ColorUtils.getColor(col.getColour()));
     }
     else
     {
index 874ce16..62aba6d 100644 (file)
@@ -28,7 +28,9 @@ import jalview.datamodel.SequenceI;
 import jalview.gui.Help.HelpId;
 import jalview.io.JalviewFileChooser;
 import jalview.schemabinding.version2.JalviewUserColours;
+import jalview.schemes.Colour;
 import jalview.schemes.FeatureColour;
+import jalview.util.ColorUtils;
 import jalview.util.Format;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
@@ -378,7 +380,8 @@ public class FeatureSettings extends JPanel implements
                         "Select new Colour", true, // modal
                         colorChooser, this, // OK button handler
                         null); // no CANCEL button handler
-                colorChooser.setColor(featureColour.getMaxColour());
+                colorChooser.setColor(ColorUtils.getColor(featureColour
+                        .getMaxColour()));
                 dialog.setVisible(true);
               }
             }
@@ -788,7 +791,8 @@ public class FeatureSettings extends JPanel implements
               Cache.log.warn("Couldn't parse out graduated feature color.",
                       e);
             }
-            FeatureColourI gcol = new FeatureColour(mincol, maxcol,
+            FeatureColourI gcol = new FeatureColour(new Colour(mincol),
+                    new Colour(maxcol),
                     newcol.getMin(), newcol.getMax());
             if (newcol.hasAutoScale())
             {
@@ -821,7 +825,7 @@ public class FeatureSettings extends JPanel implements
             Color color = new Color(
                     Integer.parseInt(jucs.getColour(i).getRGB(), 16));
             fr.setColour(name = jucs.getColour(i).getName(),
-                    new FeatureColour(color));
+                    new FeatureColour(new Colour(color)));
           }
           fr.setOrder(name, (i == 0) ? 0 : i / jucs.getColourCount());
         }
@@ -1532,7 +1536,7 @@ public class FeatureSettings extends JPanel implements
       {
         this.setText("");
         this.setIcon(null);
-        newColor = cellColour.getColour();
+        newColor = ColorUtils.getColor(cellColour.getColour());
         setBackground(newColor);
       }
       if (isSelected)
@@ -1610,7 +1614,7 @@ public class FeatureSettings extends JPanel implements
     }
     else
     {
-      Color newColor = gcol.getMaxColour();
+      Color newColor = ColorUtils.getColor(gcol.getMaxColour());
       comp.setBackground(newColor);
       // System.err.println("Width is " + w / 2);
       Icon ficon = new FeatureIcon(gcol, comp.getBackground(), w, h, thr);
@@ -1690,7 +1694,7 @@ class FeatureIcon implements Icon
       g.setColor(backg);
       g.fillRect(0, 0, width, height);
       // need an icon here.
-      g.setColor(gcol.getMaxColour());
+      g.setColor(ColorUtils.getColor(gcol.getMaxColour()));
 
       g.setFont(new Font("Verdana", Font.PLAIN, 9));
 
@@ -1704,7 +1708,7 @@ class FeatureIcon implements Icon
     }
     else
     {
-      Color minCol = gcol.getMinColour();
+      Color minCol = ColorUtils.getColor(gcol.getMinColour());
       g.setColor(minCol);
       g.fillRect(0, 0, s1, height);
       if (midspace)
@@ -1712,7 +1716,7 @@ class FeatureIcon implements Icon
         g.setColor(Color.white);
         g.fillRect(s1, 0, e1 - s1, height);
       }
-      g.setColor(gcol.getMaxColour());
+      g.setColor(ColorUtils.getColor(gcol.getMaxColour()));
       g.fillRect(0, e1, width - e1, height);
     }
   }
@@ -1771,8 +1775,9 @@ class ColorEditor extends AbstractCellEditor implements TableCellEditor,
       if (currentColor.isSimpleColour())
       {
         // bring up simple color chooser
-        button.setBackground(currentColor.getColour());
-        colorChooser.setColor(currentColor.getColour());
+        button.setBackground(ColorUtils.getColor(currentColor.getColour()));
+        colorChooser
+                .setColor(ColorUtils.getColor(currentColor.getColour()));
         dialog.setVisible(true);
       }
       else
@@ -1791,7 +1796,8 @@ class ColorEditor extends AbstractCellEditor implements TableCellEditor,
     { // User pressed dialog's "OK" button.
       if (currentColor.isSimpleColour())
       {
-        currentColor = new FeatureColour(colorChooser.getColor());
+        currentColor = new FeatureColour(
+                new Colour(colorChooser.getColor()));
       }
       else
       {
@@ -1833,7 +1839,7 @@ class ColorEditor extends AbstractCellEditor implements TableCellEditor,
     {
       button.setText("");
       button.setIcon(null);
-      button.setBackground(currentColor.getColour());
+      button.setBackground(ColorUtils.getColor(currentColor.getColour()));
     }
     return button;
   }
index 37be8bc..2cb5bcd 100755 (executable)
@@ -21,6 +21,7 @@
 package jalview.gui;
 
 import jalview.datamodel.SequenceI;
+import jalview.util.ColorUtils;
 
 import java.awt.BorderLayout;
 import java.awt.Color;
@@ -121,7 +122,7 @@ public class IdCanvas extends JPanel
     }
     else
     {
-      gg.setColor(av.getSequenceColour(s));
+      gg.setColor(ColorUtils.getColor(av.getSequenceColour(s)));
       gg.fillRect(0, ((i - starty) * charHeight) + ypos, getWidth(),
               charHeight);
       gg.setColor(Color.black);
@@ -383,7 +384,8 @@ public class IdCanvas extends JPanel
         }
         else
         {
-          currentColor = av.getSequenceColour(sequence);
+          currentColor = ColorUtils
+                  .getColor(av.getSequenceColour(sequence));
           currentTextColor = Color.black;
         }
 
index 7093a9a..e490c4e 100644 (file)
@@ -70,6 +70,7 @@ import jalview.schemabinding.version2.Tree;
 import jalview.schemabinding.version2.UserColours;
 import jalview.schemabinding.version2.Viewport;
 import jalview.schemes.AnnotationColourGradient;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.schemes.FeatureColour;
@@ -3365,8 +3366,8 @@ public class Jalview2XML
 
         sg.setOutlineColour(new java.awt.Color(jGroup.getOutlineColour()));
 
-        sg.textColour = new java.awt.Color(jGroup.getTextCol1());
-        sg.textColour2 = new java.awt.Color(jGroup.getTextCol2());
+        sg.textColour = new Colour(jGroup.getTextCol1());
+        sg.textColour2 = new Colour(jGroup.getTextCol2());
         sg.setShowNonconserved(jGroup.hasShowUnconserved() ? jGroup
                 .isShowUnconserved() : false);
         sg.thresholdTextColour = jGroup.getTextColThreshold();
@@ -4341,7 +4342,7 @@ public class Jalview2XML
     for (int i = 0; i < JSEQ.length; i++)
     {
       af.viewport.setSequenceColour(af.viewport.getAlignment()
-              .getSequenceAt(i), new java.awt.Color(JSEQ[i].getColour()));
+              .getSequenceAt(i), new Colour(JSEQ[i].getColour()));
     }
 
     if (al.hasSeqrep())
@@ -4433,8 +4434,8 @@ public class Jalview2XML
 
     af.viewport.setShowText(view.getShowText());
 
-    af.viewport.setTextColour(new java.awt.Color(view.getTextCol1()));
-    af.viewport.setTextColour2(new java.awt.Color(view.getTextCol2()));
+    af.viewport.setTextColour(new Colour(view.getTextCol1()));
+    af.viewport.setTextColour2(new Colour(view.getTextCol2()));
     af.viewport.setThresholdTextColour(view.getTextColThreshold());
     af.viewport.setShowUnconserved(view.hasShowUnconserved() ? view
             .isShowUnconserved() : false);
@@ -4562,10 +4563,11 @@ public class Jalview2XML
         if (setting.hasMincolour())
         {
           FeatureColourI gc = setting.hasMin() ? new FeatureColour(
-                  new Color(setting.getMincolour()), new Color(
-                          setting.getColour()), setting.getMin(),
-                  setting.getMax()) : new FeatureColour(new Color(
-                  setting.getMincolour()), new Color(setting.getColour()),
+                  new Colour(new Color(setting.getMincolour())),
+                  new Colour(new Color(setting.getColour())),
+                  setting.getMin(), setting.getMax()) : new FeatureColour(
+                  new Colour(new Color(setting.getMincolour())),
+                  new Colour(new Color(setting.getColour())),
                   0, 1);
           if (setting.hasThreshold())
           {
@@ -4596,7 +4598,7 @@ public class Jalview2XML
         else
         {
           featureColours.put(setting.getType(), new FeatureColour(
-                  new Color(setting.getColour())));
+                  new Colour(new Color(setting.getColour()))));
         }
         renderOrder[fs] = setting.getType();
         if (setting.hasOrder())
index 61e20fa..fb27e19 100755 (executable)
@@ -35,6 +35,7 @@ import jalview.binding.Tree;
 import jalview.binding.UserColours;
 import jalview.binding.Viewport;
 import jalview.datamodel.PDBEntry;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.schemes.ResidueProperties;
@@ -310,7 +311,7 @@ public class Jalview2XML_V1
     for (int i = 0; i < JSEQ.length; i++)
     {
       af.viewport.setSequenceColour(af.viewport.getAlignment()
-              .getSequenceAt(i), new java.awt.Color(JSEQ[i].getColour()));
+              .getSequenceAt(i), new Colour(JSEQ[i].getColour()));
     }
 
     // af.changeColour() );
index 0719fa0..cd2ecfe 100755 (executable)
@@ -25,6 +25,7 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.SequencePoint;
 import jalview.math.RotatableMatrix;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
 
@@ -136,6 +137,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
 
     addMouseWheelListener(new MouseWheelListener()
     {
+      @Override
       public void mouseWheelMoved(MouseWheelEvent e)
       {
         if (e.getWheelRotation() > 0)
@@ -162,6 +164,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
 
   boolean first = true;
 
+  @Override
   public void setPoints(Vector points, int npoint)
   {
     this.points = points;
@@ -327,7 +330,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
       dim = height;
     }
 
-    return (float) ((dim * scalefactor) / (2 * maxwidth));
+    return (dim * scalefactor) / (2 * maxwidth);
   }
 
   /**
@@ -352,6 +355,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * 
    * @return DOCUMENT ME!
    */
+  @Override
   public Dimension getPreferredSize()
   {
     if (prefsize != null)
@@ -369,6 +373,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * 
    * @return DOCUMENT ME!
    */
+  @Override
   public Dimension getMinimumSize()
   {
     return getPreferredSize();
@@ -380,6 +385,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * @param g
    *          DOCUMENT ME!
    */
+  @Override
   public void paintComponent(Graphics g1)
   {
 
@@ -474,8 +480,8 @@ public class RotatableCanvas extends JPanel implements MouseListener,
     for (int i = 0; i < npoint; i++)
     {
       SequencePoint sp = (SequencePoint) points.elementAt(i);
-      int x = (int) ((float) (sp.coord[0] - centre[0]) * scale) + halfwidth;
-      int y = (int) ((float) (sp.coord[1] - centre[1]) * scale)
+      int x = (int) ((sp.coord[0] - centre[0]) * scale) + halfwidth;
+      int y = (int) ((sp.coord[1] - centre[1]) * scale)
               + halfheight;
       float z = sp.coord[1] - centre[2];
 
@@ -485,7 +491,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
       }
       else
       {
-        g.setColor(av.getSequenceColour(sp.sequence));
+        g.setColor(ColorUtils.getColor(av.getSequenceColour(sp.sequence)));
       }
 
       if (av.getSelectionGroup() != null)
@@ -546,6 +552,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void keyTyped(KeyEvent evt)
   {
   }
@@ -556,6 +563,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void keyReleased(KeyEvent evt)
   {
   }
@@ -566,6 +574,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void keyPressed(KeyEvent evt)
   {
     if (evt.getKeyCode() == KeyEvent.VK_UP)
@@ -597,6 +606,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void mouseClicked(MouseEvent evt)
   {
   }
@@ -607,6 +617,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void mouseEntered(MouseEvent evt)
   {
   }
@@ -617,6 +628,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void mouseExited(MouseEvent evt)
   {
   }
@@ -627,6 +639,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void mouseReleased(MouseEvent evt)
   {
   }
@@ -637,6 +650,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void mousePressed(MouseEvent evt)
   {
     int x = evt.getX();
@@ -689,6 +703,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
   // controller.handleSequenceSelectionEvent(new
   // SequenceSelectionEvent(this,sel));
   // }
+  @Override
   public void mouseMoved(MouseEvent evt)
   {
     SequenceI found = findPoint(evt.getX(), evt.getY());
@@ -709,6 +724,7 @@ public class RotatableCanvas extends JPanel implements MouseListener,
    * @param evt
    *          DOCUMENT ME!
    */
+  @Override
   public void mouseDragged(MouseEvent evt)
   {
     mx = evt.getX();
@@ -724,8 +740,8 @@ public class RotatableCanvas extends JPanel implements MouseListener,
     {
       rotmat.setIdentity();
 
-      rotmat.rotate((float) (my - omy), 'x');
-      rotmat.rotate((float) (mx - omx), 'y');
+      rotmat.rotate(my - omy, 'x');
+      rotmat.rotate(mx - omx, 'y');
 
       for (int i = 0; i < npoint; i++)
       {
@@ -772,8 +788,8 @@ public class RotatableCanvas extends JPanel implements MouseListener,
     for (int i = 0; i < npoint; i++)
     {
       SequencePoint sp = (SequencePoint) points.elementAt(i);
-      int tmp1 = (int) (((sp.coord[0] - centre[0]) * scale) + ((float) getWidth() / 2.0));
-      int tmp2 = (int) (((sp.coord[1] - centre[1]) * scale) + ((float) getHeight() / 2.0));
+      int tmp1 = (int) (((sp.coord[0] - centre[0]) * scale) + (getWidth() / 2.0));
+      int tmp2 = (int) (((sp.coord[1] - centre[1]) * scale) + (getHeight() / 2.0));
 
       if ((tmp1 > x1) && (tmp1 < x2) && (tmp2 > y1) && (tmp2 < y2))
       {
@@ -813,9 +829,9 @@ public class RotatableCanvas extends JPanel implements MouseListener,
     for (int i = 0; i < npoint; i++)
     {
       SequencePoint sp = (SequencePoint) points.elementAt(i);
-      int px = (int) ((float) (sp.coord[0] - centre[0]) * scale)
+      int px = (int) ((sp.coord[0] - centre[0]) * scale)
               + halfwidth;
-      int py = (int) ((float) (sp.coord[1] - centre[1]) * scale)
+      int py = (int) ((sp.coord[1] - centre[1]) * scale)
               + halfheight;
 
       if ((Math.abs(px - x) < 3) && (Math.abs(py - y) < 3))
index 760ece0..1355b9b 100755 (executable)
@@ -26,6 +26,7 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.renderer.ScaleRenderer;
 import jalview.renderer.ScaleRenderer.ScaleMark;
+import jalview.util.ColorUtils;
 
 import java.awt.BasicStroke;
 import java.awt.BorderLayout;
@@ -848,7 +849,7 @@ public class SeqCanvas extends JComponent
               else
               {
                 g.setStroke(new BasicStroke());
-                g.setColor(group.getOutlineColour());
+                g.setColor(ColorUtils.getColor(group.getOutlineColour()));
               }
             }
           }
index 64fe053..3003c01 100755 (executable)
  */
 package jalview.gui;
 
+import jalview.api.ColorI;
 import jalview.api.FeatureRenderer;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
+import jalview.util.ColorUtils;
 
 import java.awt.Color;
 import java.awt.FontMetrics;
@@ -83,7 +86,7 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
   }
 
   @Override
-  public Color getResidueBoxColour(SequenceI seq, int i)
+  public ColorI getResidueBoxColour(SequenceI seq, int i)
   {
     // rate limiting step when rendering overview for lots of groups
     allGroups = av.getAlignment().findAllGroups(seq);
@@ -100,7 +103,7 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
       getBoxColour(av.getGlobalColourScheme(), seq, i);
     }
 
-    return resBoxColour;
+    return new Colour(resBoxColour);
   }
 
   /**
@@ -114,12 +117,12 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
    * @return
    */
   @Override
-  public Color getResidueColour(final SequenceI seq, int position,
+  public ColorI getResidueColour(final SequenceI seq, int position,
           FeatureRenderer fr)
   {
     // TODO replace 8 or so code duplications with calls to this method
     // (refactored as needed)
-    Color col = getResidueBoxColour(seq, position);
+    ColorI col = getResidueBoxColour(seq, position);
 
     if (fr != null)
     {
@@ -298,7 +301,7 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
     {
       end = seq.getLength() - 1;
     }
-    graphics.setColor(av.getTextColour());
+    graphics.setColor(ColorUtils.getColor(av.getTextColour()));
 
     if (monospacedFont && av.getShowText() && allGroups.length == 0
             && !av.getColourText() && av.getThresholdTextColour() == 0)
@@ -325,7 +328,7 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
       for (int i = start; i <= end; i++)
       {
 
-        graphics.setColor(av.getTextColour());
+        graphics.setColor(ColorUtils.getColor(av.getTextColour()));
         getboxColour = false;
         s = seq.getCharAt(i);
 
@@ -357,13 +360,13 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
               if (resBoxColour.getRed() + resBoxColour.getBlue()
                       + resBoxColour.getGreen() < currentSequenceGroup.thresholdTextColour)
               {
-                graphics.setColor(currentSequenceGroup.textColour2);
+                graphics.setColor(ColorUtils.getColor(currentSequenceGroup.textColour2));
               }
             }
           }
           else
           {
-            graphics.setColor(currentSequenceGroup.textColour);
+            graphics.setColor(ColorUtils.getColor(currentSequenceGroup.textColour));
           }
           if (!isarep && !isgrep
                   && currentSequenceGroup.getShowNonconserved()) // todo
@@ -407,7 +410,7 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
             if (resBoxColour.getRed() + resBoxColour.getBlue()
                     + resBoxColour.getGreen() < av.getThresholdTextColour())
             {
-              graphics.setColor(av.getTextColour2());
+              graphics.setColor(ColorUtils.getColor(av.getTextColour2()));
             }
           }
           if (!isarep && av.getShowUnconserved())
index 39d9c1d..37cf6b6 100644 (file)
@@ -21,6 +21,7 @@
 package jalview.gui;
 
 import jalview.datamodel.SequenceGroup;
+import jalview.schemes.Colour;
 import jalview.util.MessageManager;
 
 import java.awt.BorderLayout;
@@ -141,14 +142,14 @@ public class TextColourChooser
     {
       if (sg == null)
       {
-        ap.av.setTextColour(new Color(original1));
-        ap.av.setTextColour2(new Color(original2));
+        ap.av.setTextColour(new Colour(original1));
+        ap.av.setTextColour2(new Colour(original2));
         ap.av.setThresholdTextColour(originalThreshold);
       }
       else
       {
-        sg.textColour = new Color(original1);
-        sg.textColour2 = new Color(original2);
+        sg.textColour = new Colour(original1);
+        sg.textColour2 = new Colour(original2);
         sg.thresholdTextColour = originalThreshold;
       }
     }
@@ -158,7 +159,7 @@ public class TextColourChooser
   {
     if (sg == null)
     {
-      ap.av.setTextColour(col);
+      ap.av.setTextColour(new Colour(col));
       if (ap.av.getColourAppliesToAllGroups())
       {
         setGroupTextColour();
@@ -166,7 +167,7 @@ public class TextColourChooser
     }
     else
     {
-      sg.textColour = col;
+      sg.textColour = new Colour(col);
     }
 
     ap.paintAlignment(true);
@@ -176,7 +177,7 @@ public class TextColourChooser
   {
     if (sg == null)
     {
-      ap.av.setTextColour2(col);
+      ap.av.setTextColour2(new Colour(col));
       if (ap.av.getColourAppliesToAllGroups())
       {
         setGroupTextColour();
@@ -184,7 +185,7 @@ public class TextColourChooser
     }
     else
     {
-      sg.textColour2 = col;
+      sg.textColour2 = new Colour(col);
     }
 
     ap.paintAlignment(true);
index 6bfea9e..874513e 100755 (executable)
@@ -27,11 +27,13 @@ import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.SequenceNode;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.schemes.ResidueProperties;
 import jalview.schemes.UserColourScheme;
 import jalview.structure.SelectionSource;
+import jalview.util.ColorUtils;
 import jalview.util.Format;
 import jalview.util.MappingUtils;
 import jalview.util.MessageManager;
@@ -246,7 +248,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
         }
         else
         {
-          g.setColor(av.getSequenceColour(seq).darker());
+          g.setColor(ColorUtils.getColor(av.getSequenceColour(seq))
+                  .darker());
         }
       }
       else
@@ -523,7 +526,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
           for (int a = 0; a < aps.length; a++)
           {
             final SequenceI seq = (SequenceI) node.element();
-            aps[a].av.setSequenceColour(seq, c);
+            aps[a].av.setSequenceColour(seq, new Colour(c));
           }
         }
       }
@@ -1042,7 +1045,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
             codingComplement.getAlignment().addGroup(mappedGroup);
             for (SequenceI seq : mappedGroup.getSequences())
             {
-              codingComplement.setSequenceColour(seq, col.brighter());
+              codingComplement.setSequenceColour(seq,
+                      new Colour(col.brighter()));
             }
           }
         }
index d738882..ad3b630 100755 (executable)
@@ -30,6 +30,7 @@ import jalview.datamodel.GraphLine;
 import jalview.datamodel.HiddenSequences;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.schemes.ResidueProperties;
@@ -1670,11 +1671,13 @@ public class AnnotationFile
         }
         else if (key.equalsIgnoreCase("textCol1"))
         {
-          sg.textColour = new UserColourScheme(value).findColour('A');
+          sg.textColour = new Colour(
+                  new UserColourScheme(value).findColour('A'));
         }
         else if (key.equalsIgnoreCase("textCol2"))
         {
-          sg.textColour2 = new UserColourScheme(value).findColour('A');
+          sg.textColour2 = new Colour(
+                  new UserColourScheme(value).findColour('A'));
         }
         else if (key.equalsIgnoreCase("textColThreshold"))
         {
index aa38540..46467c5 100755 (executable)
@@ -48,6 +48,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.StringTokenizer;
 
 /**
  * Parses and writes features files, which may be in Jalview, GFF2 or GFF3
@@ -386,6 +387,227 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
   }
 
   /**
+   * Process a feature type colour specification
+   * 
+   * @param line
+   *          the current input line (for error messages only)
+   * @param featureType
+   *          the first token on the line
+   * @param gffColumns
+   *          holds tokens on the line
+   * @param colours
+   *          map to which to add derived colour specification
+   */
+  protected void parseFeatureColour(String line, String featureType,
+          String[] gffColumns, Map<String, FeatureColourI> colours)
+  {
+    FeatureColourI colour = null;
+    String colscheme = gffColumns[1];
+    if (colscheme.indexOf("|") > -1
+            || colscheme.trim().equalsIgnoreCase("label"))
+    {
+      colour = parseGraduatedColourScheme(line, colscheme);
+    }
+    else
+    {
+      UserColourScheme ucs = new UserColourScheme(colscheme);
+      colour = new FeatureColour(ucs.findColour('A'));
+    }
+    if (colour != null)
+    {
+      colours.put(featureType, colour);
+    }
+  }
+
+  /**
+   * Parse a Jalview graduated colour descriptor
+   * 
+   * @param line
+   * @param colourDescriptor
+   * @return
+   */
+  protected FeatureColourI parseGraduatedColourScheme(String line,
+          String colourDescriptor)
+  {
+    // Parse '|' separated graduated colourscheme fields:
+    // [label|][mincolour|maxcolour|[absolute|]minvalue|maxvalue|thresholdtype|thresholdvalue]
+    // can either provide 'label' only, first is optional, next two
+    // colors are required (but may be
+    // left blank), next is optional, nxt two min/max are required.
+    // first is either 'label'
+    // first/second and third are both hexadecimal or word equivalent
+    // colour.
+    // next two are values parsed as floats.
+    // fifth is either 'above','below', or 'none'.
+    // sixth is a float value and only required when fifth is either
+    // 'above' or 'below'.
+    StringTokenizer gcol = new StringTokenizer(colourDescriptor, "|", true);
+    // set defaults
+    float min = Float.MIN_VALUE, max = Float.MAX_VALUE;
+    boolean labelCol = false;
+    // Parse spec line
+    String mincol = gcol.nextToken();
+    if (mincol == "|")
+    {
+      System.err
+              .println("Expected either 'label' or a colour specification in the line: "
+                      + line);
+      return null;
+    }
+    String maxcol = null;
+    if (mincol.toLowerCase().indexOf("label") == 0)
+    {
+      labelCol = true;
+      mincol = (gcol.hasMoreTokens() ? gcol.nextToken() : null); // skip '|'
+      mincol = (gcol.hasMoreTokens() ? gcol.nextToken() : null);
+    }
+    String abso = null, minval, maxval;
+    if (mincol != null)
+    {
+      // at least four more tokens
+      if (mincol.equals("|"))
+      {
+        mincol = "";
+      }
+      else
+      {
+        gcol.nextToken(); // skip next '|'
+      }
+      // continue parsing rest of line
+      maxcol = gcol.nextToken();
+      if (maxcol.equals("|"))
+      {
+        maxcol = "";
+      }
+      else
+      {
+        gcol.nextToken(); // skip next '|'
+      }
+      abso = gcol.nextToken();
+      gcol.nextToken(); // skip next '|'
+      if (abso.toLowerCase().indexOf("abso") != 0)
+      {
+        minval = abso;
+        abso = null;
+      }
+      else
+      {
+        minval = gcol.nextToken();
+        gcol.nextToken(); // skip next '|'
+      }
+      maxval = gcol.nextToken();
+      if (gcol.hasMoreTokens())
+      {
+        gcol.nextToken(); // skip next '|'
+      }
+      try
+      {
+        if (minval.length() > 0)
+        {
+          min = Float.valueOf(minval);
+        }
+      } catch (Exception e)
+      {
+        System.err
+                .println("Couldn't parse the minimum value for graduated colour for type ("
+                        + colourDescriptor
+                        + ") - did you misspell 'auto' for the optional automatic colour switch ?");
+        e.printStackTrace();
+      }
+      try
+      {
+        if (maxval.length() > 0)
+        {
+          max = Float.valueOf(maxval);
+        }
+      } catch (Exception e)
+      {
+        System.err
+                .println("Couldn't parse the maximum value for graduated colour for type ("
+                        + colourDescriptor + ")");
+        e.printStackTrace();
+      }
+    }
+    else
+    {
+      // add in some dummy min/max colours for the label-only
+      // colourscheme.
+      mincol = "FFFFFF";
+      maxcol = "000000";
+    }
+
+    FeatureColourI colour = null;
+    try
+    {
+      colour = new FeatureColour(
+              new UserColourScheme(mincol).findColour('A'),
+              new UserColourScheme(maxcol).findColour('A'), min, max);
+    } catch (Exception e)
+    {
+      System.err.println("Couldn't parse the graduated colour scheme ("
+              + colourDescriptor + ")");
+      e.printStackTrace();
+    }
+    if (colour != null)
+    {
+      colour.setColourByLabel(labelCol);
+      colour.setAutoScaled(abso == null);
+      // add in any additional parameters
+      String ttype = null, tval = null;
+      boolean hasThreshold = false;
+      if (gcol.hasMoreTokens())
+      {
+        // threshold type and possibly a threshold value
+        ttype = gcol.nextToken();
+        if (ttype.toLowerCase().startsWith("below"))
+        {
+          colour.setBelowThreshold(true);
+          hasThreshold = true;
+        }
+        else if (ttype.toLowerCase().startsWith("above"))
+        {
+          colour.setAboveThreshold(true);
+          hasThreshold = true;
+        }
+        else
+        {
+          if (!ttype.toLowerCase().startsWith("no"))
+          {
+            System.err.println("Ignoring unrecognised threshold type : "
+                    + ttype);
+          }
+        }
+      }
+      if (hasThreshold)
+      {
+        try
+        {
+          gcol.nextToken();
+          tval = gcol.nextToken();
+          colour.setThreshold(new Float(tval).floatValue());
+        } catch (Exception e)
+        {
+          System.err.println("Couldn't parse threshold value as a float: ("
+                  + tval + ")");
+          e.printStackTrace();
+        }
+      }
+      // parse the thresh-is-min token ?
+      if (gcol.hasMoreTokens())
+      {
+        System.err
+                .println("Ignoring additional tokens in parameters in graduated colour specification\n");
+        while (gcol.hasMoreTokens())
+        {
+          System.err.println("|" + gcol.nextToken());
+        }
+        System.err.println("\n");
+      }
+    }
+    return colour;
+  }
+
+  /**
    * clear any temporary handles used to speed up ID matching
    */
   protected void resetMatcher()
@@ -499,7 +721,7 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
    * 
    * @param sequences
    *          source of features
-   * @param visible
+   * @param featureColours
    *          hash of Colours for each feature type
    * @param visOnly
    *          when true only feature types in 'visible' will be output
@@ -509,27 +731,28 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
    * @return features file contents
    */
   public String printJalviewFormat(SequenceI[] sequences,
-          Map<String, FeatureColourI> visible, boolean visOnly,
+          Map<String, FeatureColourI> featureColours, boolean visOnly,
           boolean nonpos)
   {
     StringBuilder out = new StringBuilder(256);
     boolean featuresGen = false;
-    if (visOnly && !nonpos && (visible == null || visible.size() < 1))
+    if (visOnly && !nonpos
+            && (featureColours == null || featureColours.size() < 1))
     {
       // no point continuing.
       return "No Features Visible";
     }
 
-    if (visible != null && visOnly)
+    if (featureColours != null && visOnly)
     {
       // write feature colours only if we're given them and we are generating
       // viewed features
       // TODO: decide if feature links should also be written here ?
-      Iterator<String> en = visible.keySet().iterator();
+      Iterator<String> en = featureColours.keySet().iterator();
       while (en.hasNext())
       {
-        String featureType = en.next().toString();
-        FeatureColourI colour = visible.get(featureType);
+        String featureType = en.next();
+        FeatureColourI colour = featureColours.get(featureType);
         out.append(colour.toJalviewFormat(featureType)).append(newline);
       }
     }
@@ -549,7 +772,7 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
         {
           isnonpos = features[j].begin == 0 && features[j].end == 0;
           if ((!nonpos && isnonpos)
-                  || (!isnonpos && visOnly && !visible
+                  || (!isnonpos && visOnly && !featureColours
                           .containsKey(features[j].type)))
           {
             continue;
@@ -589,7 +812,7 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
           {
             isnonpos = sequenceFeature.begin == 0 && sequenceFeature.end == 0;
             if ((!nonpos && isnonpos)
-                    || (!isnonpos && visOnly && !visible
+                    || (!isnonpos && visOnly && !featureColours
                             .containsKey(sequenceFeature.type)))
             {
               // skip if feature is nonpos and we ignore them or if we only
@@ -757,14 +980,15 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
    * 
    * @param sequences
    *          the sequences whose features are to be output
-   * @param visible
+   * @param featureColours
    *          a map whose keys are the type names of visible features
    * @param outputVisibleOnly
    * @param includeNonPositionalFeatures
    * @return
    */
   public String printGffFormat(SequenceI[] sequences,
-          Map<String, FeatureColourI> visible, boolean outputVisibleOnly,
+          Map<String, FeatureColourI> featureColours,
+          boolean outputVisibleOnly,
           boolean includeNonPositionalFeatures)
   {
     StringBuilder out = new StringBuilder(256);
@@ -790,7 +1014,7 @@ public class FeaturesFile extends AlignFile implements FeaturesSourceI
           // TODO why the test !isnonpos here?
           // what about not visible non-positional features?
           if (!isnonpos && outputVisibleOnly
-                  && !visible.containsKey(sf.type))
+                  && !featureColours.containsKey(sf.type))
           {
             /*
              * ignore not visible features if not wanted
index df0dc06..6c6224c 100755 (executable)
  */
 package jalview.io;
 
+import jalview.api.ColorI;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignViewport;
 import jalview.gui.AlignmentPanel;
 import jalview.gui.FeatureRenderer;
 import jalview.gui.SequenceRenderer;
+import jalview.schemes.Colour;
 import jalview.util.MessageManager;
 
-import java.awt.Color;
 import java.awt.Font;
 import java.io.PrintWriter;
 
@@ -40,7 +41,7 @@ public class HTMLOutput
 
   jalview.renderer.seqfeatures.FeatureRenderer fr;
 
-  Color color;
+  ColorI color;
 
   public HTMLOutput(AlignmentPanel ap, SequenceRenderer sr,
           FeatureRenderer fr1)
@@ -155,7 +156,7 @@ public class HTMLOutput
         }
         else
         {
-          color = Color.white;
+          color = Colour.white;
         }
 
         if (color.getRGB() < -1)
@@ -257,7 +258,7 @@ public class HTMLOutput
           }
           else
           {
-            color = Color.white;
+            color = Colour.white;
           }
 
           if (color.getRGB() < -1)
index 4e1b261..147d7f5 100644 (file)
@@ -30,6 +30,7 @@ import jalview.gui.HTMLOptions;
 import jalview.gui.IProgressIndicator;
 import jalview.gui.OOMWarning;
 import jalview.math.AlignmentDimension;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 
 import java.awt.Color;
@@ -340,7 +341,7 @@ public class HtmlSvgOutput
       }
       else
       {
-        currentColor = av.getSequenceColour(seq);
+        currentColor = ColorUtils.getColor(av.getSequenceColour(seq));
         currentTextColor = Color.black;
       }
       pg[0].setColor(currentColor);
index 653c071..94e498d 100644 (file)
@@ -46,6 +46,7 @@ import jalview.json.binding.biojson.v1.ColourSchemeMapper;
 import jalview.json.binding.biojson.v1.SequenceFeaturesPojo;
 import jalview.json.binding.biojson.v1.SequenceGrpPojo;
 import jalview.json.binding.biojson.v1.SequencePojo;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.schemes.UserColourScheme;
 import jalview.viewmodel.seqfeatures.FeaturesDisplayed;
@@ -344,7 +345,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
                   String.valueOf(seq.hashCode()));
 
           String featureColour = (fr == null) ? null : jalview.util.Format
-                  .getHexString(fr.findFeatureColour(Color.white, seq,
+                  .getHexString(fr.findFeatureColour(Colour.white, seq,
                           seq.findIndex(sf.getBegin())));
           jsonFeature.setXstart(seq.findIndex(sf.getBegin()) - 1);
           jsonFeature.setXend(seq.findIndex(sf.getEnd()));
index ecce1a3..19dc9ee 100644 (file)
@@ -1,11 +1,11 @@
 package jalview.io;
 
+import jalview.api.ColorI;
 import jalview.api.FeatureColourI;
+import jalview.schemes.Colour;
 import jalview.schemes.FeatureColour;
 import jalview.schemes.FeatureSettingsAdapter;
 
-import java.awt.Color;
-
 public class PDBFeatureSettings extends FeatureSettingsAdapter
 {
 
@@ -29,9 +29,9 @@ public class PDBFeatureSettings extends FeatureSettingsAdapter
       {
 
         @Override
-        public Color getColour()
+        public ColorI getColour()
         {
-          return Color.RED;
+          return Colour.red;
         }
       };
     }
index b007365..e5f0b57 100644 (file)
 package jalview.renderer.seqfeatures;
 
 import jalview.api.AlignViewportI;
+import jalview.api.ColorI;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
+import jalview.schemes.Colour;
 import jalview.viewmodel.seqfeatures.FeatureRendererModel;
 
 import java.awt.AlphaComposite;
@@ -182,9 +184,14 @@ public class FeatureRenderer extends FeatureRendererModel
   BufferedImage offscreenImage;
 
   @Override
-  public Color findFeatureColour(Color initialCol, SequenceI seq, int res)
+  public ColorI findFeatureColour(ColorI initialCol, SequenceI seq, int res)
   {
-    return new Color(findFeatureColour(initialCol.getRGB(), seq, res));
+    return new Colour(findFeatureColour(initialCol.getRGB(), seq, res));
+  }
+
+  public ColorI findFeatureColour(Color initialCol, SequenceI seq, int res)
+  {
+    return findFeatureColour(new Colour(initialCol), seq, res);
   }
 
   /**
diff --git a/src/jalview/schemes/Colour.java b/src/jalview/schemes/Colour.java
new file mode 100644 (file)
index 0000000..0156641
--- /dev/null
@@ -0,0 +1,127 @@
+package jalview.schemes;
+
+import jalview.api.ColorI;
+
+import java.awt.Color;
+
+public class Colour implements ColorI
+{
+  public static final ColorI lightGray = new Colour(Color.lightGray);
+
+  public static final ColorI gray = new Colour(Color.gray);
+
+  public static final ColorI blue = new Colour(Color.blue);
+
+  public static final ColorI yellow = new Colour(Color.yellow);
+
+  public static final ColorI red = new Colour(Color.red);
+
+  public static final ColorI black = new Colour(Color.black);
+
+  public static final ColorI white = new Colour(Color.white);
+
+  public static final ColorI pink = new Colour(Color.pink);
+
+  public static final ColorI green = new Colour(Color.green);
+
+  public static final ColorI magenta = new Colour(Color.magenta);
+
+  public static final ColorI orange = new Colour(Color.orange);
+
+  private int greenValue;
+
+  private int blueValue;
+
+  private int redValue;
+
+  public Colour(Color c)
+  {
+    this(c.getRed(), c.getGreen(), c.getBlue());
+  }
+
+  /**
+   * Constructor given RGB values in the range 0-255
+   * 
+   * @param r
+   * @param g
+   * @param b
+   */
+  public Colour(int r, int g, int b)
+  {
+    redValue = r;
+    greenValue = g;
+    blueValue = b;
+  }
+
+  /**
+   * Constructor given an rgb value
+   * 
+   * @param rgb
+   */
+  public Colour(int rgb)
+  {
+    this((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, (rgb >> 0) & 0xFF);
+  }
+
+  /**
+   * Constructor given RGB values in the range 0-1
+   * 
+   * @param r
+   * @param g
+   * @param b
+   */
+  public Colour(float r, float g, float b)
+  {
+    this((int) (r * 255 + 0.5), (int) (g * 255 + 0.5),
+            (int) (b * 255 + 0.5));
+  }
+
+  @Override
+  public int getGreen()
+  {
+    return greenValue;
+  }
+
+  @Override
+  public int getBlue()
+  {
+    return blueValue;
+  }
+
+  @Override
+  public int getRed()
+  {
+    return redValue;
+  }
+
+  /**
+   * 
+   * @see java.awt.Color#Color(int, int, int, int)
+   */
+  @Override
+  public int getRGB()
+  {
+    int value = ((255 & 0xFF) << 24) |
+            ((redValue & 0xFF) << 16) |
+            ((greenValue & 0xFF) << 8)  |
+            ((blueValue & 0xFF) << 0);  
+    return value;
+  }
+
+  @Override
+  public int hashCode()
+  {
+    return getRGB();
+  }
+
+  @Override
+  public boolean equals(Object obj)
+  {
+    if (obj instanceof Colour)
+    {
+      return getRGB() == ((Colour) obj).getRGB();
+    }
+    return false;
+  }
+
+}
index bdc70c9..d0babf4 100644 (file)
@@ -1,5 +1,6 @@
 package jalview.schemes;
 
+import jalview.api.ColorI;
 import jalview.api.FeatureColourI;
 import jalview.datamodel.SequenceFeature;
 import jalview.util.Format;
@@ -14,11 +15,11 @@ public class FeatureColour implements FeatureColourI
 {
   private static final String BAR = "|";
 
-  final private Color colour;
+  final private ColorI colour;
 
-  final private Color minColour;
+  final private ColorI minColour;
 
-  final private Color maxColour;
+  final private ColorI maxColour;
 
   private boolean graduatedColour;
 
@@ -107,11 +108,11 @@ public class FeatureColour implements FeatureColourI
         throw new IllegalArgumentException("Invalid colour descriptor: "
                 + descriptor);
       }
-      return new FeatureColour(colour);
+      return new FeatureColour(new Colour(colour));
     }
 
     /*
-     * autoScaled == true: colours range over actual score range
+     * autoScaled == true: colours range over actual score range; 
      * autoScaled == false ('abso'): colours range over min/max range
      */
     boolean autoScaled = true;
@@ -192,9 +193,9 @@ public class FeatureColour implements FeatureColourI
     FeatureColour featureColour;
     try
     {
-      featureColour = new FeatureColour(
-              new UserColourScheme(mincol).findColour('A'),
-              new UserColourScheme(maxcol).findColour('A'), min, max);
+      featureColour = new FeatureColour(new Colour(new UserColourScheme(
+              mincol).findColour('A')), new Colour(new UserColourScheme(
+              maxcol).findColour('A')), min, max);
       featureColour.setColourByLabel(labelColour);
       featureColour.setAutoScaled(autoScaled);
       // add in any additional parameters
@@ -255,7 +256,7 @@ public class FeatureColour implements FeatureColourI
    */
   public FeatureColour()
   {
-    this((Color) null);
+    this((ColorI) null);
   }
 
   /**
@@ -263,10 +264,10 @@ public class FeatureColour implements FeatureColourI
    * 
    * @param c
    */
-  public FeatureColour(Color c)
+  public FeatureColour(ColorI c)
   {
-    minColour = Color.WHITE;
-    maxColour = Color.BLACK;
+    minColour = new Colour(Color.WHITE);
+    maxColour = new Colour(Color.BLACK);
     minRed = 0f;
     minGreen = 0f;
     minBlue = 0f;
@@ -276,6 +277,11 @@ public class FeatureColour implements FeatureColourI
     colour = c;
   }
 
+  public FeatureColour(Color c)
+  {
+    this(new Colour(c));
+  }
+
   /**
    * Constructor given a colour range and a score range
    * 
@@ -284,7 +290,7 @@ public class FeatureColour implements FeatureColourI
    * @param min
    * @param max
    */
-  public FeatureColour(Color low, Color high, float min, float max)
+  public FeatureColour(ColorI low, ColorI high, float min, float max)
   {
     graduatedColour = true;
     colour = null;
@@ -310,6 +316,10 @@ public class FeatureColour implements FeatureColourI
     }
   }
 
+  public FeatureColour(Color low, Color high, float min, float max)
+  {
+    this(new Colour(low), new Colour(high), min, max);
+  }
   /**
    * Copy constructor
    * 
@@ -317,7 +327,6 @@ public class FeatureColour implements FeatureColourI
    */
   public FeatureColour(FeatureColour fc)
   {
-    graduatedColour = fc.graduatedColour;
     colour = fc.colour;
     minColour = fc.minColour;
     maxColour = fc.maxColour;
@@ -356,33 +365,20 @@ public class FeatureColour implements FeatureColourI
     return graduatedColour;
   }
 
-  /**
-   * Sets the 'graduated colour' flag. If true, also sets 'colour by label' to
-   * false.
-   */
-  void setGraduatedColour(boolean b)
-  {
-    graduatedColour = b;
-    if (b)
-    {
-      setColourByLabel(false);
-    }
-  }
-
   @Override
-  public Color getColour()
+  public ColorI getColour()
   {
     return colour;
   }
 
   @Override
-  public Color getMinColour()
+  public ColorI getMinColour()
   {
     return minColour;
   }
 
   @Override
-  public Color getMaxColour()
+  public ColorI getMaxColour()
   {
     return maxColour;
   }
@@ -406,6 +402,20 @@ public class FeatureColour implements FeatureColourI
       setGraduatedColour(false);
     }
   }
+
+  /**
+   * Sets the 'graduated colour' flag. If true, also sets 'colour by label' to
+   * false.
+   */
+  void setGraduatedColour(boolean b)
+  {
+    graduatedColour = b;
+    if (b)
+    {
+      setColourByLabel(false);
+    }
+  }
+
   @Override
   public boolean isBelowThreshold()
   {
@@ -507,12 +517,12 @@ public class FeatureColour implements FeatureColourI
    * @return
    */
   @Override
-  public Color getColor(SequenceFeature feature)
+  public ColorI getColor(SequenceFeature feature)
   {
     if (isColourByLabel())
     {
-      return UserColourScheme
-              .createColourFromName(feature.getDescription());
+      return new Colour(UserColourScheme.createColourFromName(feature
+              .getDescription()));
     }
 
     if (!isGraduatedColour())
@@ -543,7 +553,8 @@ public class FeatureColour implements FeatureColourI
     {
       scl = 1f;
     }
-    return new Color(minRed + scl * deltaRed, minGreen + scl * deltaGreen, minBlue + scl * deltaBlue);
+    return new Colour(new Color(minRed + scl * deltaRed, minGreen + scl
+            * deltaGreen, minBlue + scl * deltaBlue));
   }
 
   /**
diff --git a/src/jalview/schemes/FeatureColourAdapter.java b/src/jalview/schemes/FeatureColourAdapter.java
new file mode 100644 (file)
index 0000000..869a8ca
--- /dev/null
@@ -0,0 +1,150 @@
+package jalview.schemes;
+
+import jalview.api.ColorI;
+import jalview.api.FeatureColourI;
+import jalview.datamodel.SequenceFeature;
+
+/**
+ * A convenience class with implementations of FeatureColourI methods. Override
+ * methods as required in subclasses.
+ */
+public class FeatureColourAdapter implements FeatureColourI
+{
+  @Override
+  public boolean isGraduatedColour()
+  {
+    return isColourByLabel() || isAboveThreshold() || isBelowThreshold();
+  }
+
+  @Override
+  public ColorI getColour()
+  {
+    return Colour.black;
+  }
+
+  @Override
+  public ColorI getMinColour()
+  {
+    return Colour.white;
+  }
+
+  @Override
+  public ColorI getMaxColour()
+  {
+    return Colour.black;
+  }
+
+  @Override
+  public boolean isColourByLabel()
+  {
+    return false;
+  }
+
+  @Override
+  public boolean isBelowThreshold()
+  {
+    return false;
+  }
+
+  @Override
+  public boolean isAboveThreshold()
+  {
+    return false;
+  }
+
+  @Override
+  public boolean isThresholdMinMax()
+  {
+    return false;
+  }
+
+  @Override
+  public float getThreshold()
+  {
+    return 0f;
+  }
+
+  @Override
+  public float getMax()
+  {
+    return 0;
+  }
+
+  @Override
+  public float getMin()
+  {
+    return 0;
+  }
+
+  @Override
+  public boolean hasThreshold()
+  {
+    return false;
+  }
+
+  @Override
+  public ColorI getColor(SequenceFeature feature)
+  {
+    return null;
+  }
+
+  @Override
+  public boolean isColored(SequenceFeature feature)
+  {
+    return false;
+  }
+
+  @Override
+  public void updateBounds(float min, float max)
+  {
+  }
+
+  @Override
+  public String toJalviewFormat(String featureType)
+  {
+    return null;
+  }
+
+  @Override
+  public void setThreshold(float f)
+  {
+  }
+
+  @Override
+  public boolean isAutoScaled()
+  {
+    return false;
+  }
+
+  @Override
+  public void setAutoScaled(boolean b)
+  {
+  }
+
+  @Override
+  public boolean isSimpleColour()
+  {
+    return false;
+  }
+
+  @Override
+  public void setAboveThreshold(boolean b)
+  {
+  }
+
+  @Override
+  public void setThresholdMinMax(boolean b)
+  {
+  }
+
+  @Override
+  public void setBelowThreshold(boolean b)
+  {
+  }
+
+  @Override
+  public void setColourByLabel(boolean b)
+  {
+  }
+
+}
index 31d1ded..4ba17d5 100644 (file)
 
 package jalview.util;
 
+import jalview.api.ColorI;
+
 import java.awt.Color;
 import java.util.Random;
 
 public class ColorUtils
 {
 
+  public static Color getColor(ColorI c)
+  {
+    return new Color(c.getRed(), c.getGreen(), c.getBlue());
+  }
   /**
    * Generates a random color, will mix with input color. Code taken from
    * http://stackoverflow
@@ -68,7 +74,7 @@ public class ColorUtils
    *      ://www.cgl.ucsf.edu/chimera/current/docs/UsersGuide/colortool.html#
    *      tkcode
    */
-  public static final String toTkCode(Color colour)
+  public static final String toTkCode(ColorI colour)
   {
     String colstring = "#" + ((colour.getRed() < 16) ? "0" : "")
             + Integer.toHexString(colour.getRed())
index d14e4ad..44963f3 100755 (executable)
  */
 package jalview.util;
 
+import jalview.api.ColorI;
+
+import java.awt.Color;
+
 /**
  * DOCUMENT ME!
  * 
@@ -270,7 +274,37 @@ public class Format
    *              if bad format
    * 
    */
-  public static String getHexString(java.awt.Color color)
+  public static String getHexString(final Color c)
+  {
+    return getHexString(new ColorI()
+    {
+
+      @Override
+      public int getRed()
+      {
+        return c.getRed();
+      }
+
+      @Override
+      public int getGreen()
+      {
+        return c.getGreen();
+      }
+
+      @Override
+      public int getBlue()
+      {
+        return c.getBlue();
+      }
+
+      @Override
+      public int getRGB()
+      {
+        return c.getRGB();
+      }
+    });
+  }
+  public static String getHexString(ColorI color)
   {
     String r;
     String g;
index 47227d5..01668a5 100644 (file)
@@ -25,6 +25,7 @@ import jalview.analysis.Conservation;
 import jalview.api.AlignCalcManagerI;
 import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
+import jalview.api.ColorI;
 import jalview.api.FeaturesDisplayedI;
 import jalview.api.ViewStyleI;
 import jalview.commands.CommandI;
@@ -42,6 +43,7 @@ import jalview.datamodel.SequenceCollectionI;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.schemes.Blosum62ColourScheme;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.PIDColourScheme;
 import jalview.schemes.ResidueProperties;
@@ -57,7 +59,6 @@ import jalview.workers.ComplementConsensusThread;
 import jalview.workers.ConsensusThread;
 import jalview.workers.StrucConsensusThread;
 
-import java.awt.Color;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.BitSet;
@@ -1252,7 +1253,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
 
   protected boolean showConsensus = true;
 
-  private Map<SequenceI, Color> sequenceColours = new HashMap<SequenceI, Color>();
+  private Map<SequenceI, ColorI> sequenceColours = new HashMap<SequenceI, ColorI>();
 
   protected SequenceAnnotationOrder sortAnnotationsBy = null;
 
@@ -2128,14 +2129,14 @@ public abstract class AlignmentViewport implements AlignViewportI,
   }
 
   @Override
-  public Color getSequenceColour(SequenceI seq)
+  public ColorI getSequenceColour(SequenceI seq)
   {
-    Color sqc = sequenceColours.get(seq);
-    return (sqc == null ? Color.white : sqc);
+    ColorI sqc = sequenceColours.get(seq);
+    return (sqc == null ? Colour.white : sqc);
   }
 
   @Override
-  public void setSequenceColour(SequenceI seq, Color col)
+  public void setSequenceColour(SequenceI seq, ColorI col)
   {
     if (col == null)
     {
@@ -2292,7 +2293,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
    * @see jalview.api.ViewStyleI#getTextColour()
    */
   @Override
-  public Color getTextColour()
+  public ColorI getTextColour()
   {
     return viewStyle.getTextColour();
   }
@@ -2302,7 +2303,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
    * @see jalview.api.ViewStyleI#getTextColour2()
    */
   @Override
-  public Color getTextColour2()
+  public ColorI getTextColour2()
   {
     return viewStyle.getTextColour2();
   }
@@ -2373,7 +2374,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
    * @see jalview.api.ViewStyleI#setTextColour(java.awt.Color)
    */
   @Override
-  public void setTextColour(Color textColour)
+  public void setTextColour(ColorI textColour)
   {
     viewStyle.setTextColour(textColour);
   }
@@ -2393,7 +2394,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
    * @see jalview.api.ViewStyleI#setTextColour2(java.awt.Color)
    */
   @Override
-  public void setTextColour2(Color textColour2)
+  public void setTextColour2(ColorI textColour2)
   {
     viewStyle.setTextColour2(textColour2);
   }
index d813fe2..9733081 100644 (file)
@@ -27,8 +27,10 @@ import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.renderer.seqfeatures.FeatureRenderer;
+import jalview.schemes.Colour;
 import jalview.schemes.FeatureColour;
 import jalview.schemes.UserColourScheme;
+import jalview.util.ColorUtils;
 
 import java.awt.Color;
 import java.beans.PropertyChangeListener;
@@ -65,6 +67,12 @@ public abstract class FeatureRendererModel implements
 
   protected AlignViewportI av;
 
+  /*
+   * map holds per feature type, {{min, max}, {min, max}} feature score
+   * values for positional and non-positional features respectively
+   */
+  private Map<String, float[][]> minmax = new Hashtable<String, float[][]>();
+
   @Override
   public AlignViewportI getViewport()
   {
@@ -191,8 +199,6 @@ public abstract class FeatureRendererModel implements
     renderOrder = neworder;
   }
 
-  protected Map<String, float[][]> minmax = new Hashtable<String, float[][]>();
-
   public Map<String, float[][]> getMinMax()
   {
     return minmax;
@@ -539,7 +545,7 @@ public abstract class FeatureRendererModel implements
     if (fc == null)
     {
       Color col = UserColourScheme.createColourFromName(featureType);
-      fc = new FeatureColour(col);
+      fc = new FeatureColour(new Colour(col));
       featureColours.put(featureType, fc);
     }
     return fc;
@@ -555,7 +561,7 @@ public abstract class FeatureRendererModel implements
   public Color getColour(SequenceFeature feature)
   {
     FeatureColourI fc = getFeatureStyle(feature.getType());
-    return fc.getColor(feature);
+    return ColorUtils.getColor(fc.getColor(feature));
   }
 
   protected boolean showFeature(SequenceFeature sequenceFeature)
@@ -759,9 +765,6 @@ public abstract class FeatureRendererModel implements
     return renderOrder != null;
   }
 
-  /**
-   * Returns feature types in ordering of rendering, where last means on top
-   */
   public List<String> getRenderOrder()
   {
     if (renderOrder == null)
@@ -811,7 +814,7 @@ public abstract class FeatureRendererModel implements
    * @return list of groups
    */
   @Override
-  public List getGroups(boolean visible)
+  public List<String> getGroups(boolean visible)
   {
     if (featureGroups != null)
     {
@@ -882,10 +885,6 @@ public abstract class FeatureRendererModel implements
     return av.getFeaturesDisplayed();
   }
 
-  /**
-   * Returns a (possibly empty) list of visible feature types, in render order
-   * (last is on top)
-   */
   @Override
   public List<String> getDisplayedFeatureTypes()
   {
index dc2ae11..296e9fd 100644 (file)
@@ -94,8 +94,7 @@ public class FeatureRendererSettings implements Cloneable
     {
       String next = en.next();
       FeatureColourI val = featureColours.get(next);
-      // if (val instanceof GraduatedColor)
-      if (val.isGraduatedColour() || val.isColourByLabel()) // why this test?
+      if (!val.isSimpleColour())
       {
         featureColours.put(next, new FeatureColour((FeatureColour) val));
       }
index 14a1bde..0e66de1 100644 (file)
@@ -20,9 +20,9 @@
  */
 package jalview.viewmodel.styles;
 
+import jalview.api.ColorI;
 import jalview.api.ViewStyleI;
-
-import java.awt.Color;
+import jalview.schemes.Colour;
 
 /**
  * A container for holding alignment view properties. View properties are
@@ -133,9 +133,9 @@ public class ViewStyle implements ViewStyleI
    */
   protected boolean showUnconserved = false;
 
-  Color textColour = Color.black;
+  ColorI textColour = Colour.black;
 
-  Color textColour2 = Color.white;
+  ColorI textColour2 = Colour.white;
 
   /**
    * PID or consensus threshold
@@ -519,7 +519,7 @@ public class ViewStyle implements ViewStyleI
    * @return the textColour
    */
   @Override
-  public Color getTextColour()
+  public ColorI getTextColour()
   {
     return textColour;
   }
@@ -528,7 +528,7 @@ public class ViewStyle implements ViewStyleI
    * @return the textColour2
    */
   @Override
-  public Color getTextColour2()
+  public ColorI getTextColour2()
   {
     return textColour2;
   }
@@ -906,7 +906,7 @@ public class ViewStyle implements ViewStyleI
    *          the textColour to set
    */
   @Override
-  public void setTextColour(Color textColour)
+  public void setTextColour(ColorI textColour)
   {
     this.textColour = textColour;
   }
@@ -916,7 +916,7 @@ public class ViewStyle implements ViewStyleI
    *          the textColour2 to set
    */
   @Override
-  public void setTextColour2(Color textColour2)
+  public void setTextColour2(ColorI textColour2)
   {
     this.textColour2 = textColour2;
   }
index 0cf76e0..ea6310a 100644 (file)
@@ -20,7 +20,6 @@
  */
 package jalview.ws.jws2;
 
-import jalview.api.AlignCalcWorkerI;
 import jalview.api.FeatureColourI;
 import jalview.bin.Cache;
 import jalview.datamodel.AlignmentAnnotation;
@@ -28,6 +27,7 @@ import jalview.datamodel.GraphLine;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
+import jalview.schemes.Colour;
 import jalview.schemes.FeatureColour;
 import jalview.schemes.UserColourScheme;
 import jalview.ws.jws2.jabaws2.Jws2Instance;
@@ -342,7 +342,8 @@ public class AADisorderClient extends JabawsCalcWorker
             {
               // set graduated color as fading to white for minimum, and
               // autoscaling to values on alignment
-              FeatureColourI ggc = new FeatureColour(Color.white,
+              FeatureColourI ggc = new FeatureColour(
+                      new Colour(Color.white),
                       gc.getColour(), Float.MIN_VALUE, Float.MAX_VALUE);
               ggc.setAutoScaled(true);
               fr.setColour(ft, ggc);
index 0406128..0da7285 100644 (file)
@@ -26,10 +26,12 @@ import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.analysis.AlignSeq;
+import jalview.api.ColorI;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
+import jalview.schemes.Colour;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.TaylorColourScheme;
 import jalview.structure.StructureImportSettings;
@@ -138,10 +140,10 @@ public class PDBChainTest
     c.makeBond(a2, a3);
     c.setChainColours(Color.PINK);
     assertEquals(2, c.bonds.size());
-    assertEquals(Color.PINK, c.bonds.get(0).startCol);
-    assertEquals(Color.PINK, c.bonds.get(0).endCol);
-    assertEquals(Color.PINK, c.bonds.get(1).startCol);
-    assertEquals(Color.PINK, c.bonds.get(1).endCol);
+    assertEquals(Colour.pink, c.bonds.get(0).startCol);
+    assertEquals(Colour.pink, c.bonds.get(0).endCol);
+    assertEquals(Colour.pink, c.bonds.get(1).startCol);
+    assertEquals(Colour.pink, c.bonds.get(1).endCol);
   }
 
   /**
@@ -151,8 +153,8 @@ public class PDBChainTest
   @Test(groups = { "Functional" })
   public void testSetChainColours_colourScheme()
   {
-    Color alaColour = new Color(204, 255, 0);
-    Color glyColour = new Color(255, 153, 0);
+    ColorI alaColour = new Colour(204, 255, 0);
+    ColorI glyColour = new Colour(255, 153, 0);
     a1.resName = "ALA";
     a2.resName = "GLY";
     a3.resName = "XXX"; // no colour defined
@@ -172,20 +174,20 @@ public class PDBChainTest
     // bond a2 to a3 - no colour found for a3
     // exception handling defaults to gray
     b = c.bonds.get(2);
-    assertEquals(Color.gray, b.startCol);
-    assertEquals(Color.gray, b.endCol);
+    assertEquals(Colour.gray, b.startCol);
+    assertEquals(Colour.gray, b.endCol);
   }
 
   @Test(groups = { "Functional" })
   public void testGetChargeColour()
   {
-    assertEquals(Color.red, PDBChain.getChargeColour("ASP"));
-    assertEquals(Color.red, PDBChain.getChargeColour("GLU"));
-    assertEquals(Color.blue, PDBChain.getChargeColour("LYS"));
-    assertEquals(Color.blue, PDBChain.getChargeColour("ARG"));
-    assertEquals(Color.yellow, PDBChain.getChargeColour("CYS"));
-    assertEquals(Color.lightGray, PDBChain.getChargeColour("ALA"));
-    assertEquals(Color.lightGray, PDBChain.getChargeColour(null));
+    assertEquals(Colour.red, PDBChain.getChargeColour("ASP"));
+    assertEquals(Colour.red, PDBChain.getChargeColour("GLU"));
+    assertEquals(Colour.blue, PDBChain.getChargeColour("LYS"));
+    assertEquals(Colour.blue, PDBChain.getChargeColour("ARG"));
+    assertEquals(Colour.yellow, PDBChain.getChargeColour("CYS"));
+    assertEquals(Colour.lightGray, PDBChain.getChargeColour("ALA"));
+    assertEquals(Colour.lightGray, PDBChain.getChargeColour(null));
   }
 
   /**
@@ -205,16 +207,16 @@ public class PDBChainTest
     assertEquals(3, c.bonds.size());
     // bond a1 to a2
     Bond b = c.bonds.get(0);
-    assertEquals(Color.red, b.startCol);
-    assertEquals(Color.blue, b.endCol);
+    assertEquals(Colour.red, b.startCol);
+    assertEquals(Colour.blue, b.endCol);
     // bond a2 to a3
     b = c.bonds.get(1);
-    assertEquals(Color.blue, b.startCol);
-    assertEquals(Color.yellow, b.endCol);
+    assertEquals(Colour.blue, b.startCol);
+    assertEquals(Colour.yellow, b.endCol);
     // bond a3 to a4
     b = c.bonds.get(2);
-    assertEquals(Color.yellow, b.startCol);
-    assertEquals(Color.lightGray, b.endCol);
+    assertEquals(Colour.yellow, b.startCol);
+    assertEquals(Colour.lightGray, b.endCol);
   }
 
   /**
index 4e815d1..1779cb0 100644 (file)
@@ -11,9 +11,9 @@ import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.io.gff.SequenceOntologyFactory;
 import jalview.io.gff.SequenceOntologyLite;
+import jalview.schemes.Colour;
 import jalview.util.MapList;
 
-import java.awt.Color;
 import java.util.List;
 
 import org.testng.annotations.AfterClass;
@@ -250,9 +250,9 @@ public class EnsemblGeneTest
     assertTrue(fc.isFeatureDisplayed("sequence_variant"));
     assertTrue(fc.isFeatureDisplayed("feature_variant")); // subtype
     assertFalse(fc.isFeatureDisplayed("transcript"));
-    assertEquals(Color.RED, fc.getFeatureColour("sequence_variant")
+    assertEquals(Colour.red, fc.getFeatureColour("sequence_variant")
             .getColour());
-    assertEquals(Color.RED, fc.getFeatureColour("feature_variant")
+    assertEquals(Colour.red, fc.getFeatureColour("feature_variant")
             .getColour());
     assertTrue(fc.getFeatureColour("exon").isColourByLabel());
     assertTrue(fc.getFeatureColour("coding_exon").isColourByLabel());
index 29c7d16..6e11a88 100644 (file)
@@ -23,7 +23,9 @@ package jalview.ext.rbvi.chimera;
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertTrue;
 
-import java.awt.Color;
+import jalview.api.ColorI;
+import jalview.schemes.Colour;
+
 import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -36,47 +38,47 @@ public class ChimeraCommandsTest
   @Test(groups = { "Functional" })
   public void testAddColourRange()
   {
-    Map<Color, Map<Integer, Map<String, List<int[]>>>> map = new LinkedHashMap<Color, Map<Integer, Map<String, List<int[]>>>>();
-    ChimeraCommands.addColourRange(map, Color.pink, 1, 2, 4, "A");
-    ChimeraCommands.addColourRange(map, Color.pink, 1, 8, 8, "A");
-    ChimeraCommands.addColourRange(map, Color.pink, 1, 5, 7, "B");
-    ChimeraCommands.addColourRange(map, Color.red, 1, 3, 5, "A");
-    ChimeraCommands.addColourRange(map, Color.red, 0, 1, 4, "B");
-    ChimeraCommands.addColourRange(map, Color.orange, 0, 5, 9, "C");
+    Map<ColorI, Map<Integer, Map<String, List<int[]>>>> map = new LinkedHashMap<ColorI, Map<Integer, Map<String, List<int[]>>>>();
+    ChimeraCommands.addColourRange(map, Colour.pink, 1, 2, 4, "A");
+    ChimeraCommands.addColourRange(map, Colour.pink, 1, 8, 8, "A");
+    ChimeraCommands.addColourRange(map, Colour.pink, 1, 5, 7, "B");
+    ChimeraCommands.addColourRange(map, Colour.red, 1, 3, 5, "A");
+    ChimeraCommands.addColourRange(map, Colour.red, 0, 1, 4, "B");
+    ChimeraCommands.addColourRange(map, Colour.orange, 0, 5, 9, "C");
 
     // three colours mapped
     assertEquals(3, map.keySet().size());
 
     // Red has two models, Pink and Orange one each
-    assertEquals(2, map.get(Color.red).keySet().size());
-    assertEquals(1, map.get(Color.orange).keySet().size());
-    assertEquals(1, map.get(Color.pink).keySet().size());
+    assertEquals(2, map.get(Colour.red).keySet().size());
+    assertEquals(1, map.get(Colour.orange).keySet().size());
+    assertEquals(1, map.get(Colour.pink).keySet().size());
 
     // pink model 1 has two chains, red.0 / red.1 / orange.0 one each
-    assertEquals(2, map.get(Color.pink).get(1).keySet().size());
-    assertEquals(1, map.get(Color.red).get(0).keySet().size());
-    assertEquals(1, map.get(Color.red).get(1).keySet().size());
-    assertEquals(1, map.get(Color.orange).get(0).keySet().size());
+    assertEquals(2, map.get(Colour.pink).get(1).keySet().size());
+    assertEquals(1, map.get(Colour.red).get(0).keySet().size());
+    assertEquals(1, map.get(Colour.red).get(1).keySet().size());
+    assertEquals(1, map.get(Colour.orange).get(0).keySet().size());
 
     // inspect positions
-    List<int[]> posList = map.get(Color.pink).get(1).get("A");
+    List<int[]> posList = map.get(Colour.pink).get(1).get("A");
     assertEquals(2, posList.size());
     assertTrue(Arrays.equals(new int[] { 2, 4 }, posList.get(0)));
     assertTrue(Arrays.equals(new int[] { 8, 8 }, posList.get(1)));
 
-    posList = map.get(Color.pink).get(1).get("B");
+    posList = map.get(Colour.pink).get(1).get("B");
     assertEquals(1, posList.size());
     assertTrue(Arrays.equals(new int[] { 5, 7 }, posList.get(0)));
 
-    posList = map.get(Color.red).get(0).get("B");
+    posList = map.get(Colour.red).get(0).get("B");
     assertEquals(1, posList.size());
     assertTrue(Arrays.equals(new int[] { 1, 4 }, posList.get(0)));
 
-    posList = map.get(Color.red).get(1).get("A");
+    posList = map.get(Colour.red).get(1).get("A");
     assertEquals(1, posList.size());
     assertTrue(Arrays.equals(new int[] { 3, 5 }, posList.get(0)));
 
-    posList = map.get(Color.orange).get(0).get("C");
+    posList = map.get(Colour.orange).get(0).get("C");
     assertEquals(1, posList.size());
     assertTrue(Arrays.equals(new int[] { 5, 9 }, posList.get(0)));
   }
@@ -85,15 +87,15 @@ public class ChimeraCommandsTest
   public void testBuildColourCommands()
   {
 
-    Map<Color, Map<Integer, Map<String, List<int[]>>>> map = new LinkedHashMap<Color, Map<Integer, Map<String, List<int[]>>>>();
-    ChimeraCommands.addColourRange(map, Color.blue, 0, 2, 5, "A");
-    ChimeraCommands.addColourRange(map, Color.blue, 0, 7, 7, "B");
-    ChimeraCommands.addColourRange(map, Color.blue, 0, 9, 23, "A");
-    ChimeraCommands.addColourRange(map, Color.blue, 1, 1, 1, "A");
-    ChimeraCommands.addColourRange(map, Color.blue, 1, 4, 7, "B");
-    ChimeraCommands.addColourRange(map, Color.yellow, 1, 8, 8, "A");
-    ChimeraCommands.addColourRange(map, Color.yellow, 1, 3, 5, "A");
-    ChimeraCommands.addColourRange(map, Color.red, 0, 3, 5, "A");
+    Map<ColorI, Map<Integer, Map<String, List<int[]>>>> map = new LinkedHashMap<ColorI, Map<Integer, Map<String, List<int[]>>>>();
+    ChimeraCommands.addColourRange(map, Colour.blue, 0, 2, 5, "A");
+    ChimeraCommands.addColourRange(map, Colour.blue, 0, 7, 7, "B");
+    ChimeraCommands.addColourRange(map, Colour.blue, 0, 9, 23, "A");
+    ChimeraCommands.addColourRange(map, Colour.blue, 1, 1, 1, "A");
+    ChimeraCommands.addColourRange(map, Colour.blue, 1, 4, 7, "B");
+    ChimeraCommands.addColourRange(map, Colour.yellow, 1, 8, 8, "A");
+    ChimeraCommands.addColourRange(map, Colour.yellow, 1, 3, 5, "A");
+    ChimeraCommands.addColourRange(map, Colour.red, 0, 3, 5, "A");
 
     // Colours should appear in the Chimera command in the order in which
     // they were added; within colour, by model, by chain, and positions as
index aa3b756..7a9e744 100644 (file)
@@ -26,10 +26,9 @@ import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceI;
+import jalview.schemes.Colour;
 import jalview.schemes.ZappoColourScheme;
 
-import java.awt.Color;
-
 import org.testng.annotations.Test;
 
 public class SequenceRendererTest
@@ -45,10 +44,10 @@ public class SequenceRendererTest
     av.setGlobalColourScheme(new ZappoColourScheme());
 
     // @see ResidueProperties.zappo
-    assertEquals(Color.pink, sr.getResidueColour(seq, 0, null)); // M
-    assertEquals(Color.green, sr.getResidueColour(seq, 2, null)); // T
-    assertEquals(Color.magenta, sr.getResidueColour(seq, 5, null)); // G
-    assertEquals(Color.orange, sr.getResidueColour(seq, 12, null)); // F
+    assertEquals(Colour.pink, sr.getResidueColour(seq, 0, null)); // M
+    assertEquals(Colour.green, sr.getResidueColour(seq, 2, null)); // T
+    assertEquals(Colour.magenta, sr.getResidueColour(seq, 5, null)); // G
+    assertEquals(Colour.orange, sr.getResidueColour(seq, 12, null)); // F
   }
   // TODO more tests for getResidueBoxColour covering groups, feature rendering,
   // gaps, overview...
index 2f5d0c5..bf5bb3d 100644 (file)
@@ -34,8 +34,8 @@ import jalview.datamodel.SequenceDummy;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
+import jalview.schemes.Colour;
 
-import java.awt.Color;
 import java.io.File;
 import java.io.IOException;
 import java.util.Map;
@@ -67,8 +67,8 @@ public class FeaturesFileTest
      */
     colours = af.getFeatureRenderer().getFeatureColours();
     assertEquals("26 feature group colours not found", 26, colours.size());
-    assertEquals(colours.get("Cath").getColour(), new Color(0x93b1d1));
-    assertEquals(colours.get("ASX-MOTIF").getColour(), new Color(0x6addbb));
+    assertEquals(colours.get("Cath").getColour(), new Colour(0x93b1d1));
+    assertEquals(colours.get("ASX-MOTIF").getColour(), new Colour(0x6addbb));
 
     /*
      * verify (some) features on sequences
@@ -164,7 +164,7 @@ public class FeaturesFileTest
     // verify colours read or synthesized
     colours = af.getFeatureRenderer().getFeatureColours();
     assertEquals("1 feature group colours not found", 1, colours.size());
-    assertEquals(colours.get("METAL").getColour(), new Color(0xcc9900));
+    assertEquals(colours.get("METAL").getColour(), new Colour(0xcc9900));
 
     // verify feature on FER_CAPAA
     SequenceFeature[] sfs = al.getSequenceAt(0).getDatasetSequence()
@@ -205,6 +205,44 @@ public class FeaturesFileTest
   }
 
   /**
+   * Test various ways of describing a feature colour scheme
+   * 
+   * @throws Exception
+   */
+  @Test(groups = { "Functional" })
+  public void testParseGraduatedColourScheme() throws Exception
+  {
+    FeaturesFile ff = new FeaturesFile();
+
+    // colour by label:
+    FeatureColourI gc = ff.parseGraduatedColourScheme(
+            "BETA-TURN-IR\t9a6a94", "label");
+    assertTrue(gc.isColourByLabel());
+    assertEquals(Colour.white, gc.getMinColour());
+    assertEquals(Colour.black, gc.getMaxColour());
+    assertTrue(gc.isAutoScaled());
+
+    // using colour name, rgb, etc:
+    String spec = "blue|255,0,255|absolute|20.0|95.0|below|66.0";
+    gc = ff.parseGraduatedColourScheme("BETA-TURN-IR\t" + spec, spec);
+    assertFalse(gc.isColourByLabel());
+    assertEquals(Colour.blue, gc.getMinColour());
+    assertEquals(new Colour(255, 0, 255), gc.getMaxColour());
+    assertFalse(gc.isAutoScaled());
+    // assertFalse(gc.getTolow());
+    assertEquals(20.0f, gc.getMin(), 0.001f);
+    assertEquals(95.0f, gc.getMax(), 0.001f);
+    assertTrue(gc.isBelowThreshold());
+    assertEquals(66.0f, gc.getThreshold(), 0.001f);
+
+    // inverse gradient high to low:
+    spec = "blue|255,0,255|95.0|20.0|below|66.0";
+    gc = ff.parseGraduatedColourScheme("BETA-TURN-IR\t" + spec, spec);
+    assertTrue(gc.isAutoScaled());
+    // assertTrue(gc..getTolow());
+  }
+
+  /**
    * Test parsing a features file with GFF formatted content only
    * 
    * @throws Exception
index e13f542..db64cf5 100644 (file)
@@ -5,6 +5,7 @@ import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertTrue;
 import static org.testng.AssertJUnit.fail;
 
+import jalview.api.ColorI;
 import jalview.datamodel.SequenceFeature;
 import jalview.util.Format;
 
@@ -15,44 +16,6 @@ import org.testng.annotations.Test;
 public class FeatureColourTest
 {
   @Test(groups = { "Functional" })
-  public void testCopyConstructor()
-  {
-    /*
-     * plain colour
-     */
-    FeatureColour fc = new FeatureColour(Color.RED);
-    FeatureColour fc1 = new FeatureColour(fc);
-    assertTrue(fc1.getColour().equals(Color.RED));
-    assertFalse(fc1.isGraduatedColour());
-    assertFalse(fc1.isColourByLabel());
-
-    /*
-     * min-max colour
-     */
-    fc = new FeatureColour(Color.gray, Color.black, 10f, 20f);
-    fc.setAboveThreshold(true);
-    fc.setThreshold(12f);
-    fc1 = new FeatureColour(fc);
-    assertTrue(fc1.isGraduatedColour());
-    assertFalse(fc1.isColourByLabel());
-    assertTrue(fc1.isAboveThreshold());
-    assertEquals(12f, fc1.getThreshold());
-    assertEquals(Color.gray, fc1.getMinColour());
-    assertEquals(Color.black, fc1.getMaxColour());
-    assertEquals(10f, fc1.getMin());
-    assertEquals(20f, fc1.getMax());
-
-    /*
-     * colour by label
-     */
-    fc = new FeatureColour();
-    fc.setColourByLabel(true);
-    fc1 = new FeatureColour(fc);
-    assertTrue(fc1.isColourByLabel());
-    assertFalse(fc1.isGraduatedColour());
-  }
-
-  @Test(groups = { "Functional" })
   public void testIsColored_simpleColour()
   {
     FeatureColour fc = new FeatureColour(Color.RED);
@@ -71,42 +34,42 @@ public class FeatureColourTest
   public void testIsColored_aboveThreshold()
   {
     // graduated colour range from score 20 to 100
-    FeatureColour fc = new FeatureColour(Color.WHITE, Color.BLACK, 20f,
-            100f);
+    FeatureColour fc = new FeatureColour(new Colour(Color.WHITE),
+            new Colour(Color.BLACK), 20f, 100f);
 
     // score 0 is adjusted to bottom of range
     SequenceFeature sf = new SequenceFeature("type", "desc", 0, 20, 0f,
             null);
     assertTrue(fc.isColored(sf));
-    assertEquals(Color.WHITE, fc.getColor(sf));
+    assertEquals(fc.getColor(sf), Colour.white);
 
     // score 120 is adjusted to top of range
     sf.setScore(120f);
-    assertEquals(Color.BLACK, fc.getColor(sf));
+    assertEquals(fc.getColor(sf), Colour.black);
 
     // value below threshold is still rendered
     // setting threshold has no effect yet...
     fc.setThreshold(60f);
     sf.setScore(36f);
     assertTrue(fc.isColored(sf));
-    assertEquals(new Color(204, 204, 204), fc.getColor(sf));
+    assertEquals(fc.getColor(sf), new Colour(204, 204, 204));
 
     // now apply threshold:
     fc.setAboveThreshold(true);
     assertFalse(fc.isColored(sf));
     // colour is still returned though ?!?
-    assertEquals(new Color(204, 204, 204), fc.getColor(sf));
+    assertEquals(fc.getColor(sf), new Colour(204, 204, 204));
 
     sf.setScore(84); // above threshold now
     assertTrue(fc.isColored(sf));
-    assertEquals(new Color(51, 51, 51), fc.getColor(sf));
+    assertEquals(fc.getColor(sf), new Colour(51, 51, 51));
   }
 
   @Test(groups = { "Functional" })
   public void testGetColor_simpleColour()
   {
-    FeatureColour fc = new FeatureColour(Color.RED);
-    assertEquals(Color.RED, fc.getColor(new SequenceFeature()));
+    FeatureColour fc = new FeatureColour(Colour.red);
+    assertEquals(fc.getColor(new SequenceFeature()), Colour.red);
   }
 
   @Test(groups = { "Functional" })
@@ -116,8 +79,10 @@ public class FeatureColourTest
     fc.setColourByLabel(true);
     SequenceFeature sf = new SequenceFeature("type", "desc", 0, 20, 1f,
             null);
-    Color expected = UserColourScheme.createColourFromName("desc");
-    assertEquals(expected, fc.getColor(sf));
+    ColorI expected = new Colour(
+            UserColourScheme.createColourFromName("desc"));
+    assertEquals(fc.getColor(sf), expected);
+    // assertEquals(expected, fc.getColor(sf));
   }
 
   @Test(groups = { "Functional" })
@@ -132,8 +97,9 @@ public class FeatureColourTest
     float red = 128 / 255f + 3 / 4f * (255 - 128) / 255f;
     float green = 128 / 255f + 3 / 4f * (0 - 128) / 255f;
     float blue = 128 / 255f + 3 / 4f * (0 - 128) / 255f;
-    Color expected = new Color(red, green, blue);
-    assertEquals(expected, fc.getColor(sf));
+    Colour expected = new Colour(red, green, blue);
+    assertEquals(fc.getColor(sf), expected);
+    // assertEquals(expected, fc.getColor(sf));
   }
 
   @Test(groups = { "Functional" })
@@ -146,11 +112,13 @@ public class FeatureColourTest
             null);
     fc.setThreshold(100f); // ignore for now
     assertTrue(fc.isColored(sf));
-    assertEquals(new Color(204, 204, 204), fc.getColor(sf));
+    assertEquals(fc.getColor(sf), new Colour(204, 204, 204));
+    // assertEquals(new Color(204, 204, 204), fc.getColor(sf));
 
     fc.setAboveThreshold(true); // feature lies below threshold
     assertFalse(fc.isColored(sf));
-    assertEquals(new Color(204, 204, 204), fc.getColor(sf));
+    assertEquals(fc.getColor(sf), new Colour(204, 204, 204));
+    // assertEquals(new Color(204, 204, 204), fc.getColor(sf));
   }
 
   /**
@@ -247,7 +215,7 @@ public class FeatureColourTest
      */
     FeatureColour fc = FeatureColour.parseJalviewFeatureColour("red");
     assertTrue(fc.isSimpleColour());
-    assertEquals(Color.RED, fc.getColour());
+    assertEquals(fc.getColour(), Colour.red);
 
     /*
      * simple colour by hex code
@@ -255,14 +223,16 @@ public class FeatureColourTest
     fc = FeatureColour.parseJalviewFeatureColour(Format
             .getHexString(Color.RED));
     assertTrue(fc.isSimpleColour());
-    assertEquals(Color.RED, fc.getColour());
+    assertEquals(fc.getColour(), Colour.red);
+    // assertEquals(Color.RED, fc.getColour());
 
     /*
      * simple colour by rgb triplet
      */
     fc = FeatureColour.parseJalviewFeatureColour("255,0,0");
     assertTrue(fc.isSimpleColour());
-    assertEquals(Color.RED, fc.getColour());
+    assertEquals(fc.getColour(), Colour.red);
+    // assertEquals(Color.RED, fc.getColour());
 
     /*
      * malformed colour
@@ -298,8 +268,10 @@ public class FeatureColourTest
     fc = FeatureColour.parseJalviewFeatureColour("red|green|10.0|20.0");
     assertTrue(fc.isGraduatedColour());
     assertFalse(fc.hasThreshold());
-    assertEquals(Color.RED, fc.getMinColour());
-    assertEquals(Color.GREEN, fc.getMaxColour());
+    assertEquals(fc.getMinColour(), Colour.red);
+    // assertEquals(Color.RED, fc.getMinColour());
+    assertEquals(fc.getMaxColour(), Colour.green);
+    // assertEquals(Color.GREEN, fc.getMaxColour());
     assertEquals(10f, fc.getMin());
     assertEquals(20f, fc.getMax());
     assertTrue(fc.isAutoScaled());
@@ -315,8 +287,10 @@ public class FeatureColourTest
     assertTrue(fc.hasThreshold());
     assertTrue(fc.isAboveThreshold());
     assertEquals(15f, fc.getThreshold());
-    assertEquals(Color.RED, fc.getMinColour());
-    assertEquals(Color.GREEN, fc.getMaxColour());
+    assertEquals(fc.getMinColour(), Colour.red);
+    // assertEquals(Color.RED, fc.getMinColour());
+    assertEquals(fc.getMaxColour(), Colour.green);
+    // assertEquals(Color.GREEN, fc.getMaxColour());
     assertEquals(10f, fc.getMin());
     assertEquals(20f, fc.getMax());
     assertTrue(fc.isAutoScaled());
@@ -331,14 +305,11 @@ public class FeatureColourTest
     assertTrue(fc.hasThreshold());
     assertTrue(fc.isBelowThreshold());
     assertEquals(15f, fc.getThreshold());
-    assertEquals(Color.RED, fc.getMinColour());
-    assertEquals(Color.GREEN, fc.getMaxColour());
+    assertEquals(fc.getMinColour(), Colour.red);
+    // assertEquals(Color.RED, fc.getMinColour());
+    assertEquals(fc.getMaxColour(), Colour.green);
+    // assertEquals(Color.GREEN, fc.getMaxColour());
     assertEquals(10f, fc.getMin());
     assertEquals(20f, fc.getMax());
-
-    descriptor = String
-            .format("blue|255,0,255|absolute|20.0|95.0|below|66.0");
-    fc = FeatureColour.parseJalviewFeatureColour(descriptor);
-    assertTrue(fc.isGraduatedColour());
   }
 }
index a82b9c0..e20fc5c 100644 (file)
@@ -23,6 +23,8 @@ package jalview.util;
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertNull;
 
+import jalview.schemes.Colour;
+
 import java.awt.Color;
 
 import org.testng.annotations.Test;
@@ -66,11 +68,11 @@ public class ColorUtilsTest
   @Test(groups = { "Functional" })
   public void testToTkCode()
   {
-    assertEquals("#fffafa", ColorUtils.toTkCode(new Color(255, 250, 250))); // snow
-    assertEquals("#e6e6fa", ColorUtils.toTkCode(new Color(230, 230, 250))); // lavender
-    assertEquals("#dda0dd", ColorUtils.toTkCode(new Color(221, 160, 221))); // plum
-    assertEquals("#800080", ColorUtils.toTkCode(new Color(128, 0, 128))); // purple
-    assertEquals("#00ff00", ColorUtils.toTkCode(new Color(0, 255, 0))); // lime
+    assertEquals("#fffafa", ColorUtils.toTkCode(new Colour(255, 250, 250))); // snow
+    assertEquals("#e6e6fa", ColorUtils.toTkCode(new Colour(230, 230, 250))); // lavender
+    assertEquals("#dda0dd", ColorUtils.toTkCode(new Colour(221, 160, 221))); // plum
+    assertEquals("#800080", ColorUtils.toTkCode(new Colour(128, 0, 128))); // purple
+    assertEquals("#00ff00", ColorUtils.toTkCode(new Colour(0, 255, 0))); // lime
   }
 
   @Test(groups = { "Functional" })
index 200cfbb..1262587 100644 (file)
@@ -24,7 +24,9 @@ import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertTrue;
 
-import java.awt.Color;
+import jalview.api.ColorI;
+import jalview.schemes.Colour;
+
 import java.lang.reflect.Field;
 import java.util.Random;
 
@@ -150,10 +152,10 @@ public class ViewStyleTest
     {
       field.set(vs, "Joe" + field.get(vs));
     }
-    else if (type.equals(Color.class))
+    else if (type.equals(ColorI.class))
     {
-      field.set(vs, Color.RED.equals(field.get(vs)) ? Color.BLACK
-              : Color.RED);
+      field.set(vs, Colour.red.equals(field.get(vs)) ? Colour.black
+              : Colour.red);
     }
     else
     {