X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2FViewportRanges.java;h=e1abb54acf2979daa7f2bca2d23c3b30e47b7010;hb=d043ce47fc710d3eb2629ba926a8a7417bd67d8c;hp=104fb62be1541ddf9b41c35486a1311378d67628;hpb=04c8f7bff663aa469127e9eed4164e02933782f1;p=jalview.git diff --git a/src/jalview/viewmodel/ViewportRanges.java b/src/jalview/viewmodel/ViewportRanges.java index 104fb62..e1abb54 100644 --- a/src/jalview/viewmodel/ViewportRanges.java +++ b/src/jalview/viewmodel/ViewportRanges.java @@ -112,7 +112,7 @@ public class ViewportRanges extends ViewportProperties * Set first residue visible in the viewport, and retain the current width. * Fires a property change event. * - * @param res + * @param res * residue position */ public void setStartRes(int res) @@ -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,7 +236,6 @@ 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]; @@ -250,34 +261,16 @@ public class ViewportRanges extends ViewportProperties */ private int[] updateStartEndSeq(int start, int end) { - int oldstartseq = this.startSeq; - int visibleHeight = getVisibleAlignmentHeight(); - if (start > visibleHeight - 1) - { - startSeq = Math.max(visibleHeight - 1, 0); - } - else if (start < 0) - { - startSeq = 0; - } - else - { - startSeq = start; - } +// if (end == 3 && this.endSeq == 14 || end == 13 && this.endSeq == 3) { +// new NullPointerException().printStackTrace(System.out); +// System.out.println("ViewportRange updateStartEndSeq " + start + " " + end + " " + Thread.currentThread()); +// } + int oldstartseq = this.startSeq; int oldendseq = this.endSeq; - if (end >= visibleHeight) - { - endSeq = Math.max(visibleHeight - 1, 0); - } - else if (end < 0) - { - endSeq = 0; - } - else - { - endSeq = end; - } + int max = getVisibleAlignmentHeight() - 1; + startSeq = Math.max(0, Math.min(start, max)); + endSeq = Math.max(0, Math.min(end, max)); return new int[] { oldstartseq, oldendseq }; } @@ -392,21 +385,15 @@ public class ViewportRanges extends ViewportProperties */ public void setViewportStartAndWidth(int start, int w) { - int vpstart = start; - if (vpstart < 0) - { - vpstart = 0; - } - - /* - * if not wrapped, don't leave white space at the right margin - */ + int vpstart = Math.max(0, start); + if (!wrappedMode) { - if ((w <= getVisibleAlignmentWidth()) - && (vpstart + w - 1 > getVisibleAlignmentWidth() - 1)) + // if not wrapped, don't leave white space at the right margin + int maxStart = getVisibleAlignmentWidth() - w; + if (maxStart >= 0) { - vpstart = getVisibleAlignmentWidth() - w; + vpstart = Math.min(vpstart, maxStart); } } @@ -425,22 +412,15 @@ 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 <= visHeight && vpstart + h > visHeight) - // viewport height is less than the full alignment and we are running off - // the bottom + int vpstart = Math.max(0, start); + int maxStart = getVisibleAlignmentHeight() - h; + if (maxStart > 0) { - vpstart = visHeight - h; + // can't start higher than vertical extent will allow + // (viewport height is less than the full alignment + // and we are running off the bottom) + vpstart = Math.min(vpstart, maxStart); } - // System.out.println("ViewportRanges setviewportStartAndHeight " + vpstart - // + " " + start + " " + h + " " + getVisibleAlignmentHeight()); - setStartEndSeq(vpstart, vpstart + h - 1); } @@ -797,4 +777,10 @@ public class ViewportRanges extends ViewportProperties return maxScroll; } + + + @Override + public String toString() { + return "[ViewportRange " + startSeq + "-" + endSeq + ", "+ startRes + "-" + endRes + "]"; + } }