JAL-2629 select HMM selects sequence under cursor
[jalview.git] / src / jalview / gui / PopupMenu.java
index 8710031..e3becf6 100644 (file)
@@ -366,17 +366,15 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
         selectHMM.setText(MessageManager.getString("label.select_hmm"));
         selectHMM.addActionListener(new ActionListener()
         {
-
           @Override
           public void actionPerformed(ActionEvent e)
           {
-            selectHMM_actionPerformed(e);
+            selectHMM_actionPerformed(sequence);
           }
         });
         add(selectHMM);
       }
 
-
       if (alignPanel.av.getSelectionGroup() != null
               && alignPanel.av.getSelectionGroup().getSize() > 1)
       {
@@ -1370,11 +1368,13 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
     jMenu1.add(displayNonconserved);
   }
 
-
-  protected void selectHMM_actionPerformed(ActionEvent e)
+  protected void selectHMM_actionPerformed(SequenceI seq)
   {
-    SequenceI hmm = ap.av.getSequenceSelection()[0];
-    ap.alignFrame.setSelectedHMMSequence(hmm);
+    // TODO move this to Viewport
+    if (seq.isHMMConsensusSequence())
+    {
+      ap.alignFrame.setSelectedHMMSequence(seq);
+    }
   }
 
   /**
@@ -1587,15 +1587,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
 
   protected void hideInsertions_actionPerformed(ActionEvent actionEvent)
   {
-
-    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);
-    }
+    HiddenColumns hidden = ap.av.getAlignment().getHiddenColumns();
+    BitSet inserts = new BitSet();
 
     boolean markedPopup = false;
     // mark inserts in current selection
@@ -1603,10 +1596,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
     {
       // 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);
+              ap.av.getSelectionGroup().getEndRes() + 1); // TODO why +1?
 
       // now clear columns without gaps
       for (SequenceI sq : ap.av.getSelectionGroup().getSequences())
@@ -1617,29 +1607,18 @@ 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();
+      hidden.clearAndHideColumns(inserts, ap.av.getSelectionGroup().getStartRes(),
+              ap.av.getSelectionGroup().getEndRes());
     }
 
     // now mark for sequence under popup if we haven't already done it
-    if (!markedPopup && sequence != null)
+    else if (!markedPopup && sequence != null)
     {
-      inserts.and(sequence.getInsertionsAsBits());
-    }
-
-    // finally, preserve hidden regions outside selection
-    inserts.or(mask);
+      inserts.or(sequence.getInsertionsAsBits());
 
-    // and set hidden columns accordingly
-    hidden.hideMarkedBits(inserts);
-
-    ap.av.getAlignment().setHiddenColumns(hidden);
+      // and set hidden columns accordingly
+      hidden.hideColumns(inserts);
+    }
     refresh();
   }