JAL-1767 refactorings to enable faithful restore of PCA from project
[jalview.git] / src / jalview / gui / PCAPanel.java
index f5e33cd..2ecdb82 100644 (file)
@@ -23,12 +23,14 @@ package jalview.gui;
 import jalview.analysis.scoremodels.ScoreModels;
 import jalview.api.analysis.ScoreModelI;
 import jalview.api.analysis.SimilarityParamsI;
+import jalview.bin.Cache;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentView;
 import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.SequenceI;
 import jalview.jbgui.GPCAPanel;
+import jalview.math.RotatableMatrix.Axis;
 import jalview.util.ImageMaker;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
@@ -53,11 +55,15 @@ import javax.swing.event.InternalFrameAdapter;
 import javax.swing.event.InternalFrameEvent;
 
 /**
- * The panel holding the Principal Component Analysis 3-d visualisation
+ * The panel holding the Principal Component Analysis 3-D visualisation
  */
 public class PCAPanel extends GPCAPanel
         implements Runnable, IProgressIndicator
 {
+  private static final int MIN_WIDTH = 470;
+
+  private static final int MIN_HEIGHT = 250;
+
   RotatableCanvas rc;
 
   AlignmentPanel ap;
@@ -68,10 +74,6 @@ public class PCAPanel extends GPCAPanel
 
   int top = 0;
 
-  private static final int MIN_WIDTH = 470;
-
-  private static final int MIN_HEIGHT = 250;
-
   private IProgressIndicator progressBar;
 
   private boolean working;
@@ -125,11 +127,10 @@ public class PCAPanel extends GPCAPanel
     rc = new RotatableCanvas(alignPanel);
     this.getContentPane().add(rc, BorderLayout.CENTER);
 
-    /*
-     * perform calculation in a new Thread
-     */
-    Thread worker = new Thread(this);
-    worker.start();
+    addKeyListener(rc);
+    validate();
+
+    this.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
   }
 
   /**
@@ -174,7 +175,7 @@ public class PCAPanel extends GPCAPanel
     try
     {
       pcaModel.calculate();
-      // ////////////////
+
       xCombobox.setSelectedIndex(0);
       yCombobox.setSelectedIndex(1);
       zCombobox.setSelectedIndex(2);
@@ -196,12 +197,10 @@ public class PCAPanel extends GPCAPanel
     repaint();
     if (getParent() == null)
     {
-      addKeyListener(rc);
       Desktop.addInternalFrame(this,
               MessageManager.formatMessage("label.calc_title", "PCA",
                       pcaModel.getScoreModelName()),
               475, 450);
-      this.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
     }
     working = false;
   }
@@ -223,7 +222,30 @@ public class PCAPanel extends GPCAPanel
     int dim3 = top - zCombobox.getSelectedIndex();
     pcaModel.updateRcView(dim1, dim2, dim3);
     rc.resetView();
-    rc.paint(rc.getGraphics());
+  }
+
+  /**
+   * Sets the selected checkbox item index for PCA dimension (1, 2, 3...) for
+   * the given axis (X/Y/Z)
+   * 
+   * @param index
+   * @param axis
+   */
+  public void setSelectedDimensionIndex(int index, Axis axis)
+  {
+    switch (axis)
+    {
+    case X:
+      xCombobox.setSelectedIndex(index);
+      break;
+    case Y:
+      yCombobox.setSelectedIndex(index);
+      break;
+    case Z:
+      zCombobox.setSelectedIndex(index);
+      break;
+    default:
+    }
   }
 
   @Override
@@ -262,7 +284,7 @@ public class PCAPanel extends GPCAPanel
     // make this an abstract function of all jalview analysis windows
     if (pcaModel.getSeqtrings() == null)
     {
-      jalview.bin.Cache.log.info(
+      Cache.log.info(
               "Unexpected call to originalSeqData_actionPerformed - should have hidden this menu action.");
       return;
     }
@@ -679,4 +701,29 @@ public class PCAPanel extends GPCAPanel
   {
     return working;
   }
+
+  /**
+   * Answers the selected checkbox item index for PCA dimension for the X, Y or
+   * Z axis of the display
+   * 
+   * @param axis
+   * @return
+   */
+  public int getSelectedDimensionIndex(Axis axis)
+  {
+    switch (axis)
+    {
+    case X:
+      return xCombobox.getSelectedIndex();
+    case Y:
+      return yCombobox.getSelectedIndex();
+    default:
+      return zCombobox.getSelectedIndex();
+    }
+  }
+
+  public void setShowLabels(boolean show)
+  {
+    showLabels.setSelected(show);
+  }
 }