JAL-192 patch for off-by one and pathological case (hide inserted regions + set refer...
[jalview.git] / src / jalview / gui / ScalePanel.java
index 61f1b36..194066e 100755 (executable)
@@ -492,33 +492,44 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
     gg.setColor(Color.black);
 
     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;
+    }
+
+
     int widthx = 1 + endx - startx;
 
     FontMetrics fm = gg.getFontMetrics(av.getFont());
     int y = avCharHeight - fm.getDescent();
 
-    if ((scalestartx % 10) == 0)
+    if (refSeq == null && scalestartx % 10 == 0)
     {
       scalestartx += 5;
     }
 
     String string;
-    boolean isrgap = false;
-    char rc;
     int maxX = 0, refN, iadj;
-    SequenceI refSeq = av.getAlignment().getSeqrep();
-    int refSp = -1, refEp = -1;
-    if (refSeq != null)
-    {
-      refSp = refSeq.findIndex(refSeq.getStart()) - 1;
-      refEp = refSeq.findIndex(refSeq.getEnd()) - 1;
-    }
     // todo: add a 'reference origin column' to set column number relative to
     for (int i = scalestartx; i < endx; i += 5)
     {
-      if ((i % 10) == 0)
+      if (((i - refSp) % 10) == 0)
       {
-        iadj = av.getColumnSelection().adjustForHiddenColumns(i) - 1;
+        iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1);
         if (refSeq == null)
         {
           string = String.valueOf(iadj);
@@ -529,13 +540,13 @@ public class ScalePanel extends JPanel implements MouseMotionListener,
           // TODO show bounds if position is a gap
           // - ie L--R -> "1L|2R" for
           // marker
-          if (iadj < refSp)
+          if (iadj < refStartI)
           {
-            string = String.valueOf(iadj - refSp);
+            string = String.valueOf(iadj - refStartI);
           }
-          else if (iadj > refEp)
+          else if (iadj > refEndI)
           {
-            string = "+" + String.valueOf(iadj - refEp);
+            string = "+" + String.valueOf(iadj - refEndI);
           }
           else
           {