Merge branch 'kjvdh/features/PhylogenyViewer_tabbedsupport' into merge/2_11_2/kjvdh...
[jalview.git] / src / jalview / gui / TreePanel.java
index d735402..042147f 100755 (executable)
@@ -23,13 +23,7 @@ package jalview.gui;
 import java.util.Locale;
 
 import jalview.analysis.AlignmentSorter;
-import jalview.analysis.AverageDistanceTree;
-import jalview.analysis.NJTree;
-import jalview.analysis.TreeBuilder;
 import jalview.analysis.TreeModel;
-import jalview.analysis.scoremodels.ScoreModels;
-import jalview.api.analysis.ScoreModelI;
-import jalview.api.analysis.SimilarityParamsI;
 import jalview.bin.Cache;
 import jalview.bin.Console;
 import jalview.commands.CommandI;
@@ -67,8 +61,6 @@ import java.util.List;
 import javax.swing.ButtonGroup;
 import javax.swing.JMenuItem;
 import javax.swing.JRadioButtonMenuItem;
-import javax.swing.event.InternalFrameAdapter;
-import javax.swing.event.InternalFrameEvent;
 
 import org.jibble.epsgraphics.EpsGraphics2D;
 
@@ -80,15 +72,15 @@ import org.jibble.epsgraphics.EpsGraphics2D;
  */
 public class TreePanel extends GTreePanel
 {
-  String treeType;
+  String substitutionMatrix;
 
-  String scoreModelName; // if tree computed
+  String treeType;
 
   String treeTitle; // if tree loaded
 
   SimilarityParamsI similarityParams;
 
-  private TreeCanvas treeCanvas;
+  TreeCanvas treeCanvas;
 
   TreeModel tree;
 
@@ -98,28 +90,38 @@ public class TreePanel extends GTreePanel
    * Creates a new TreePanel object.
    * 
    * @param ap
-   * @param type
-   * @param modelName
-   * @param options
+   * @param tree
+   * @param treeType
+   * @param substitutionMatrix
    */
-  public TreePanel(AlignmentPanel ap, String type, String modelName,
-          SimilarityParamsI options)
+  public TreePanel(AlignmentPanel ap, TreeModel tree, String treeType,
+          String substitutionMatrix)
   {
     super();
-    this.similarityParams = options;
-    initTreePanel(ap, type, modelName, null, null);
+    this.treeType = treeType;
+    this.substitutionMatrix = substitutionMatrix;
+    this.tree = tree;
+    initTreePanel(ap, tree);
 
     // We know this tree has distances. JBPNote TODO: prolly should add this as
     // a userdefined default
     // showDistances(true);
   }
 
+  /**
+   * Creates a new TreePanel object.
+   * 
+   * @param alignPanel
+   * @param newtree
+   * @param theTitle
+   * @param inputData
+   */
   public TreePanel(AlignmentPanel alignPanel, NewickFile newtree,
           String theTitle, AlignmentView inputData)
   {
     super();
     this.treeTitle = theTitle;
-    initTreePanel(alignPanel, null, null, newtree, inputData);
+    initTreePanel(alignPanel, newtree, inputData);
   }
 
   public AlignmentI getAlignment()
@@ -133,62 +135,49 @@ public class TreePanel extends GTreePanel
     return getTreeCanvas().getViewport();
   }
 
-  void initTreePanel(AlignmentPanel ap, String type, String modelName,
-          NewickFile newTree, AlignmentView inputData)
+  /**
+   * Initialize a tree panel based on a calculated tree
+   * 
+   * @param ap
+   * @param tree
+   */
+  void initTreePanel(AlignmentPanel ap, TreeModel tree)
   {
+    buildTreeCanvas(ap);
 
-    av = ap.av;
-    this.treeType = type;
-    this.scoreModelName = modelName;
-
-    treeCanvas = new TreeCanvas(this, ap, scrollPane);
-    scrollPane.setViewportView(treeCanvas);
-
-    PaintRefresher.Register(this, ap.av.getSequenceSetId());
-
-    buildAssociatedViewMenu();
-
-    final PropertyChangeListener listener = addAlignmentListener();
-
-    /*
-     * remove listener when window is closed, so that this
-     * panel can be garbage collected
-     */
-    addInternalFrameListener(new InternalFrameAdapter()
-    {
-      @Override
-      public void internalFrameClosed(InternalFrameEvent evt)
-      {
-        if (av != null)
-        {
-          av.removePropertyChangeListener(listener);
-        }
-        releaseReferences();
-      }
-    });
-
-    TreeLoader tl = new TreeLoader(newTree, inputData);
+    TreeLoader tl = new TreeLoader(null, null);
     tl.start();
 
   }
 
   /**
-   * Ensure any potentially large object references are nulled
+   * Initialize a tree panel based on a loaded in tree file.
+   * 
+   * @param ap
+   * @param loadedTree
+   * @param inputData
    */
-  public void releaseReferences()
+  void initTreePanel(AlignmentPanel ap, 
+          NewickFile loadedTree, AlignmentView inputData)
   {
-    this.tree = null;
-    this.treeCanvas.tree = null;
-    this.treeCanvas.nodeHash = null;
-    this.treeCanvas.nameHash = null;
+    buildTreeCanvas(ap);
+
+    TreeLoader tl = new TreeLoader(loadedTree, inputData);
+    tl.start();
   }
 
-  /**
-   * @return
-   */
-  protected PropertyChangeListener addAlignmentListener()
-  {
-    final PropertyChangeListener listener = new PropertyChangeListener()
+public void buildTreeCanvas(AlignmentPanel ap) { 
+     av = ap.av;
+
+    treeCanvas = new TreeCanvas(this, ap, scrollPane);
+    scrollPane.setViewportView(treeCanvas);
+
+
+    PaintRefresher.Register(this, ap.av.getSequenceSetId());
+
+    buildAssociatedViewMenu();
+
+    av.addPropertyChangeListener(new java.beans.PropertyChangeListener()
     {
       @Override
       public void propertyChange(PropertyChangeEvent evt)
@@ -215,9 +204,11 @@ public class TreePanel extends GTreePanel
           repaint();
         }
       }
-    };
-    av.addPropertyChangeListener(listener);
-    return listener;
+    });
+
+
+  
+
   }
 
   @Override
@@ -289,57 +280,56 @@ public class TreePanel extends GTreePanel
 
   class TreeLoader extends Thread
   {
-    private NewickFile newtree;
+    private NewickFile newTree;
 
     private AlignmentView odata = null;
 
     public TreeLoader(NewickFile newickFile, AlignmentView inputData)
     {
-      this.newtree = newickFile;
+      this.newTree = newickFile;
       this.odata = inputData;
 
-      if (newickFile != null)
+      if (newTree != null)
       {
         // Must be outside run(), as Jalview2XML tries to
         // update distance/bootstrap visibility at the same time
-        showBootstrap(newickFile.HasBootstrap());
-        showDistances(newickFile.HasDistances());
+        showBootstrap(newTree.hasBootstrap());
+        showDistances(newTree.hasDistances());
+
       }
+
     }
 
     @Override
     public void run()
     {
 
-      if (newtree != null)
+      if (newTree != null)
       {
         tree = new TreeModel(av.getAlignment().getSequencesArray(), odata,
-                newtree);
+                newTree);
         if (tree.getOriginalData() == null)
         {
           originalSeqData.setVisible(false);
         }
       }
-      else
-      {
-        ScoreModelI sm = ScoreModels.getInstance().getScoreModel(
-                scoreModelName, treeCanvas.getAssociatedPanel());
-        TreeBuilder njtree = treeType.equals(TreeBuilder.NEIGHBOUR_JOINING)
-                ? new NJTree(av, sm, similarityParams)
-                : new AverageDistanceTree(av, sm, similarityParams);
-        tree = new TreeModel(njtree);
-        showDistances(true);
-      }
+      showTree(tree);
 
+    }
+      
+    public void showTree(TreeModel tree)
+    {
       tree.reCount(tree.getTopNode());
       tree.findHeight(tree.getTopNode());
       treeCanvas.setTree(tree);
       treeCanvas.repaint();
+
       av.setCurrentTree(tree);
       if (av.getSortByTree())
       {
         sortByTree_actionPerformed();
       }
+
     }
   }
 
@@ -535,7 +525,7 @@ public class TreePanel extends GTreePanel
    * @param e
    */
   @Override
-  public void sortByTree_actionPerformed()
+  public void sortByTree_actionPerformed()// modify for Aptx
   {
 
     if (treeCanvas.applyToAllViews)
@@ -778,12 +768,19 @@ public class TreePanel extends GTreePanel
    * 
    * @return
    */
-  public String getPanelTitle()
+  public String getPanelTitle() // to be moved/fixed
   {
     if (treeTitle != null)
     {
       return treeTitle;
     }
+    else
+    {
+      /*
+       * i18n description of Neighbour Joining or Average Distance method
+       */
+      String treecalcnm = MessageManager
+              .getString("label.tree_calc_" + treeType.toLowerCase());
 
     /*
      * i18n description of Neighbour Joining or Average Distance method
@@ -801,7 +798,8 @@ public class TreePanel extends GTreePanel
      */
     final String ttl = MessageManager.formatMessage("label.calc_title",
             treecalcnm, smn);
-    return ttl;
+      return ttl;
+    }
   }
 
   /**