JAL-789 pairwise alignment via calculations dialog, allowing score model to be changed
[jalview.git] / src / jalview / gui / CalculationChooser.java
index af41e58..daab62b 100644 (file)
@@ -53,6 +53,7 @@ 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;
@@ -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;
@@ -166,6 +172,9 @@ public class CalculationChooser extends JPanel
     averageDistance = new JRadioButton(
             MessageManager.getString("label.tree_calc_av"));
     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);
@@ -191,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()
     {
@@ -208,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!
      */
@@ -319,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);
@@ -521,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
    * 
@@ -597,6 +628,7 @@ public class CalculationChooser extends JPanel
     new Thread(pcaPanel).start();
 
   }
+    
 
   /**
    *