JAL-1807 still testing
[jalviewjs.git] / unused / appletgui / IdCanvas.java
index 689ed3b..13177a0 100644 (file)
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.appletgui;
-
-import jalview.datamodel.SequenceI;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Image;
-import javax.swing.JPanel;
-import java.util.List;
-
-public class IdCanvas extends JPanel
-{
-  protected AlignViewport av;
-
-  protected boolean showScores = true;
-
-  protected int maxIdLength = -1;
-
-  protected String maxIdStr = null;
-
-  Image image;
-
-  Graphics gg;
-
-  int imgHeight = 0;
-
-  boolean fastPaint = false;
-
-  List<SequenceI> searchResults;
-
-  public IdCanvas(AlignViewport av)
-  {
-    setLayout(null);
-    this.av = av;
-    PaintRefresher.Register(this, av.getSequenceSetId());
-  }
-
-  public void drawIdString(Graphics gg, boolean hiddenRows, SequenceI s,
-          int i, int starty,
-          int ypos)
-  {
-    int charHeight = av.getCharHeight();
-
-    if (searchResults != null && searchResults.contains(s))
-    {
-      gg.setColor(Color.black);
-      gg.fillRect(0, ((i - starty) * charHeight) + ypos, getSize().width,
-              charHeight);
-      gg.setColor(Color.white);
-    }
-    else if (av.getSelectionGroup() != null
-            && av.getSelectionGroup().getSequences(null).contains(s))
-    {
-      gg.setColor(Color.lightGray);
-      gg.fillRect(0, ((i - starty) * charHeight) + ypos, getSize().width,
-              charHeight);
-      gg.setColor(Color.white);
-    }
-    else
-    {
-      gg.setColor(av.getSequenceColour(s));
-      gg.fillRect(0, ((i - starty) * charHeight) + ypos, getSize().width,
-              charHeight);
-      gg.setColor(Color.black);
-    }
-
-    gg.drawString(s.getDisplayId(av.getShowJVSuffix()), 0,
-            ((i - starty) * charHeight) + ypos + charHeight
-                    - (charHeight / 5));
-
-    if (hiddenRows)
-    {
-      drawMarker(i, starty, ypos);
-    }
-
-  }
-
-  public void fastPaint(int vertical)
-  {
-    if (gg == null)
-    {
-      repaint();
-      return;
-    }
-
-    gg.copyArea(0, 0, getSize().width, imgHeight, 0,
-            -vertical * av.getCharHeight());
-
-    int ss = av.startSeq, es = av.endSeq, transY = 0;
-    if (vertical > 0) // scroll down
-    {
-      ss = es - vertical;
-      if (ss < av.startSeq) // ie scrolling too fast, more than a page at a time
-      {
-        ss = av.startSeq;
-      }
-      else
-      {
-        transY = imgHeight - vertical * av.getCharHeight();
-      }
-    }
-    else if (vertical < 0)
-    {
-      es = ss - vertical;
-      if (es > av.endSeq)
-      {
-        es = av.endSeq;
-      }
-    }
-
-    gg.translate(0, transY);
-
-    drawIds(ss, es);
-
-    gg.translate(0, -transY);
-
-    fastPaint = true;
-    repaint();
-  }
-
-  public void update(Graphics g)
-  {
-    paint(g);
-  }
-
-  public void paint(Graphics g)
-  {
-    if (getSize().height < 0 || getSize().width < 0)
-    {
-      return;
-    }
-    if (fastPaint)
-    {
-      fastPaint = false;
-      g.drawImage(image, 0, 0, this);
-      return;
-    }
-
-    imgHeight = getSize().height;
-    imgHeight -= imgHeight % av.getCharHeight();
-
-    if (imgHeight < 1)
-    {
-      return;
-    }
-
-    if (image == null || imgHeight != image.getHeight(this))
-    {
-      image = createImage(getSize().width, imgHeight);
-      gg = image.getGraphics();
-      gg.setFont(av.getFont());
-    }
-
-    // Fill in the background
-    gg.setColor(Color.white);
-    Font italic = new Font(av.getFont().getName(), Font.ITALIC, av
-            .getFont().getSize());
-    gg.setFont(italic);
-
-    gg.fillRect(0, 0, getSize().width, getSize().height);
-    drawIds(av.startSeq, av.endSeq);
-    g.drawImage(image, 0, 0, this);
-  }
-
-  /**
-   * local copy of av.getCharHeight set at top of drawIds
-   */
-  private int avcharHeight;
-  void drawIds(int starty, int endy)
-  {
-    // hardwired italic IDs in applet currently
-    Font italic = new Font(av.getFont().getName(), Font.ITALIC, av
-            .getFont().getSize());
-    // temp variable for speed
-    avcharHeight = av.getCharHeight();
-
-    gg.setFont(italic);
-
-    Color currentColor = Color.white;
-    Color currentTextColor = Color.black;
-
-    final boolean doHiddenCheck = av.isDisplayReferenceSeq()
-            || av.hasHiddenRows(), hiddenRows = av.hasHiddenRows()
-            && av.getShowHiddenMarkers();
-
-    if (av.getWrapAlignment())
-    {
-      int maxwidth = av.getAlignment().getWidth();
-      int alheight = av.getAlignment().getHeight();
-
-      if (av.hasHiddenColumns())
-      {
-        maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;
-      }
-
-      int annotationHeight = 0;
-      AnnotationLabels labels = null;
-
-      if (av.isShowAnnotation())
-      {
-        AnnotationPanel ap = new AnnotationPanel(av);
-        annotationHeight = ap.adjustPanelHeight();
-        labels = new AnnotationLabels(av);
-      }
-      int hgap = avcharHeight;
-      if (av.getScaleAboveWrapped())
-      {
-        hgap += avcharHeight;
-      }
-
-      int cHeight = alheight * avcharHeight + hgap + annotationHeight;
-
-      int rowSize = av.getEndRes() - av.getStartRes();
-      // Draw the rest of the panels
-      for (int ypos = hgap, row = av.startRes; (ypos <= getSize().height)
-              && (row < maxwidth); ypos += cHeight, row += rowSize)
-      {
-        for (int i = starty; i < alheight; i++)
-        {
-
-          SequenceI s = av.getAlignment().getSequenceAt(i);
-          gg.setFont(italic);
-          if (doHiddenCheck)
-          {
-            setHiddenFont(s);
-          }
-          drawIdString(gg, hiddenRows, s, i, 0, ypos);
-        }
-
-        if (labels != null)
-        {
-          gg.translate(0, ypos + (alheight * avcharHeight));
-          labels.drawComponent(gg, getSize().width);
-          gg.translate(0, -ypos - (alheight * avcharHeight));
-        }
-
-      }
-    }
-    else
-    {
-      // Now draw the id strings
-      SequenceI seq;
-      for (int i = starty; i < endy; i++)
-      {
-
-        seq = av.getAlignment().getSequenceAt(i);
-        if (seq == null)
-        {
-          continue;
-        }
-        gg.setFont(italic);
-        // boolean isrep=false;
-        if (doHiddenCheck)
-        {
-          // isrep =
-          setHiddenFont(seq);
-        }
-
-        // Selected sequence colours
-        if ((searchResults != null) && searchResults.contains(seq))
-        {
-          currentColor = Color.black;
-          currentTextColor = Color.white;
-        }
-        else if ((av.getSelectionGroup() != null)
-                && av.getSelectionGroup().getSequences(null).contains(seq))
-        {
-          currentColor = Color.lightGray;
-          currentTextColor = Color.black;
-        }
-        else
-        {
-          currentColor = av.getSequenceColour(seq);
-          currentTextColor = Color.black;
-        }
-
-        gg.setColor(currentColor);
-        // TODO: isrep could be used to highlight the representative in a
-        // different way
-        gg.fillRect(0, (i - starty) * avcharHeight, getSize().width,
-                avcharHeight);
-        gg.setColor(currentTextColor);
-
-        gg.drawString(seq.getDisplayId(av.getShowJVSuffix()), 0,
-                (((i - starty) * avcharHeight) + avcharHeight)
-                        - (avcharHeight / 5));
-
-        if (hiddenRows)
-        {
-          drawMarker(i, starty, 0);
-        }
-      }
-    }
-  }
-
-  public void setHighlighted(List<SequenceI> list)
-  {
-    searchResults = list;
-    repaint();
-  }
-
-  void drawMarker(int i, int starty, int yoffset)
-  {
-    SequenceI[] hseqs = av.getAlignment().getHiddenSequences().hiddenSequences;
-    // Use this method here instead of calling hiddenSeq adjust
-    // 3 times.
-    int hSize = hseqs.length;
-
-    int hiddenIndex = i;
-    int lastIndex = i - 1;
-    int nextIndex = i + 1;
-
-    for (int j = 0; j < hSize; j++)
-    {
-      if (hseqs[j] != null)
-      {
-        if (j - 1 < hiddenIndex)
-        {
-          hiddenIndex++;
-        }
-        if (j - 1 < lastIndex)
-        {
-          lastIndex++;
-        }
-        if (j - 1 < nextIndex)
-        {
-          nextIndex++;
-        }
-      }
-    }
-
-    boolean below = (hiddenIndex > lastIndex + 1);
-    boolean above = (nextIndex > hiddenIndex + 1);
-
-    gg.setColor(Color.blue);
-    if (below)
-    {
-      gg.fillPolygon(new int[]
-      { getSize().width - avcharHeight, getSize().width - avcharHeight,
-          getSize().width }, new int[]
-      { (i - starty) * avcharHeight + yoffset,
-          (i - starty) * avcharHeight + yoffset + avcharHeight / 4,
-          (i - starty) * avcharHeight + yoffset }, 3);
-    }
-    if (above)
-    {
-      gg.fillPolygon(new int[]
-      { getSize().width - avcharHeight, getSize().width - avcharHeight,
-          getSize().width }, new int[]
-      { (i - starty + 1) * avcharHeight + yoffset,
-          (i - starty + 1) * avcharHeight + yoffset - avcharHeight / 4,
-          (i - starty + 1) * avcharHeight + yoffset }, 3);
-
-    }
-  }
-
-  boolean setHiddenFont(SequenceI seq)
-  {
-    Font bold = new Font(av.getFont().getName(), Font.BOLD, av.getFont()
-            .getSize());
-
-    if (av.isHiddenRepSequence(seq))
-    {
-      gg.setFont(bold);
-      return true;
-    }
-    return false;
-  }
-}
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)\r
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors\r
+ * \r
+ * This file is part of Jalview.\r
+ * \r
+ * Jalview is free software: you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License \r
+ * as published by the Free Software Foundation, either version 3\r
+ * of the License, or (at your option) any later version.\r
+ *  \r
+ * Jalview is distributed in the hope that it will be useful, but \r
+ * WITHOUT ANY WARRANTY; without even the implied warranty \r
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
+ * PURPOSE.  See the GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\r
+ * The Jalview Authors are detailed in the 'AUTHORS' file.\r
+ */\r
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.SequenceI;\r
+\r
+import java.awt.Color;\r
+import java.awt.Font;\r
+import java.awt.Graphics;\r
+import java.awt.Image;\r
+import javax.swing.JPanel;\r
+import java.util.List;\r
+\r
+public class IdCanvas extends JPanel\r
+{\r
+  protected AlignViewport av;\r
+\r
+  protected boolean showScores = true;\r
+\r
+  protected int maxIdLength = -1;\r
+\r
+  protected String maxIdStr = null;\r
+\r
+  Image image;\r
+\r
+  Graphics gg;\r
+\r
+  int imgHeight = 0;\r
+\r
+  boolean fastPaint = false;\r
+\r
+  List<SequenceI> searchResults;\r
+\r
+  public IdCanvas(AlignViewport av)\r
+  {\r
+    setLayout(null);\r
+    this.av = av;\r
+    PaintRefresher.Register(this, av.getSequenceSetId());\r
+  }\r
+\r
+  public void drawIdString(Graphics gg, boolean hiddenRows, SequenceI s,\r
+          int i, int starty,\r
+          int ypos)\r
+  {\r
+    int charHeight = av.getCharHeight();\r
+\r
+    if (searchResults != null && searchResults.contains(s))\r
+    {\r
+      gg.setColor(Color.black);\r
+      gg.fillRect(0, ((i - starty) * charHeight) + ypos, getSize().width,\r
+              charHeight);\r
+      gg.setColor(Color.white);\r
+    }\r
+    else if (av.getSelectionGroup() != null\r
+            && av.getSelectionGroup().getSequences(null).contains(s))\r
+    {\r
+      gg.setColor(Color.lightGray);\r
+      gg.fillRect(0, ((i - starty) * charHeight) + ypos, getSize().width,\r
+              charHeight);\r
+      gg.setColor(Color.white);\r
+    }\r
+    else\r
+    {\r
+      gg.setColor(av.getSequenceColour(s));\r
+      gg.fillRect(0, ((i - starty) * charHeight) + ypos, getSize().width,\r
+              charHeight);\r
+      gg.setColor(Color.black);\r
+    }\r
+\r
+    gg.drawString(s.getDisplayId(av.getShowJVSuffix()), 0,\r
+            ((i - starty) * charHeight) + ypos + charHeight\r
+                    - (charHeight / 5));\r
+\r
+    if (hiddenRows)\r
+    {\r
+      drawMarker(i, starty, ypos);\r
+    }\r
+\r
+  }\r
+\r
+  public void fastPaint(int vertical)\r
+  {\r
+    if (gg == null)\r
+    {\r
+      repaint();\r
+      return;\r
+    }\r
+\r
+    gg.copyArea(0, 0, getSize().width, imgHeight, 0,\r
+            -vertical * av.getCharHeight());\r
+\r
+    int ss = av.startSeq, es = av.endSeq, transY = 0;\r
+    if (vertical > 0) // scroll down\r
+    {\r
+      ss = es - vertical;\r
+      if (ss < av.startSeq) // ie scrolling too fast, more than a page at a time\r
+      {\r
+        ss = av.startSeq;\r
+      }\r
+      else\r
+      {\r
+        transY = imgHeight - vertical * av.getCharHeight();\r
+      }\r
+    }\r
+    else if (vertical < 0)\r
+    {\r
+      es = ss - vertical;\r
+      if (es > av.endSeq)\r
+      {\r
+        es = av.endSeq;\r
+      }\r
+    }\r
+\r
+    gg.translate(0, transY);\r
+\r
+    drawIds(ss, es);\r
+\r
+    gg.translate(0, -transY);\r
+\r
+    fastPaint = true;\r
+    repaint();\r
+  }\r
+\r
+  public void update(Graphics g)\r
+  {\r
+    paint(g);\r
+  }\r
+\r
+  public void paint(Graphics g)\r
+  {\r
+    if (getSize().height < 0 || getSize().width < 0)\r
+    {\r
+      return;\r
+    }\r
+    if (fastPaint)\r
+    {\r
+      fastPaint = false;\r
+      g.drawImage(image, 0, 0, this);\r
+      return;\r
+    }\r
+\r
+    imgHeight = getSize().height;\r
+    imgHeight -= imgHeight % av.getCharHeight();\r
+\r
+    if (imgHeight < 1)\r
+    {\r
+      return;\r
+    }\r
+\r
+    if (image == null || imgHeight != image.getHeight(this))\r
+    {\r
+      image = createImage(getSize().width, imgHeight);\r
+      gg = image.getGraphics();\r
+      gg.setFont(av.getFont());\r
+    }\r
+\r
+    // Fill in the background\r
+    gg.setColor(Color.white);\r
+    Font italic = new Font(av.getFont().getName(), Font.ITALIC, av\r
+            .getFont().getSize());\r
+    gg.setFont(italic);\r
+\r
+    gg.fillRect(0, 0, getSize().width, getSize().height);\r
+    drawIds(av.startSeq, av.endSeq);\r
+    g.drawImage(image, 0, 0, this);\r
+  }\r
+\r
+  /**\r
+   * local copy of av.getCharHeight set at top of drawIds\r
+   */\r
+  private int avcharHeight;\r
+  void drawIds(int starty, int endy)\r
+  {\r
+    // hardwired italic IDs in applet currently\r
+    Font italic = new Font(av.getFont().getName(), Font.ITALIC, av\r
+            .getFont().getSize());\r
+    // temp variable for speed\r
+    avcharHeight = av.getCharHeight();\r
+\r
+    gg.setFont(italic);\r
+\r
+    Color currentColor = Color.white;\r
+    Color currentTextColor = Color.black;\r
+\r
+    final boolean doHiddenCheck = av.isDisplayReferenceSeq()\r
+            || av.hasHiddenRows(), hiddenRows = av.hasHiddenRows()\r
+            && av.getShowHiddenMarkers();\r
+\r
+    if (av.getWrapAlignment())\r
+    {\r
+      int maxwidth = av.getAlignment().getWidth();\r
+      int alheight = av.getAlignment().getHeight();\r
+\r
+      if (av.hasHiddenColumns())\r
+      {\r
+        maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+      }\r
+\r
+      int annotationHeight = 0;\r
+      AnnotationLabels labels = null;\r
+\r
+      if (av.isShowAnnotation())\r
+      {\r
+        AnnotationPanel ap = new AnnotationPanel(av);\r
+        annotationHeight = ap.adjustPanelHeight();\r
+        labels = new AnnotationLabels(av);\r
+      }\r
+      int hgap = avcharHeight;\r
+      if (av.getScaleAboveWrapped())\r
+      {\r
+        hgap += avcharHeight;\r
+      }\r
+\r
+      int cHeight = alheight * avcharHeight + hgap + annotationHeight;\r
+\r
+      int rowSize = av.getEndRes() - av.getStartRes();\r
+      // Draw the rest of the panels\r
+      for (int ypos = hgap, row = av.startRes; (ypos <= getSize().height)\r
+              && (row < maxwidth); ypos += cHeight, row += rowSize)\r
+      {\r
+        for (int i = starty; i < alheight; i++)\r
+        {\r
+\r
+          SequenceI s = av.getAlignment().getSequenceAt(i);\r
+          gg.setFont(italic);\r
+          if (doHiddenCheck)\r
+          {\r
+            setHiddenFont(s);\r
+          }\r
+          drawIdString(gg, hiddenRows, s, i, 0, ypos);\r
+        }\r
+\r
+        if (labels != null)\r
+        {\r
+          gg.translate(0, ypos + (alheight * avcharHeight));\r
+          labels.drawComponent(gg, getSize().width);\r
+          gg.translate(0, -ypos - (alheight * avcharHeight));\r
+        }\r
+\r
+      }\r
+    }\r
+    else\r
+    {\r
+      // Now draw the id strings\r
+      SequenceI seq;\r
+      for (int i = starty; i < endy; i++)\r
+      {\r
+\r
+        seq = av.getAlignment().getSequenceAt(i);\r
+        if (seq == null)\r
+        {\r
+          continue;\r
+        }\r
+        gg.setFont(italic);\r
+        // boolean isrep=false;\r
+        if (doHiddenCheck)\r
+        {\r
+          // isrep =\r
+          setHiddenFont(seq);\r
+        }\r
+\r
+        // Selected sequence colours\r
+        if ((searchResults != null) && searchResults.contains(seq))\r
+        {\r
+          currentColor = Color.black;\r
+          currentTextColor = Color.white;\r
+        }\r
+        else if ((av.getSelectionGroup() != null)\r
+                && av.getSelectionGroup().getSequences(null).contains(seq))\r
+        {\r
+          currentColor = Color.lightGray;\r
+          currentTextColor = Color.black;\r
+        }\r
+        else\r
+        {\r
+          currentColor = av.getSequenceColour(seq);\r
+          currentTextColor = Color.black;\r
+        }\r
+\r
+        gg.setColor(currentColor);\r
+        // TODO: isrep could be used to highlight the representative in a\r
+        // different way\r
+        gg.fillRect(0, (i - starty) * avcharHeight, getSize().width,\r
+                avcharHeight);\r
+        gg.setColor(currentTextColor);\r
+\r
+        gg.drawString(seq.getDisplayId(av.getShowJVSuffix()), 0,\r
+                (((i - starty) * avcharHeight) + avcharHeight)\r
+                        - (avcharHeight / 5));\r
+\r
+        if (hiddenRows)\r
+        {\r
+          drawMarker(i, starty, 0);\r
+        }\r
+      }\r
+    }\r
+  }\r
+\r
+  public void setHighlighted(List<SequenceI> list)\r
+  {\r
+    searchResults = list;\r
+    repaint();\r
+  }\r
+\r
+  void drawMarker(int i, int starty, int yoffset)\r
+  {\r
+    SequenceI[] hseqs = av.getAlignment().getHiddenSequences().hiddenSequences;\r
+    // Use this method here instead of calling hiddenSeq adjust\r
+    // 3 times.\r
+    int hSize = hseqs.length;\r
+\r
+    int hiddenIndex = i;\r
+    int lastIndex = i - 1;\r
+    int nextIndex = i + 1;\r
+\r
+    for (int j = 0; j < hSize; j++)\r
+    {\r
+      if (hseqs[j] != null)\r
+      {\r
+        if (j - 1 < hiddenIndex)\r
+        {\r
+          hiddenIndex++;\r
+        }\r
+        if (j - 1 < lastIndex)\r
+        {\r
+          lastIndex++;\r
+        }\r
+        if (j - 1 < nextIndex)\r
+        {\r
+          nextIndex++;\r
+        }\r
+      }\r
+    }\r
+\r
+    boolean below = (hiddenIndex > lastIndex + 1);\r
+    boolean above = (nextIndex > hiddenIndex + 1);\r
+\r
+    gg.setColor(Color.blue);\r
+    if (below)\r
+    {\r
+      gg.fillPolygon(new int[]\r
+      { getSize().width - avcharHeight, getSize().width - avcharHeight,\r
+          getSize().width }, new int[]\r
+      { (i - starty) * avcharHeight + yoffset,\r
+          (i - starty) * avcharHeight + yoffset + avcharHeight / 4,\r
+          (i - starty) * avcharHeight + yoffset }, 3);\r
+    }\r
+    if (above)\r
+    {\r
+      gg.fillPolygon(new int[]\r
+      { getSize().width - avcharHeight, getSize().width - avcharHeight,\r
+          getSize().width }, new int[]\r
+      { (i - starty + 1) * avcharHeight + yoffset,\r
+          (i - starty + 1) * avcharHeight + yoffset - avcharHeight / 4,\r
+          (i - starty + 1) * avcharHeight + yoffset }, 3);\r
+\r
+    }\r
+  }\r
+\r
+  boolean setHiddenFont(SequenceI seq)\r
+  {\r
+    Font bold = new Font(av.getFont().getName(), Font.BOLD, av.getFont()\r
+            .getSize());\r
+\r
+    if (av.isHiddenRepSequence(seq))\r
+    {\r
+      gg.setFont(bold);\r
+      return true;\r
+    }\r
+    return false;\r
+  }\r
+}\r