JAL-3058 refactored raising JColorChooser for JS compatibility
[jalview.git] / src / jalview / gui / PopupMenu.java
index 6da7d4f..8f082c1 100644 (file)
@@ -38,6 +38,7 @@ import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.gui.ColourMenuHelper.ColourChangeListener;
+import jalview.gui.JalviewColourChooser.ColourChooserListener;
 import jalview.io.FileFormatI;
 import jalview.io.FileFormats;
 import jalview.io.FormatAdapter;
@@ -45,6 +46,7 @@ import jalview.io.SequenceAnnotationReport;
 import jalview.schemes.Blosum62ColourScheme;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemes;
+import jalview.schemes.FeatureColour;
 import jalview.schemes.PIDColourScheme;
 import jalview.util.GroupUrlLink;
 import jalview.util.GroupUrlLink.UrlStringTooLongException;
@@ -70,6 +72,7 @@ import java.util.Vector;
 
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JColorChooser;
+import javax.swing.JDialog;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
@@ -550,24 +553,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 +1564,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 +1573,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 +1584,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);
-
-    // and set hidden columns accordingly
-    hidden.hideMarkedBits(inserts);
+      inserts.or(sequence.getInsertionsAsBits());
 
-    ap.av.getAlignment().setHiddenColumns(hidden);
+      // and set hidden columns accordingly
+      hidden.hideColumns(inserts);
+    }
     refresh();
   }
 
@@ -1635,10 +1620,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
               new Object[]
               { seq.getDisplayId(true) }) + "</h2></p><p>");
       new SequenceAnnotationReport(null).createSequenceAnnotationReport(
-              contents, seq, true, true,
-              (ap.getSeqPanel().seqCanvas.fr != null)
-                      ? ap.getSeqPanel().seqCanvas.fr.getMinMax()
-                      : null);
+              contents, seq, true, true, ap.getSeqPanel().seqCanvas.fr);
       contents.append("</p>");
     }
     cap.setText("<html>" + contents.toString() + "</html>");
@@ -1880,24 +1862,23 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
   }
 
   /**
-   * DOCUMENT ME!
-   * 
-   * @param e
-   *          DOCUMENT ME!
+   * Offers a colour chooser and sets the selected colour as the group outline
    */
   protected void outline_actionPerformed()
   {
-    SequenceGroup sg = getGroup();
-    Color col = JColorChooser.showDialog(this,
-            MessageManager.getString("label.select_outline_colour"),
-            Color.BLUE);
-
-    if (col != null)
+    String title = MessageManager
+            .getString("label.select_outline_colour");
+    ColourChooserListener listener = new ColourChooserListener()
     {
-      sg.setOutlineColour(col);
-    }
-
-    refresh();
+      @Override
+      public void colourSelected(Color c)
+      {
+        getGroup().setOutlineColour(c);
+        refresh();
+      };
+    };
+    JalviewColourChooser.showColourChooser(Desktop.getDesktop(),
+            title, Color.BLUE, listener);
   }
 
   /**