X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FPopupMenu.java;h=9a6c760fc8757a446e22681ad4ec13e7b35d8caf;hb=331cd27699e0303dd42fd01e293f5fae9445e125;hp=8f0116293915d462a38db76b5ef962b67133a662;hpb=c5e7525fa1ce59385fd3e249c2fe4056f4b5371e;p=jalview.git diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index 8f01162..9a6c760 100644 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -1445,42 +1445,59 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener protected void hideInsertions_actionPerformed(ActionEvent actionEvent) { - HiddenColumns hidden = ap.av.getAlignment().getHiddenColumns(); - if (hidden == null) + + HiddenColumns hidden = new HiddenColumns(); + BitSet inserts = new BitSet(), mask = new BitSet(); + + // set mask to preserve existing hidden columns outside selected group + if (ap.av.hasHiddenColumns()) { - hidden = new HiddenColumns(); + ap.av.getAlignment().getHiddenColumns().markHiddenRegions(mask); } + + boolean markedPopup = false; + // mark inserts in current selection if (ap.av.getSelectionGroup() != null) { - BitSet inserts = new BitSet(); - inserts.set(0, ap.av.getAlignment().getWidth()); - ; + // 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()) { - inserts.and(sq.getInsertionsAsBits()); - } - int firstSet = 0, lastSet = 0; - do - { - if (inserts.get(firstSet)) - { - lastSet = inserts.nextClearBit(firstSet) - 1; - hidden.hideColumns(firstSet, lastSet); - firstSet = lastSet + 1; - } - else + if (sq == sequence) { - firstSet = inserts.nextSetBit(firstSet); + markedPopup = true; } - } while (firstSet > -1); - + inserts.and(sq.getInsertionsAsBits()); + } } else - if (sequence != null) { - hidden.hideInsertionsFor(sequence); - ap.av.getAlignment().setHiddenColumns(hidden); + // 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, preserve hidden regions outside selection + inserts.or(mask); + + // and set hidden columns accordingly + hidden.hideMarkedBits(inserts); + + ap.av.getAlignment().setHiddenColumns(hidden); refresh(); }