Merge remote-tracking branch 'origin/bug/JAL-2742' into
authorkiramt <k.mourao@dundee.ac.uk>
Tue, 26 Sep 2017 18:35:30 +0000 (19:35 +0100)
committerkiramt <k.mourao@dundee.ac.uk>
Tue, 26 Sep 2017 18:35:30 +0000 (19:35 +0100)
feature/JAL-2674take2

Conflicts:
src/jalview/datamodel/CigarArray.java

1  2 
src/jalview/datamodel/CigarArray.java

@@@ -152,41 -154,29 +152,32 @@@ public class CigarArray extends CigarBa
     * @param selectionGroup
     */
    private void constructFromAlignment(AlignmentI alignment,
 -          List<int[]> list, SequenceGroup selectionGroup)
 +          HiddenColumns hidden, SequenceGroup selectionGroup)
    {
      int[] _startend = _calcStartEndBounds(alignment, selectionGroup);
 -    int start = _startend[1], end = _startend[2];
 +    int start = _startend[1];
 +    int end = _startend[2];
      // now construct the CigarArray operations
 -    if (list != null)
 +    if (hidden != null)
      {
        int[] region;
 -      int hideStart, hideEnd;
 +      int hideStart;
 +      int hideEnd;
        int last = start;
 -      for (int j = 0; last < end & j < list.size(); j++)
 +
 +      Iterator<int[]> regions = hidden.getBoundedIterator(start, end, true);
 +      while (regions.hasNext())
        {
 -        region = list.get(j);
 +        region = regions.next();
          hideStart = region[0];
          hideEnd = region[1];
 -        // edit hidden regions to selection range
  
-         // edit hidden regions to selection range
-         // TODO possible bug here in original code: if hideEnd==last we continue
-         // but shouldn't this be a single D at start?
-         if (hideStart < last)
+         // just move on if hideEnd is before last
+         if (hideEnd < last)
          {
-           if (hideEnd > last)
-           {
-             hideStart = last;
-           }
-           else
-           {
-             continue;
-           }
+           continue;
          }
+         // exit if next region is after end
          if (hideStart > end)
          {
            break;
          addOperation(CigarArray.D, 1 + hideEnd - hideStart);
          last = hideEnd + 1;
        }
 +
        // Final match if necessary.
-       if (last < end)
+       if (last <= end)
        {
          addOperation(CigarArray.M, end - last + 1);
        }