X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FHiddenSequences.java;h=b5efeb49ef117305942c710669f9b2544959196f;hb=62fb9a3042bdc6daaad8218d47b12cb912907354;hp=9c02f29b06f8dcab31b592ca1e5548ea02a84909;hpb=863529ed7d15dd5812cf280d82bfd53734b424a1;p=jalview.git diff --git a/src/jalview/datamodel/HiddenSequences.java b/src/jalview/datamodel/HiddenSequences.java index 9c02f29..b5efeb4 100755 --- a/src/jalview/datamodel/HiddenSequences.java +++ b/src/jalview/datamodel/HiddenSequences.java @@ -157,9 +157,10 @@ public class HiddenSequences int absAlignmentIndex = alignment.findIndex(sequence); int alignmentIndex = adjustForHiddenSeqs(absAlignmentIndex); - if (hiddenSequences[alignmentIndex] != null) + if (alignmentIndex < 0 || hiddenSequences[alignmentIndex] != null) { System.out.println("ERROR!!!!!!!!!!!"); + return; } hiddenSequences[alignmentIndex] = sequence; @@ -170,7 +171,13 @@ public class HiddenSequences public List showAll( Map hiddenRepSequences) { - List revealedSeqs = new ArrayList(); + List revealedSeqs = new ArrayList<>(); + + if (hiddenSequences == null) + { + return revealedSeqs; + } + for (int i = 0; i < hiddenSequences.length; i++) { if (hiddenSequences[i] != null) @@ -199,7 +206,7 @@ public class HiddenSequences public List showSequence(int alignmentIndex, Map hiddenRepSequences) { - List revealedSeqs = new ArrayList(); + List revealedSeqs = new ArrayList<>(); SequenceI repSequence = alignment.getSequenceAt(alignmentIndex); if (repSequence != null && hiddenRepSequences != null && hiddenRepSequences.containsKey(repSequence)) @@ -215,8 +222,8 @@ public class HiddenSequences end = hiddenSequences.length - 1; } - List asequences; - synchronized (asequences = alignment.getSequences()) + List asequences = alignment.getSequences(); + synchronized (asequences) { for (int index = end; index > start; index--) { @@ -232,8 +239,8 @@ public class HiddenSequences } else { - System.out.println(seq.getName() - + " has been deleted whilst hidden"); + System.out.println( + seq.getName() + " has been deleted whilst hidden"); } } } @@ -247,7 +254,8 @@ public class HiddenSequences } /** - * Convert absolute alignment index to visible alignment index + * Convert absolute alignment index to visible alignment index (or -1 if + * before the first visible sequence) * * @param alignmentIndex * @return @@ -260,8 +268,14 @@ public class HiddenSequences } int index = 0; int hiddenSeqs = 0; + int diff = 0; if (hiddenSequences.length <= alignmentIndex) { + // if the alignmentIndex runs past the end of hidden sequences + // and therefore actually past the end of the alignment + // store the difference to add back on at the end, so that behaviour + // is consistent with hidden columns behaviour (used by overview panel) + diff = alignmentIndex - hiddenSequences.length + 1; alignmentIndex = hiddenSequences.length - 1; } @@ -274,7 +288,7 @@ public class HiddenSequences index++; } - return (alignmentIndex - hiddenSeqs); + return (alignmentIndex - hiddenSeqs + diff); } /** @@ -288,7 +302,7 @@ public class HiddenSequences * the row to start from * @return the position of the row in the visible alignment */ - public int findIndexNAboveRow(int visibleDistance, int startRow) + public int subtractVisibleRows(int visibleDistance, int startRow) { // walk upwards through the alignment // count all the non-null sequences until we have visibleDistance counted @@ -298,7 +312,7 @@ public class HiddenSequences return startRow - visibleDistance; } - int index = startRow; + int index = Math.min(startRow, hiddenSequences.length - 1); int count = 0; while ((index > -1) && (count < visibleDistance)) { @@ -397,4 +411,20 @@ public class HiddenSequences return false; } + + /** + * Answers if a sequence is hidden + * + * @param seq + * (absolute) index to test + * @return true if sequence at index seq is hidden + */ + public boolean isHidden(int seq) + { + if (hiddenSequences != null) + { + return (hiddenSequences[seq] != null); + } + return false; + } }