X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPopupMenu.java;h=a8e2f7e1e2d0b598e88c5ff45532b7827048082f;hb=f41d78dbf890fbb7597f75019d05841312fa4f52;hp=3de7c3c81e77349f71843ab2c85678a6432024df;hpb=268dfe33ea14bbcdfb0671a1ec8acc5e9c423426;p=jalview.git diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index 3de7c3c..a8e2f7e 100644 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -57,6 +57,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Arrays; +import java.util.BitSet; import java.util.Collection; import java.util.Collections; import java.util.Hashtable; @@ -1444,24 +1445,59 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener protected void hideInsertions_actionPerformed(ActionEvent actionEvent) { - if (sequence != 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()) + { + ap.av.getAlignment().getHiddenColumns().markHiddenRegions(mask); + } + + boolean markedPopup = false; + // mark inserts in current selection + if (ap.av.getSelectionGroup() != null) { - /* ColumnSelection cs = ap.av.getColumnSelection(); - if (cs == null) - { - cs = new ColumnSelection(); - } - cs.hideInsertionsFor(sequence); - ap.av.setColumnSelection(cs);*/ + // 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); - HiddenColumns hidden = ap.av.getAlignment().getHiddenColumns(); - if (hidden == null) + // now clear columns without gaps + for (SequenceI sq : ap.av.getSelectionGroup().getSequences()) { - hidden = new HiddenColumns(); + if (sq == sequence) + { + markedPopup = true; + } + inserts.and(sq.getInsertionsAsBits()); } - hidden.hideInsertionsFor(sequence); - ap.av.getAlignment().setHiddenColumns(hidden); } + 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, preserve hidden regions outside selection + inserts.or(mask); + + // and set hidden columns accordingly + hidden.hideMarkedBits(inserts); + + ap.av.getAlignment().setHiddenColumns(hidden); refresh(); } @@ -1904,7 +1940,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener if (start <= end) { seqs.add(sg.getSequenceAt(i).getDatasetSequence()); - features.add(new SequenceFeature(null, null, null, start, end, null)); + features.add(new SequenceFeature(null, null, start, end, null)); } }