JAL-789 pairwise alignment via calculations dialog, allowing score model to be changed
[jalview.git] / src / jalview / gui / CalculationChooser.java
index 336a312..daab62b 100644 (file)
  */
 package jalview.gui;
 
-import jalview.analysis.TreeBuilder;
-import jalview.analysis.scoremodels.ScoreModels;
-import jalview.analysis.scoremodels.SimilarityParams;
-import jalview.api.analysis.ScoreModelI;
-import jalview.api.analysis.SimilarityParamsI;
-import jalview.bin.Cache;
-import jalview.datamodel.SequenceGroup;
-import jalview.util.MessageManager;
-
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Component;
@@ -61,6 +52,16 @@ import javax.swing.JRadioButton;
 import javax.swing.event.InternalFrameAdapter;
 import javax.swing.event.InternalFrameEvent;
 
+import jalview.analysis.TreeBuilder;
+import jalview.analysis.scoremodels.ScoreMatrix;
+import jalview.analysis.scoremodels.ScoreModels;
+import jalview.analysis.scoremodels.SimilarityParams;
+import jalview.api.analysis.ScoreModelI;
+import jalview.api.analysis.SimilarityParamsI;
+import jalview.bin.Cache;
+import jalview.datamodel.SequenceGroup;
+import jalview.util.MessageManager;
+
 /**
  * A dialog where a user can choose and action Tree or PCA calculation options
  */
@@ -76,12 +77,17 @@ public class CalculationChooser extends JPanel
 
   private static final Font VERDANA_11PT = new Font("Verdana", 0, 11);
 
+
+  private static final int MIN_PAIRWISE_SELECTION = 2;
+
   private static final int MIN_TREE_SELECTION = 3;
 
   private static final int MIN_PCA_SELECTION = 4;
 
   AlignFrame af;
 
+  JRadioButton pairwise;
+
   JRadioButton pca;
 
   JRadioButton neighbourJoining;
@@ -130,6 +136,7 @@ public class CalculationChooser extends JPanel
   {
     setLayout(new BorderLayout());
     frame = new JInternalFrame();
+    frame.setFrameIcon(null);
     frame.setContentPane(this);
     this.setBackground(Color.white);
     frame.addFocusListener(new FocusListener()
@@ -156,12 +163,18 @@ public class CalculationChooser extends JPanel
     pca = new JRadioButton(
             MessageManager.getString("label.principal_component_analysis"));
     pca.setOpaque(false);
+
     neighbourJoining = new JRadioButton(
             MessageManager.getString("label.tree_calc_nj"));
     neighbourJoining.setSelected(true);
+    neighbourJoining.setOpaque(false);
+
     averageDistance = new JRadioButton(
             MessageManager.getString("label.tree_calc_av"));
-    neighbourJoining.setOpaque(false);
+    averageDistance.setOpaque(false);
+    
+    pairwise = new JRadioButton(MessageManager.getString("label.pairwise_alignment"));
+    pairwise.setOpaque(false);
 
     JPanel calcChoicePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
     calcChoicePanel.setOpaque(false);
@@ -187,11 +200,13 @@ public class CalculationChooser extends JPanel
     treePanel.add(averageDistance);
 
     calcChoicePanel.add(treePanel);
+    calcChoicePanel.add(pairwise,FlowLayout.CENTER);
 
     ButtonGroup calcTypes = new ButtonGroup();
     calcTypes.add(pca);
     calcTypes.add(neighbourJoining);
     calcTypes.add(averageDistance);
+    calcTypes.add(pairwise);
 
     ActionListener calcChanged = new ActionListener()
     {
@@ -204,7 +219,7 @@ public class CalculationChooser extends JPanel
     pca.addActionListener(calcChanged);
     neighbourJoining.addActionListener(calcChanged);
     averageDistance.addActionListener(calcChanged);
-
+    pairwise.addActionListener(calcChanged);
     /*
      * score models drop-down - with added tooltips!
      */
@@ -291,6 +306,7 @@ public class CalculationChooser extends JPanel
       };
     });
 
+    validateCalcTypes();
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
   }
 
@@ -314,8 +330,10 @@ public class CalculationChooser extends JPanel
             MIN_TREE_SELECTION);
     boolean checkAverageDistance = checkEnabled(averageDistance, size,
             MIN_TREE_SELECTION);
+    boolean checkPairwise = checkEnabled(pairwise, size,
+            MIN_PAIRWISE_SELECTION);
 
-    if (checkPca || checkNeighbourJoining || checkAverageDistance)
+    if (checkPca || checkNeighbourJoining || checkAverageDistance || checkPairwise)
     {
       calculate.setToolTipText(null);
       calculate.setEnabled(true);
@@ -516,15 +534,33 @@ public class CalculationChooser extends JPanel
     if (doPCA)
     {
       openPcaPanel(modelName, params);
-    }
-    else
+    } else {
+    if (pairwise.isSelected())
+    {
+      openPairwisePanel(modelName,params);
+    } else 
     {
       openTreePanel(modelName, params);
-    }
+    }}
 
     // closeFrame();
   }
 
+  private void openPairwisePanel(String modelName, SimilarityParamsI params)
+  {
+    ScoreModelI sm = ScoreModels.getInstance().getScoreModel(modelName, af.alignPanel);
+    if (sm==null || !(sm instanceof ScoreMatrix))
+    {
+      return;
+    }
+    JInternalFrame frame = new JInternalFrame();
+    frame.setFrameIcon(null);
+    frame.setContentPane(new PairwiseAlignPanel(af.getViewport(),(ScoreMatrix)sm));
+    Desktop.addInternalFrame(frame,
+            MessageManager.getString("action.pairwise_alignment"), 600,
+            500);    
+  }
+
   /**
    * Open a new Tree panel on the desktop
    * 
@@ -592,6 +628,7 @@ public class CalculationChooser extends JPanel
     new Thread(pcaPanel).start();
 
   }
+    
 
   /**
    *