JAL-3253-applet no-NCList IntervalStore fixes
[jalview.git] / src / jalview / renderer / OverviewResColourFinder.java
index 793d349..a98f3b3 100644 (file)
  */
 package jalview.renderer;
 
+import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.renderer.seqfeatures.FeatureColourFinder;
 import jalview.util.Comparison;
 
 import java.awt.Color;
 
 public class OverviewResColourFinder extends ResidueColourFinder
 {
+  final int GAP_COLOUR; // default colour to use at gaps
+
+  final int RESIDUE_COLOUR; // default colour to use at residues
+
+  final Color HIDDEN_COLOUR; // colour for hidden regions
+
+  boolean useLegacy = false;
+
+  public static final Color OVERVIEW_DEFAULT_GAP = Color.lightGray;
+
+  public static final Color OVERVIEW_DEFAULT_LEGACY_GAP = Color.white;
+
+  public static final Color OVERVIEW_DEFAULT_HIDDEN = Color.darkGray
+          .darker();
+
+  /**
+   * Constructor without colour settings (used by applet)
+   */
+  public OverviewResColourFinder()
+  {
+    this(false, OVERVIEW_DEFAULT_GAP, OVERVIEW_DEFAULT_HIDDEN);
+  }
+
+  /**
+   * Constructor with colour settings
+   * 
+   * @param useLegacyColouring
+   *          whether to use legacy gap colouring (white gaps, grey residues)
+   * @param gapCol
+   *          gap colour if not legacy
+   * @param hiddenCol
+   *          hidden region colour (transparency applied by rendering code)
+   */
+  public OverviewResColourFinder(boolean useLegacyColouring, Color gapCol,
+          Color hiddenCol)
+  {
+    if (useLegacyColouring)
+    {
+      GAP_COLOUR = Color.white.getRGB();
+      RESIDUE_COLOUR = Color.lightGray.getRGB();
+    }
+    else
+    {
+      GAP_COLOUR = gapCol.getRGB();
+      RESIDUE_COLOUR = Color.white.getRGB();
+    }
+    HIDDEN_COLOUR = hiddenCol;
+  }
+
   @Override
+  /**
+   * for Test suite only.
+   */
   public Color getBoxColour(ResidueShaderI shader, SequenceI seq, int i)
   {
-    Color resBoxColour = Color.white;
-    char currentChar = seq.getCharAt(i);
+    return new Color(getBoxColourInt(shader, seq, i));
+  }
 
-    if (shader.getColourScheme() != null)
+  public int getBoxColourInt(ResidueShaderI shader, SequenceI seq, int i)
+  {
+    char currentChar = seq.getCharAt(i);
+    // In the overview window, gaps are coloured grey, unless the colour scheme
+    // specifies a gap colour, in which case gaps honour the colour scheme
+    // settings
+    boolean isGap = Comparison.isGap(currentChar);
+    if (shader.getColourScheme() == null)
     {
-      if (Comparison.isGap(currentChar)
-              && !shader.getColourScheme().hasGapColour())
-      {
-        resBoxColour = Color.lightGray;
-      }
-      else
-      {
-        resBoxColour = shader.findColour(currentChar, i, seq);
-      }
+      return (isGap ? GAP_COLOUR : RESIDUE_COLOUR);
     }
-    else if (Comparison.isGap(currentChar))
+    return (isGap && !shader.getColourScheme().hasGapColour() ? GAP_COLOUR
+            : shader.findColourInt(currentChar, i, seq));
+  }
+
+  /**
+   * For test suite only.
+   */
+  @Override
+  public Color getResidueColour(boolean showBoxes, ResidueShaderI shader,
+          SequenceGroup[] allGroups, final SequenceI seq, int i,
+          FeatureColourFinder finder)
+  {
+    return new Color(getResidueColourInt(showBoxes, shader, allGroups, seq,
+            i, finder));
+  }
+
+
+  public int getResidueColourInt(boolean showBoxes, ResidueShaderI shader,
+          SequenceGroup[] allGroups, final SequenceI seq, int i,
+          FeatureColourFinder finder)
+  {
+
+    int c = seq.getColor(i);
+    if (c != 0)
     {
-      resBoxColour = Color.lightGray;
+      return c;
     }
 
-    return resBoxColour;
+    int col = getResidueBoxColourInt(showBoxes, shader, allGroups, seq, i);
+
+    // if there's a FeatureColourFinder we might override the residue colour
+    // here with feature colouring
+    return seq.setColor(i,
+            finder == null || finder.noFeaturesDisplayed() ? col
+                    : finder.findFeatureColourInt(col, seq, i));
+  }
+
+  /**
+   * For test suite only.
+   */
+  @Override
+  protected Color getResidueBoxColour(boolean showBoxes,
+          ResidueShaderI shader, SequenceGroup[] allGroups, SequenceI seq,
+          int i)
+  {
+    return new Color(
+            getResidueBoxColourInt(showBoxes, shader, allGroups, seq, i));
+  }
+
+  /**
+   * In the overview, the showBoxes setting is ignored, as the overview displays
+   * the colours regardless.
+   */
+  protected int getResidueBoxColourInt(boolean showBoxes,
+          ResidueShaderI shader, SequenceGroup[] allGroups, SequenceI seq,
+          int i)
+  {
+    SequenceGroup currentSequenceGroup = getCurrentSequenceGroup(allGroups,
+            i);
+    ResidueShaderI currentShader = (currentSequenceGroup == null ? shader
+            : currentSequenceGroup.getGroupColourScheme());
+    return getBoxColourInt(currentShader, seq, i);
+  }
+
+  /**
+   * Supply hidden colour
+   * 
+   * @return colour of hidden regions
+   */
+  protected Color getHiddenColour()
+  {
+    return HIDDEN_COLOUR;
   }
 }