So close! Bamboo test
[jalview.git] / src / jalview / viewmodel / ViewportRanges.java
index c7a3fa1..f89776e 100644 (file)
@@ -97,7 +97,7 @@ public class ViewportRanges extends ViewportProperties
    */
   public int getVisibleAlignmentWidth()
   {
-    return al.getWidth() - al.getHiddenColumns().getSize();
+    return al.getVisibleWidth();
   }
 
   /**
@@ -136,13 +136,25 @@ public class ViewportRanges extends ViewportProperties
     int[] oldvalues = updateStartEndRes(start, end);
     int oldstartres = oldvalues[0];
     int oldendres = oldvalues[1];
+    
+    if (oldstartres == startRes && oldendres == endRes)
+    {
+      return; // BH 2019.07.27 standard check for no changes
+    }
 
+    // "STARTRES" is a misnomer here -- really "STARTORENDRES"
+    // note that this could be "no change" if the range is just being expanded
     changeSupport.firePropertyChange(STARTRES, oldstartres, startRes);
     if (oldstartres == startRes)
     {
+      // only caught in ViewportRangesTest
+      // No listener cares about this
+      // "ENDRES" is a misnomer here -- really "ENDONLYRES"
+      // BH 2019.07.27 adds end change check
+      // fire only if only the end is changed
       // event won't be fired if start positions are same
       // fire an event for the end positions in case they changed
-      changeSupport.firePropertyChange(ENDRES, oldendres, endRes);
+     changeSupport.firePropertyChange(ENDRES, oldendres, endRes);
     }
   }
 
@@ -224,6 +236,7 @@ public class ViewportRanges extends ViewportProperties
    */
   public void setStartEndSeq(int start, int end)
   {
+    System.out.println("ViewportRange setStartEndSeq " + start + " " + end);
     int[] oldvalues = updateStartEndSeq(start, end);
     int oldstartseq = oldvalues[0];
     int oldendseq = oldvalues[1];
@@ -249,6 +262,7 @@ public class ViewportRanges extends ViewportProperties
    */
   private int[] updateStartEndSeq(int start, int end)
   {
+    System.out.println("ViewportRange updateStartEndSeq " + start + " " + end);
     int oldstartseq = this.startSeq;
     int visibleHeight = getVisibleAlignmentHeight();
     if (start > visibleHeight - 1)
@@ -285,12 +299,12 @@ public class ViewportRanges extends ViewportProperties
    * event.
    * 
    * @param seq
-   *          sequence position
+   *          sequence position in the range [0, height)
    */
   public void setEndSeq(int seq)
   {
-    int height = getViewportHeight();
-    setStartEndSeq(seq - height + 1, seq);
+    // BH 2018.04.18 added safety for seq < 0; comment about not being >= height
+    setStartEndSeq(Math.max(0, seq + 1 - getViewportHeight()), seq);
   }
 
   /**
@@ -425,17 +439,21 @@ public class ViewportRanges extends ViewportProperties
   public void setViewportStartAndHeight(int start, int h)
   {
     int vpstart = start;
+
+    int visHeight = getVisibleAlignmentHeight();
     if (vpstart < 0)
     {
       vpstart = 0;
     }
-    else if ((h <= getVisibleAlignmentHeight())
-            && (vpstart + h - 1 > getVisibleAlignmentHeight() - 1))
+    else if (h <= visHeight && vpstart + h > visHeight)
     // viewport height is less than the full alignment and we are running off
     // the bottom
     {
-      vpstart = getVisibleAlignmentHeight() - h;
+      vpstart = visHeight - h;
     }
+    // System.out.println("ViewportRanges setviewportStartAndHeight " + vpstart
+    // + " " + start + " " + h + " " + getVisibleAlignmentHeight());
+
     setStartEndSeq(vpstart, vpstart + h - 1);
   }
 
@@ -609,14 +627,14 @@ public class ViewportRanges extends ViewportProperties
     }
     
     HiddenColumns hidden = al.getHiddenColumns();
-    while (x < hidden.adjustForHiddenColumns(startRes))
+    while (x < hidden.visibleToAbsoluteColumn(startRes))
     {
       if (!scrollRight(false))
       {
         break;
       }
     }
-    while (x > hidden.adjustForHiddenColumns(endRes))
+    while (x > hidden.visibleToAbsoluteColumn(endRes))
     {
       if (!scrollRight(true))
       {
@@ -638,7 +656,7 @@ public class ViewportRanges extends ViewportProperties
     boolean changedLocation = false;
 
     // convert the x,y location to visible coordinates
-    int visX = al.getHiddenColumns().findColumnPosition(x);
+    int visX = al.getHiddenColumns().absoluteToVisibleColumn(x);
     int visY = al.getHiddenSequences().findIndexWithoutHiddenSeqs(y);
 
     // if (vis_x,vis_y) is already visible don't do anything
@@ -792,4 +810,10 @@ public class ViewportRanges extends ViewportProperties
 
     return maxScroll;
   }
+  
+
+  @Override
+  public String toString() {
+     return "[ViewportRange " + startSeq + "-" + endSeq + ", "+ startRes + "-" + endRes + "]";
+  }
 }