Updated with latest from mchmmer branch
[jalview.git] / src / jalview / gui / CalculationChooser.java
index 8a95594..eaaf0a5 100644 (file)
@@ -23,10 +23,12 @@ package jalview.gui;
 import jalview.analysis.TreeBuilder;
 import jalview.analysis.scoremodels.ScoreModels;
 import jalview.analysis.scoremodels.SimilarityParams;
+import jalview.api.AlignViewportI;
 import jalview.api.analysis.ScoreModelI;
 import jalview.api.analysis.SimilarityParamsI;
 import jalview.datamodel.SequenceGroup;
 import jalview.util.MessageManager;
+import jalview.viewmodel.AlignmentViewport;
 
 import java.awt.BorderLayout;
 import java.awt.Color;
@@ -103,7 +105,12 @@ public class CalculationChooser extends JPanel
 
   final ComboBoxTooltipRenderer renderer = new ComboBoxTooltipRenderer();
 
-  List<String> tips = new ArrayList<String>();
+  List<String> tips = new ArrayList<>();
+
+  /*
+   * the most recently opened PCA results panel
+   */
+  private PCAPanel pcaPanel;
 
   /**
    * Constructor
@@ -164,14 +171,14 @@ public class CalculationChooser extends JPanel
     JPanel treePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
     treePanel.setOpaque(false);
 
-    treePanel.setBorder(BorderFactory.createTitledBorder(MessageManager
-            .getString("label.tree")));
+    JvSwingUtils.createTitledBorder(treePanel,
+            MessageManager.getString("label.tree"), true);
 
     // then copy the inset dimensions for the border-less PCA panel
     JPanel pcaBorderless = new JPanel(new FlowLayout(FlowLayout.LEFT));
     Insets b = treePanel.getBorder().getBorderInsets(treePanel);
-    pcaBorderless.setBorder(BorderFactory.createEmptyBorder(2, b.left, 2,
-            b.right));
+    pcaBorderless.setBorder(
+            BorderFactory.createEmptyBorder(2, b.left, 2, b.right));
     pcaBorderless.setOpaque(false);
 
     pcaBorderless.add(pca, FlowLayout.LEFT);
@@ -186,7 +193,7 @@ public class CalculationChooser extends JPanel
     calcTypes.add(pca);
     calcTypes.add(neighbourJoining);
     calcTypes.add(averageDistance);
-    
+
     ActionListener calcChanged = new ActionListener()
     {
       @Override
@@ -335,8 +342,8 @@ public class CalculationChooser extends JPanel
    */
   private boolean checkEnabled(JRadioButton calc, int size, int minsize)
   {
-    String ttip = MessageManager.formatMessage(
-            "label.you_need_at_least_n_sequences", minsize);
+    String ttip = MessageManager
+            .formatMessage("label.you_need_at_least_n_sequences", minsize);
 
     calc.setEnabled(size >= minsize);
     if (!calc.isEnabled())
@@ -370,7 +377,7 @@ public class CalculationChooser extends JPanel
    */
   protected JComboBox<String> buildModelOptionsList()
   {
-    final JComboBox<String> scoreModelsCombo = new JComboBox<String>();
+    final JComboBox<String> scoreModelsCombo = new JComboBox<>();
     scoreModelsCombo.setRenderer(renderer);
 
     /*
@@ -383,7 +390,8 @@ public class CalculationChooser extends JPanel
       @Override
       public void mouseEntered(MouseEvent e)
       {
-        scoreModelsCombo.setToolTipText(tips.get(scoreModelsCombo.getSelectedIndex()));
+        scoreModelsCombo.setToolTipText(
+                tips.get(scoreModelsCombo.getSelectedIndex()));
       }
 
       @Override
@@ -412,7 +420,7 @@ public class CalculationChooser extends JPanel
   {
     Object curSel = comboBox.getSelectedItem();
     toolTips.clear();
-    DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
+    DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
 
     /*
      * now we can actually add entries to the combobox,
@@ -486,23 +494,21 @@ public class CalculationChooser extends JPanel
      * gui validation shouldn't allow insufficient sequences here, but leave
      * this check in in case this method gets exposed programmatically in future
      */
-    AlignViewport viewport = af.getViewport();
+    AlignViewportI viewport = af.getViewport();
     SequenceGroup sg = viewport.getSelectionGroup();
     if (sg != null && sg.getSize() < MIN_TREE_SELECTION)
     {
-      JvOptionPane
-              .showMessageDialog(
-                      Desktop.desktop,
-                      MessageManager
-              .formatMessage("label.you_need_at_least_n_sequences",
+      JvOptionPane.showMessageDialog(Desktop.desktop,
+              MessageManager.formatMessage(
+                      "label.you_need_at_least_n_sequences",
                       MIN_TREE_SELECTION),
-                      MessageManager
-                              .getString("label.not_enough_sequences"),
-                      JvOptionPane.WARNING_MESSAGE);
+              MessageManager.getString("label.not_enough_sequences"),
+              JvOptionPane.WARNING_MESSAGE);
       return;
     }
 
-    String treeType = neighbourJoining.isSelected() ? TreeBuilder.NEIGHBOUR_JOINING
+    String treeType = neighbourJoining.isSelected()
+            ? TreeBuilder.NEIGHBOUR_JOINING
             : TreeBuilder.AVERAGE_DISTANCE;
     af.newTreePanel(treeType, modelName, params);
   }
@@ -515,25 +521,27 @@ public class CalculationChooser extends JPanel
    */
   protected void openPcaPanel(String modelName, SimilarityParamsI params)
   {
-    AlignViewport viewport = af.getViewport();
+    AlignViewportI viewport = af.getViewport();
 
     /*
      * gui validation shouldn't allow insufficient sequences here, but leave
      * this check in in case this method gets exposed programmatically in future
      */
     if (((viewport.getSelectionGroup() != null)
-            && (viewport.getSelectionGroup().getSize() < MIN_PCA_SELECTION) && (viewport
-            .getSelectionGroup().getSize() > 0))
+            && (viewport.getSelectionGroup().getSize() < MIN_PCA_SELECTION)
+            && (viewport.getSelectionGroup().getSize() > 0))
             || (viewport.getAlignment().getHeight() < MIN_PCA_SELECTION))
     {
-      JvOptionPane.showInternalMessageDialog(this, MessageManager
-              .formatMessage("label.you_need_at_least_n_sequences",
-                      MIN_PCA_SELECTION), MessageManager
-              .getString("label.sequence_selection_insufficient"),
+      JvOptionPane.showInternalMessageDialog(this,
+              MessageManager.formatMessage(
+                      "label.you_need_at_least_n_sequences",
+                      MIN_PCA_SELECTION),
+              MessageManager
+                      .getString("label.sequence_selection_insufficient"),
               JvOptionPane.WARNING_MESSAGE);
       return;
     }
-    new PCAPanel(af.alignPanel, modelName, params);
+    pcaPanel = new PCAPanel(af.alignPanel, modelName, params);
   }
 
   /**
@@ -575,7 +583,8 @@ public class CalculationChooser extends JPanel
      */
     boolean matchGap = doPCA ? false : treeMatchGaps;
 
-    return new SimilarityParams(includeGapGap, matchGap, includeGapResidue, matchOnShortestLength);
+    return new SimilarityParams(includeGapGap, matchGap, includeGapResidue,
+            matchOnShortestLength);
   }
 
   /**
@@ -590,4 +599,9 @@ public class CalculationChooser extends JPanel
     {
     }
   }
+
+  public PCAPanel getPcaPanel()
+  {
+    return pcaPanel;
+  }
 }