Merge branch 'releases/Release_2_11_3_Branch'
[jalview.git] / src / jalview / gui / AnnotationColumnChooser.java
index 82ec0e7..f1f78fa 100644 (file)
 
 package jalview.gui;
 
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.HiddenColumns;
-import jalview.io.cache.JvCacheableInputBox;
-import jalview.schemes.AnnotationColourGradient;
-import jalview.util.MessageManager;
-import jalview.viewmodel.annotationfilter.AnnotationFilterParameter;
-
 import java.awt.BorderLayout;
 import java.awt.CardLayout;
 import java.awt.Color;
@@ -49,6 +42,14 @@ import javax.swing.JPanel;
 import javax.swing.JRadioButton;
 import javax.swing.border.TitledBorder;
 
+import jalview.bin.Console;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.HiddenColumns;
+import jalview.io.cache.JvCacheableInputBox;
+import jalview.schemes.AnnotationColourGradient;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+import jalview.viewmodel.annotationfilter.AnnotationFilterParameter;
 import net.miginfocom.swing.MigLayout;
 
 @SuppressWarnings("serial")
@@ -89,19 +90,27 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
 
   private HiddenColumns oldHiddenColumns;
 
-  protected int MIN_WIDTH = 420;
+  protected static int MIN_WIDTH = (Platform.isJS() ? 370 : 420);
 
-  protected int MIN_HEIGHT = 430;
+  protected static int MIN_HEIGHT = (Platform.isJS() ? 370 : 430);
 
   public AnnotationColumnChooser(AlignViewport av, final AlignmentPanel ap)
   {
+    this(av, ap, null);
+  }
+
+  public AnnotationColumnChooser(AlignViewport av, final AlignmentPanel ap,
+          AlignmentAnnotation selectedAnnotation)
+  {
     super(av, ap);
     frame = new JInternalFrame();
+    frame.setFrameIcon(null);
     frame.setContentPane(this);
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
     Desktop.addInternalFrame(frame,
-            MessageManager.getString("label.select_by_annotation"), 520,
-            215);
+            MessageManager.getString("label.select_by_annotation"), 0, 0);
+    // BH note: MIGLayout ignores this completely,
+    // possibly creating a frame smaller than specified:
     frame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
 
     addSliderChangeListener();
@@ -132,6 +141,18 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
       percentThreshold
               .setSelected(lastChooser.percentThreshold.isSelected());
     }
+    if (selectedAnnotation != null)
+    {
+      try
+      {
+        setCurrentAnnotation(selectedAnnotation);
+        annotations.setSelectedItem(
+                getAnnotationMenuLabel(selectedAnnotation));
+      } catch (Exception x)
+      {
+        Console.error("Couldn't select annotation in column chooser", x);
+      }
+    }
 
     try
     {
@@ -205,7 +226,6 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
             AnnotationColumnChooser.NO_GRAPH_VIEW);
     switchableViewsPanel.add(graphFilterView,
             AnnotationColumnChooser.GRAPH_VIEW);
-
     this.setLayout(new BorderLayout());
     this.add(annotationComboBoxPanel, java.awt.BorderLayout.PAGE_START);
     this.add(switchableViewsPanel, java.awt.BorderLayout.CENTER);
@@ -299,15 +319,14 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
       if (currentAnnotation.threshold == null)
       {
         currentAnnotation.setThreshold(new jalview.datamodel.GraphLine(
-                (currentAnnotation.graphMax
-                        - currentAnnotation.graphMin) / 2f,
+                (currentAnnotation.graphMax - currentAnnotation.graphMin)
+                        / 2f,
                 "Threshold", Color.black));
       }
 
       adjusting = true;
 
-      setSliderModel(currentAnnotation.graphMin,
-              currentAnnotation.graphMax,
+      setSliderModel(currentAnnotation.graphMin, currentAnnotation.graphMax,
               currentAnnotation.threshold.value);
 
       setThresholdValueText();
@@ -321,8 +340,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
               AnnotationFilterParameter.ThresholdType.NO_THRESHOLD);
       if (currentAnnotation.isQuantitative())
       {
-        filterParams
-                .setThresholdValue(currentAnnotation.threshold.value);
+        filterParams.setThresholdValue(currentAnnotation.threshold.value);
 
         if (selectedThresholdItem == AnnotationColourGradient.ABOVE_THRESHOLD)
         {
@@ -377,8 +395,8 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
     // filterAnnotations, because showing hidden columns has the side effect of
     // adding them to the selection
     av.showAllHiddenColumns();
-    av.getColumnSelection().filterAnnotations(
-            currentAnnotation.annotations, filterParams);
+    av.getColumnSelection().filterAnnotations(currentAnnotation,
+            filterParams);
 
     boolean hideCols = getActionOption() == ACTION_OPTION_HIDE;
     if (hideCols)
@@ -718,7 +736,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
     private static final String FILTER_BY_ANN_CACHE_KEY = "CACHE.SELECT_FILTER_BY_ANNOT";
 
     public JvCacheableInputBox<String> searchBox = new JvCacheableInputBox<>(
-            FILTER_BY_ANN_CACHE_KEY);
+            FILTER_BY_ANN_CACHE_KEY, 23);
 
     public SearchPanel(AnnotationColumnChooser aColChooser)
     {
@@ -728,24 +746,21 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
       this.setBorder(new TitledBorder(
               MessageManager.getString("label.search_filter")));
 
-      searchBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXX");
-      searchBox.setToolTipText(
+      searchBox.getComponent().setToolTipText(
               MessageManager.getString("info.enter_search_text_here"));
-      searchBox.getEditor().getEditorComponent()
-              .addKeyListener(new java.awt.event.KeyAdapter()
-              {
-                @Override
-                public void keyPressed(KeyEvent e)
-                {
-                  if (e.getKeyCode() == KeyEvent.VK_ENTER)
-                  {
-                    e.consume();
-                    searchStringAction();
-                  }
-                }
-              });
-      searchBox.getEditor().getEditorComponent()
-              .addFocusListener(new FocusAdapter()
+      searchBox.addKeyListener(new java.awt.event.KeyAdapter()
+      {
+        @Override
+        public void keyPressed(KeyEvent e)
+        {
+          if (e.getKeyCode() == KeyEvent.VK_ENTER)
+          {
+            e.consume();
+            searchStringAction();
+          }
+        }
+      });
+      searchBox.addFocusListener(new FocusAdapter()
       {
         @Override
         public void focusLost(FocusEvent e)
@@ -775,7 +790,7 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
       });
 
       syncState();
-      this.add(searchBox);
+      this.add(searchBox.getComponent());
       this.add(displayName);
       this.add(description);
     }
@@ -854,4 +869,11 @@ public class AnnotationColumnChooser extends AnnotationRowFilter
     gSearchPanel.searchBox.updateCache();
     ngSearchPanel.searchBox.updateCache();
   }
+
+  public static void displayFor(AlignViewport av, AlignmentPanel ap,
+          AlignmentAnnotation alignmentAnnotation)
+  {
+    AnnotationColumnChooser colchooser = new AnnotationColumnChooser(av, ap,
+            alignmentAnnotation);
+  }
 }