JAL-2831 Attempt at cursor fix for wrapped mode
authorkiramt <k.mourao@dundee.ac.uk>
Tue, 14 Nov 2017 12:11:21 +0000 (12:11 +0000)
committerkiramt <k.mourao@dundee.ac.uk>
Tue, 14 Nov 2017 12:11:21 +0000 (12:11 +0000)
src/jalview/viewmodel/ViewportRanges.java

index 0e7b431..973482f 100644 (file)
@@ -549,13 +549,32 @@ public class ViewportRanges extends ViewportProperties
    */
   public boolean scrollToWrappedVisible(int res)
   {
+    int newStartRes = calcWrappedStartResidue(res);
+    if (newStartRes == startRes)
+    {
+      return false;
+    }
+    setStartRes(newStartRes);
+
+    return true;
+  }
+
+  /**
+   * Calculate wrapped start residue from visible start residue
+   * 
+   * @param res
+   *          absolute start residue
+   * @return left column of panel res will be located in
+   */
+  private int calcWrappedStartResidue(int res)
+  {
     int oldStartRes = startRes;
     int width = getViewportWidth();
 
-    if (res >= oldStartRes && res < oldStartRes + width)
+    /*if (res >= oldStartRes && res < oldStartRes + width)
     {
       return false;
-    }
+    }*/
 
     boolean up = res < oldStartRes;
     int widthsToScroll = Math.abs((res - oldStartRes) / width);
@@ -571,10 +590,7 @@ public class ViewportRanges extends ViewportProperties
     {
       newStartRes = 0;
     }
-
-    setStartRes(newStartRes);
-
-    return true;
+    return newStartRes;
   }
 
   /**
@@ -623,17 +639,27 @@ public class ViewportRanges extends ViewportProperties
    */
   public boolean setViewportLocation(int x, int y)
   {
-    // if (x,y) is already visible don't do anything
     boolean changedLocation = false;
 
     int vis_x = al.getHiddenColumns().findColumnPosition(x);
     int vis_y = al.getHiddenSequences().findIndexWithoutHiddenSeqs(y);
 
+    // if (vis_x,vis_y) is already visible don't do anything
     if (startRes > vis_x || vis_x > endRes
             || startSeq > vis_y && vis_y > endSeq)
     {
+      int[] old = new int[] { startRes, startSeq };
+      int[] newresseq;
+      if (wrappedMode)
+      {
+        int newstartres = calcWrappedStartResidue(vis_x);
+        setStartRes(newstartres);
+        newresseq = new int[] { startRes, startSeq };
+      }
+      else
+      {
       int width = getViewportWidth();
-      int[] oldresvalues = updateStartEndRes(vis_x, vis_x + width - 1);
+        updateStartEndRes(vis_x, vis_x + width - 1);
 
       int startseq = vis_y;
       int height = getViewportHeight();
@@ -641,13 +667,14 @@ public class ViewportRanges extends ViewportProperties
       {
         startseq = getVisibleAlignmentHeight() - height;
       }
-      int[] oldseqvalues = updateStartEndSeq(startseq,
+        updateStartEndSeq(startseq,
               startseq + height - 1);
 
-      int[] old = new int[] { oldresvalues[0], oldseqvalues[0] };
-      int[] newresseq = new int[] { startRes, startSeq };
-      changedLocation = true;
-      changeSupport.firePropertyChange(MOVE_VIEWPORT, old, newresseq);
+        // int[] old = new int[] { oldresvalues[0], oldseqvalues[0] };
+        newresseq = new int[] { startRes, startSeq };
+      }
+    changedLocation = true;
+    changeSupport.firePropertyChange(MOVE_VIEWPORT, old, newresseq);
     }
     return changedLocation;
   }