X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fviewmodel%2FViewportRanges.java;h=54bbfd87f83f19e9e16b7cdc7c9e66d2be9761fe;hb=03beb4f2f8719088cc8c92a7ebc1ad9f2c257426;hp=a14fc26f2a81e4f72dc72d7055c720e7b180568e;hpb=9ce64cb890f97849c5d30cd994cc682465fd7db1;p=jalview.git diff --git a/src/jalview/viewmodel/ViewportRanges.java b/src/jalview/viewmodel/ViewportRanges.java index a14fc26..54bbfd8 100644 --- a/src/jalview/viewmodel/ViewportRanges.java +++ b/src/jalview/viewmodel/ViewportRanges.java @@ -86,29 +86,29 @@ 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 < 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 +120,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 +132,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 +169,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 +204,88 @@ 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) + { + // get the start residue of the wrapped row which res is in + // and set that as our start residue + setStartRes((res / getViewportWidth()) * getViewportWidth()); + } + }