JAL-3148 SequenceRenderer, ResidueColourFinder overloads and
[jalview.git] / src / jalview / gui / SequenceRenderer.java
index 81b394b..90d068b 100755 (executable)
@@ -25,30 +25,28 @@ import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.renderer.ResidueColourFinder;
 import jalview.renderer.seqfeatures.FeatureColourFinder;
+import jalview.schemes.ColourSchemeI;
+import jalview.util.Comparison;
 
 import java.awt.Color;
 import java.awt.FontMetrics;
 import java.awt.Graphics;
 
-public class SequenceRenderer implements jalview.api.SequenceRenderer
+public class SequenceRenderer implements jalview.api.SequenceRendererI
 {
   final static int CHAR_TO_UPPER = 'A' - 'a';
 
-  AlignViewportI av;
+  private AlignViewportI av;
 
-  FontMetrics fm;
+  private FontMetrics fm;
 
-  boolean renderGaps = true;
+  private SequenceGroup[] allGroups = null;
 
-  SequenceGroup[] allGroups = null;
+  private Graphics graphics;
 
-  // Color resBoxColour;
+  private boolean monospacedFont;
 
-  Graphics graphics;
-
-  boolean monospacedFont;
-
-  ResidueColourFinder resColourFinder;
+  private ResidueColourFinder resColourFinder;
 
   /**
    * Creates a new SequenceRenderer object
@@ -62,12 +60,23 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
   }
 
   /**
-   * DOCUMENT ME!
+   * Constructor given a choice of colour scheme. May be used to find colours
+   * for a structure that has a viewport colour scheme other than 'by sequence'
    * 
-   * @param b
-   *          DOCUMENT ME!
+   * @param cs
+   */
+  public SequenceRenderer(AlignViewportI viewport, ColourSchemeI cs) 
+  {
+    this.av = viewport;
+    resColourFinder = new ResidueColourFinder(viewport, cs);
+  }
+
+/**
+   * Sets the Graphics context to draw on, and also guesses whether we are using a monospaced font
+   * 
+   * @param g
    */
-  public void prepare(Graphics g, boolean renderGaps)
+  public void setGraphics(Graphics g)
   {
     graphics = g;
     fm = g.getFontMetrics();
@@ -77,8 +86,6 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
 
     monospacedFont = (dwidth == fm.getStringBounds("|", g).getWidth()
             && av.getCharWidth() == dwidth);
-
-    this.renderGaps = renderGaps;
   }
 
   /**
@@ -103,29 +110,19 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
   }
 
   /**
-   * DOCUMENT ME!
+   * Draws the sequence (box colour and residues) over the given range, at the
+   * specified y-offset on the Graphics context
    * 
-   * @param g
-   *          DOCUMENT ME!
    * @param seq
-   *          DOCUMENT ME!
-   * @param sg
-   *          DOCUMENT ME!
+   * @param sg  groups (if any) that the sequence is a member of (may have
+   *            distinct group colouring)
    * @param start
-   *          DOCUMENT ME!
    * @param end
-   *          DOCUMENT ME!
-   * @param x1
-   *          DOCUMENT ME!
    * @param y1
-   *          DOCUMENT ME!
-   * @param width
-   *          DOCUMENT ME!
-   * @param height
-   *          DOCUMENT ME!
+   * @param drawGaps
    */
   public void drawSequence(SequenceI seq, SequenceGroup[] sg, int start,
-          int end, int y1)
+          int end, int y1, boolean drawGaps)
   {
     allGroups = sg;
 
@@ -133,27 +130,18 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
 
     if (av.isValidCharWidth())
     {
-      drawText(seq, start, end, y1);
+      drawText(seq, start, end, y1, drawGaps);
     }
   }
 
   /**
-   * DOCUMENT ME!
+   * Draws box colours on the given sequence residue range, at the specified
+   * y-offset on the Graphics context
    * 
    * @param seq
-   *          DOCUMENT ME!
    * @param start
-   *          DOCUMENT ME!
    * @param end
-   *          DOCUMENT ME!
-   * @param x1
-   *          DOCUMENT ME!
    * @param y1
-   *          DOCUMENT ME!
-   * @param width
-   *          DOCUMENT ME!
-   * @param height
-   *          DOCUMENT ME!
    */
   public synchronized void drawBoxes(SequenceI seq, int start, int end,
           int y1)
@@ -225,24 +213,16 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
   }
 
   /**
-   * DOCUMENT ME!
+   * Draws residue letters on the given sequence residue range, at the specified
+   * y-offset on the Graphics context
    * 
    * @param seq
-   *          DOCUMENT ME!
    * @param start
-   *          DOCUMENT ME!
    * @param end
-   *          DOCUMENT ME!
-   * @param x1
-   *          DOCUMENT ME!
    * @param y1
-   *          DOCUMENT ME!
-   * @param width
-   *          DOCUMENT ME!
-   * @param height
-   *          DOCUMENT ME!
+   * @param drawGaps
    */
-  public void drawText(SequenceI seq, int start, int end, int y1)
+  public void drawText(SequenceI seq, int start, int end, int y1, boolean drawGaps)
   {
     y1 += av.getCharHeight() - av.getCharHeight() / 5; // height/5 replaces pady
     int charOffset = 0;
@@ -283,7 +263,7 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
         getboxColour = false;
         s = seq.getCharAt(i);
 
-        if (!renderGaps && jalview.util.Comparison.isGap(s))
+        if (!drawGaps && Comparison.isGap(s))
         {
           continue;
         }
@@ -333,9 +313,7 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
           {
             // todo - use sequence group consensus
             s = getDisplayChar(srep, i, s, '.', currentSequenceGroup);
-
           }
-
         }
         else
         {
@@ -377,15 +355,12 @@ public class SequenceRenderer implements jalview.api.SequenceRenderer
           if (!isarep && av.getShowUnconserved())
           {
             s = getDisplayChar(srep, i, s, '.', null);
-
           }
-
         }
 
         charOffset = (av.getCharWidth() - fm.charWidth(s)) / 2;
         graphics.drawString(String.valueOf(s),
                 charOffset + av.getCharWidth() * (i - start), y1);
-
       }
     }
   }