X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPopupMenu.java;h=756b77b55e1060f139bf2a253a6ac14bb11682f2;hb=0ae197277308506be79cee82d872e08cecd64021;hp=c7e3fd99b64730023f5ac4845cd581c02ba26311;hpb=948b782d6ecd8cfd15aedc2dba66e6c994108629;p=jalview.git diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index c7e3fd9..756b77b 100644 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -1445,14 +1445,28 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener 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) @@ -1462,6 +1476,14 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener 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) @@ -1469,8 +1491,12 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener 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(); } @@ -1918,11 +1944,17 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener } } - if (ap.getSeqPanel().seqCanvas.getFeatureRenderer().amendFeatures(seqs, - features, true, ap)) + /* + * an entirely gapped region will generate empty lists of sequence / features + */ + if (!seqs.isEmpty()) { - ap.alignFrame.setShowSeqFeatures(true); - ap.highlightSearchResults(null); + if (ap.getSeqPanel().seqCanvas.getFeatureRenderer().amendFeatures( + seqs, features, true, ap)) + { + ap.alignFrame.setShowSeqFeatures(true); + ap.highlightSearchResults(null); + } } }