JAL-2831 Added move viewport event and set up cursor code to use it
[jalview.git] / src / jalview / viewmodel / ViewportRanges.java
index 4bdaa81..9a1e13c 100644 (file)
@@ -41,6 +41,8 @@ public class ViewportRanges extends ViewportProperties
 
   public static final String STARTRESANDSEQ = "startresandseq";
 
+  public static final String MOVE_VIEWPORT = "move_viewport";
+
   private boolean wrappedMode = false;
 
   // start residue of viewport
@@ -593,7 +595,7 @@ public class ViewportRanges extends ViewportProperties
     {
       scrollUp(false);
     }
-
+    
     HiddenColumns hidden = al.getHiddenColumns();
     while (x < hidden.adjustForHiddenColumns(startRes))
     {
@@ -612,6 +614,40 @@ public class ViewportRanges extends ViewportProperties
   }
 
   /**
+   * Set the viewport location so that a position is visible
+   * 
+   * @param x
+   *          column to be visible
+   * @param y
+   *          row to be visible
+   */
+  public boolean setViewportLocation(int x, int y)
+  {
+    // if (x,y) is already visible don't do anything
+    boolean changedLocation = false;
+    if (startRes > x || x > endRes || startSeq > y && y > endSeq)
+    {
+      int width = getViewportWidth();
+      int[] oldresvalues = updateStartEndRes(x, x + width - 1);
+
+      int startseq = y;
+      int height = getViewportHeight();
+      if (startseq + height - 1 > getVisibleAlignmentHeight() - 1)
+      {
+        startseq = getVisibleAlignmentHeight() - height;
+      }
+      int[] oldseqvalues = 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);
+    }
+    return changedLocation;
+  }
+
+  /**
    * Adjust sequence position for page up. Fires a property change event.
    */
   public void pageUp()