Merge branch 'develop' into features/mchmmer
[jalview.git] / src / jalview / gui / PopupMenu.java
index 97d051b..a3a2422 100644 (file)
@@ -158,6 +158,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
 
   JMenuItem sequenceFeature = new JMenuItem();
 
+
   JMenuItem textColour = new JMenuItem();
 
   JMenu jMenu1 = new JMenu();
@@ -233,8 +234,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
      * currently selected sequence (if there is one):
      */
     final List<SequenceI> selectedSequence = (seq == null
-            ? Collections.<SequenceI> emptyList()
-            : Arrays.asList(seq));
+            ? Collections.<SequenceI> emptyList() : Arrays.asList(seq));
+
     buildAnnotationTypesMenus(seqShowAnnotationsMenu,
             seqHideAnnotationsMenu, selectedSequence);
     configureReferenceAnnotationsMenu(seqAddReferenceAnnotations,
@@ -461,7 +462,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
         buildGroupURLMenu(sg, groupLinks);
       }
       // Add a 'show all structures' for the current selection
-      Hashtable<String, PDBEntry> pdbe = new Hashtable<>(), reppdb = new Hashtable<>();
+      Hashtable<String, PDBEntry> pdbe = new Hashtable<>();
+      Hashtable<String, PDBEntry> reppdb = new Hashtable<>();
 
       SequenceI sqass = null;
       for (SequenceI sq : alignPanel.av.getSequenceSelection())
@@ -550,24 +552,27 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
       {
         desc = String.format("%s %d-%d", sf.getType(), start, end);
       }
+      String tooltip = desc;
       String description = sf.getDescription();
       if (description != null)
       {
         description = StringUtils.stripHtmlTags(description);
-        if (description.length() <= 6)
+        if (description.length() > 12)
         {
-          desc = desc + " " + description;
+          desc = desc + " " + description.substring(0, 12) + "..";
         }
         else
         {
-          desc = desc + " " + description.substring(0, 6) + "..";
+          desc = desc + " " + description;
         }
+        tooltip = tooltip + " " + description;
       }
       if (sf.getFeatureGroup() != null)
       {
-        desc = desc + " (" + sf.getFeatureGroup() + ")";
+        tooltip = tooltip + (" (" + sf.getFeatureGroup() + ")");
       }
       JMenuItem item = new JMenuItem(desc);
+      item.setToolTipText(tooltip);
       item.addActionListener(new ActionListener()
       {
         @Override
@@ -1558,15 +1563,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
@@ -1574,10 +1572,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())
@@ -1588,29 +1583,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();
   }