protected void hideInsertions_actionPerformed(ActionEvent actionEvent)
{
+
HiddenColumns hidden = new HiddenColumns();
- BitSet inserts = new BitSet();
- inserts.set(0, ap.av.getAlignment().getWidth());
+ BitSet inserts = new BitSet(), mask = new BitSet();
+
+ // set mask to preserve existing hidden columns outside selected group
+ if (ap.av.hasHiddenColumns())
+ {
+ ap.av.getAlignment().getHiddenColumns().markHiddenRegions(mask);
+ }
boolean markedPopup = false;
// mark inserts in current selection
if (ap.av.getSelectionGroup() != null)
{
+ // mark just the columns in the selection group to be hidden
+ inserts.set(ap.av.getSelectionGroup().getStartRes(), ap.av
+ .getSelectionGroup().getEndRes() + 1);
+
+ // and clear that part of the mask
+ mask.andNot(inserts);
+
+ // now clear columns without gaps
for (SequenceI sq : ap.av.getSelectionGroup().getSequences())
{
if (sq == sequence)
inserts.and(sq.getInsertionsAsBits());
}
}
+ else
+ {
+ // initially, mark all columns to be hidden
+ inserts.set(0, ap.av.getAlignment().getWidth());
+
+ // and clear out old hidden regions completely
+ mask.clear();
+ }
// now mark for sequence under popup if we haven't already done it
if (!markedPopup && sequence != null)
inserts.and(sequence.getInsertionsAsBits());
}
- // finally, hide and set hidden columns
+ // finally, preserve hidden regions outside selection
+ inserts.or(mask);
+
+ // and set hidden columns accordingly
hidden.hideMarkedBits(inserts);
+
ap.av.getAlignment().setHiddenColumns(hidden);
refresh();
}