JAL-192 JAL-2099 factored out calculation from rendering code #3
[jalview.git] / src / jalview / gui / ScalePanel.java
index 8a3138d..df7a14f 100755 (executable)
@@ -35,7 +35,6 @@ import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.swing.JMenuItem;
@@ -526,8 +525,9 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
     // Draw the scale numbers
     gg.setColor(Color.black);
 
-    List<Object[]> marks = calculateMarks(startx, endx);
     int maxX = 0;
+    List<Object[]> marks = jalview.renderer.ScaleRenderer.calculateMarks(
+            av, startx, endx);
     for (Object[] mark : marks)
     {
       boolean major = Boolean.valueOf((Boolean) mark[0]);
@@ -563,89 +563,4 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
 
   }
 
-  /**
-   * calculate positions markers on the alignment ruler
-   * 
-   * @return List { Object { .. } } Boolean: true/false for major/minor mark,
-   *         Integer: marker position in alignment column coords, String: null
-   *         or a String to be rendered at the position.
-   */
-  public List<Object[]> calculateMarks(int startx, int endx)
-  {
-    new ArrayList<Object[]>();
-
-    int scalestartx = (startx / 10) * 10;
-
-    SequenceI refSeq = av.getAlignment().getSeqrep();
-    int refSp = 0, refEp = -1, refStart = 0, refEnd = -1, refStartI = 0, refEndI = -1;
-    if (refSeq != null)
-    {
-      // find bounds and set origin appopriately
-      // locate first visible position for this sequence
-      int[] refbounds = av.getColumnSelection()
-              .locateVisibleBoundsOfSequence(refSeq);
-
-      refSp = refbounds[0];
-      refEp = refbounds[1];
-      refStart = refbounds[2];
-      refEnd = refbounds[3];
-      refStartI = refbounds[4];
-      refEndI = refbounds[5];
-      scalestartx = refSp + ((scalestartx - refSp) / 10) * 10;
-    }
-
-
-    if (refSeq == null && scalestartx % 10 == 0)
-    {
-      scalestartx += 5;
-    }
-    List<Object[]> marks = new ArrayList<Object[]>();
-    String string;
-    int maxX = 0, refN, iadj;
-    // todo: add a 'reference origin column' to set column number relative to
-    for (int i = scalestartx; i < endx; i += 5)
-    {
-      Object[] amark = new Object[3];
-      if (((i - refSp) % 10) == 0)
-      {
-        if (refSeq == null)
-        {
-          iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1) + 1;
-          string = String.valueOf(iadj);
-        }
-        else
-        {
-          iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1);
-          refN = refSeq.findPosition(iadj);
-          // TODO show bounds if position is a gap
-          // - ie L--R -> "1L|2R" for
-          // marker
-          if (iadj < refStartI)
-          {
-            string = String.valueOf(iadj - refStartI);
-          }
-          else if (iadj > refEndI)
-          {
-            string = "+" + String.valueOf(iadj - refEndI);
-          }
-          else
-          {
-            string = String.valueOf(refN) + refSeq.getCharAt(iadj);
-          }
-        }
-        amark[0] = Boolean.TRUE;
-        amark[1] = Integer.valueOf(i - startx - 1);
-        amark[2] = string;
-
-      }
-      else
-      {
-        amark[0] = Boolean.FALSE;
-        amark[1] = Integer.valueOf(i - startx - 1);
-        amark[2] = null;
-      }
-      marks.add(amark);
-    }
-    return marks;
-  }
 }