X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FColumnSelection.java;h=6fd76b23ebf02a9366c38fecce0ee565d629edc1;hb=64b79e3758bd98db1664c47205f6570b2d689ba9;hp=c2327819c81923ce95e11d96da730e9544718cc4;hpb=10c09b8e314af1a1e7e01a0f450f943a60a41940;p=jalview.git diff --git a/src/jalview/datamodel/ColumnSelection.java b/src/jalview/datamodel/ColumnSelection.java index c232781..6fd76b2 100644 --- a/src/jalview/datamodel/ColumnSelection.java +++ b/src/jalview/datamodel/ColumnSelection.java @@ -600,7 +600,7 @@ public class ColumnSelection * Return absolute column index for a visible column index * * @param column - * int column index in alignment view + * int column index in alignment view (count from zero) * @return alignment column index for column */ public int adjustForHiddenColumns(int column) @@ -1082,21 +1082,22 @@ public class ColumnSelection /** * Locate the first and last position visible for this sequence. if seq isn't * visible then return the position of the left and right of the hidden - * boundary region + * boundary region, and the corresponding alignment column indices for the + * extent of the sequence * * @param seq - * @return int[] { visible start, visible end, first seqpos, last seqpos } + * @return int[] { visible start, visible end, first seqpos, last seqpos, + * alignment index for seq start, alignment index for seq end } */ public int[] locateVisibleBoundsOfSequence(SequenceI seq) { int fpos=seq.getStart(),lpos= seq.getEnd(); int start = 0; - int end = seq.getLength(); if (hiddenColumns == null || hiddenColumns.size() == 0) { - return new int[] { seq.findIndex(fpos), seq.findIndex(lpos), fpos, - lpos }; + int ifpos = seq.findIndex(fpos) - 1, ilpos = seq.findIndex(lpos) - 1; + return new int[] { ifpos, ilpos, fpos, lpos, ifpos, ilpos }; } // Simply walk along the sequence whilst watching for hidden column @@ -1104,19 +1105,26 @@ public class ColumnSelection List regions = getHiddenColumns(); int spos = fpos, lastvispos = -1, rcount = 0, hideStart = seq .getLength(), hideEnd = -1; - int visPrev = 0, visNext = 0, base = 0; + int visPrev = 0, visNext = 0, firstP = -1, lastP = -1; boolean foundStart = false; for (int p = 0, pLen = seq.getLength(); spos <= seq.getEnd() && p < pLen; p++) { if (!Comparison.isGap(seq.getCharAt(p))) { + // keep track of first/last column + // containing sequence data regardless of visibility + if (firstP == -1) + { + firstP = p; + } + lastP = p; // update hidden region start/end while (hideEnd < p && rcount < regions.size()) { int[] region = regions.get(rcount++); - visNext += region[1] + 1 - region[0]; - visPrev = visNext-1; + visPrev = visNext; + visNext += region[0] - visPrev; hideStart = region[0]; hideEnd = region[1]; } @@ -1143,10 +1151,10 @@ public class ColumnSelection if (foundStart) { return new int[] { findColumnPosition(start), - findColumnPosition(lastvispos), fpos, lpos }; + findColumnPosition(lastvispos), fpos, lpos, firstP, lastP }; } // otherwise, sequence was completely hidden - return new int[] { visPrev, visNext, 0, 0 }; + return new int[] { visPrev, visNext, 0, 0, firstP, lastP }; } /**