JAL-2491 Started moving other scrolling fns into viewportranges
[jalview.git] / src / jalview / viewmodel / ViewportRanges.java
index a14fc26..72155aa 100644 (file)
@@ -86,29 +86,33 @@ public class ViewportRanges extends ViewportProperties
    */
   public void setStartRes(int res)
   {
-    int oldres = this.startRes;
-    setStartResInternal(res);
-    changeSupport.firePropertyChange("startres", oldres, res);
+    int width = getViewportWidth();
+    setStartEndRes(res, res + width - 1);
   }
 
-  private void setStartResInternal(int res)
+  public void setStartEndRes(int startres, int endres)
   {
-    if (res > al.getWidth() - 1)
+    int oldres = this.startRes;
+    if (startres > al.getWidth() - 1)
     {
-      res = al.getWidth() - 1;
+      startres = al.getWidth() - 1;
     }
-    else if (res < 0)
+    else if (startres < 0)
     {
-      res = 0;
+      startres = 0;
     }
-    this.startRes = res;
-  }
+    this.startRes = startres;
+
+    if (endres >= al.getWidth())
+    {
+      endres = al.getWidth() - 1;
+    }
+    else if (endres < 0)
+    {
+      endres = 0;
+    }
+    this.endRes = endres;
 
-  public void setStartEndRes(int startres, int endres)
-  {
-    int oldres = this.startRes;
-    setStartResInternal(startres);
-    setEndResInternal(endres);
     changeSupport.firePropertyChange("startres", oldres, startres);
   }
 
@@ -120,23 +124,8 @@ public class ViewportRanges extends ViewportProperties
    */
   public void setEndRes(int res)
   {
-    int oldres = this.endRes;
-    setEndResInternal(res);
-
-    changeSupport.firePropertyChange("endres", oldres, res);
-  }
-
-  private void setEndResInternal(int res)
-  {
-    if (res >= al.getWidth())
-    {
-      res = al.getWidth() - 1;
-    }
-    else if (res < 0)
-    {
-      res = 0;
-    }
-    this.endRes = res;
+    int width = getViewportWidth();
+    setStartEndRes(res - width + 1, res);
   }
 
   /**
@@ -147,29 +136,32 @@ public class ViewportRanges extends ViewportProperties
    */
   public void setStartSeq(int seq)
   {
-    int oldseq = this.startSeq;
-    setStartSeqInternal(seq);
-    changeSupport.firePropertyChange("startseq", oldseq, seq);
+    int height = getViewportHeight();
+    setStartEndSeq(seq, seq + height - 1);
   }
 
-  private void setStartSeqInternal(int seq)
+  public void setStartEndSeq(int startseq, int endseq)
   {
-    if (seq > al.getHeight() - 1)
+    int oldseq = this.startSeq;
+    if (startseq > al.getHeight() - 1)
     {
-      seq = al.getHeight() - 1;
+      startseq = al.getHeight() - 1;
     }
-    else if (seq < 0)
+    else if (startseq < 0)
     {
-      seq = 0;
+      startseq = 0;
     }
-    this.startSeq = seq;
-  }
+    this.startSeq = startseq;
 
-  public void setStartEndSeq(int startseq, int endseq)
-  {
-    int oldseq = this.startSeq;
-    setStartSeqInternal(startseq);
-    setEndSeqInternal(endseq);
+    if (endseq >= al.getHeight())
+    {
+      endseq = al.getHeight() - 1;
+    }
+    else if (endseq < 0)
+    {
+      endseq = 0;
+    }
+    this.endSeq = endseq;
     changeSupport.firePropertyChange("startseq", oldseq, startseq);
   }
 
@@ -181,22 +173,8 @@ public class ViewportRanges extends ViewportProperties
    */
   public void setEndSeq(int seq)
   {
-    int oldseq = this.endSeq;
-    setEndSeqInternal(seq);
-    changeSupport.firePropertyChange("endseq", oldseq, seq);
-  }
-
-  private void setEndSeqInternal(int seq)
-  {
-    if (seq >= al.getHeight())
-    {
-      seq = al.getHeight() - 1;
-    }
-    else if (seq < 0)
-    {
-      seq = 0;
-    }
-    this.endSeq = seq;
+    int height = getViewportHeight();
+    setStartEndSeq(seq - height + 1, seq);
   }
 
   /**
@@ -230,4 +208,90 @@ public class ViewportRanges extends ViewportProperties
   {
     return endSeq;
   }
+
+  /**
+   * Get width of viewport in residues
+   * 
+   * @return width of viewport
+   */
+  public int getViewportWidth()
+  {
+    return (endRes - startRes + 1); // TODO get for wrapped alignments too
+  }
+
+  /**
+   * Get height of viewport in residues
+   * 
+   * @return height of viewport
+   */
+  public int getViewportHeight()
+  {
+    return (endSeq - startSeq + 1);
+  }
+
+  // return value is true if the scroll is valid
+  public boolean scrollUp(boolean up)
+  {
+    if (up)
+    {
+      if (startSeq < 1)
+      {
+        return false;
+      }
+
+      setStartSeq(startSeq - 1);
+    }
+    else
+    {
+      if (endSeq >= al.getHeight() - 1)
+      {
+        return false;
+      }
+
+      setStartSeq(startSeq + 1);
+    }
+    return true;
+  }
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param right
+   *          DOCUMENT ME!
+   * 
+   * @return DOCUMENT ME!
+   */
+  public boolean scrollRight(boolean right)
+  {
+    if (!right)
+    {
+      if (startRes < 1)
+      {
+        return false;
+      }
+
+      setStartRes(startRes - 1);
+    }
+    else
+    {
+      if (endRes > al.getWidth() - 1)
+      {
+        return false;
+      }
+
+      setStartRes(startRes + 1);
+    }
+
+    return true;
+  }
+
+  public void scrollToWrappedVisible(int res)
+  {
+    if (res < startRes || res > endRes)
+    {
+      setEndSeq(res / getViewportWidth());
+    }
+
+  }
+
 }