images moved
[jalview.git] / src / jalview / gui / TreePanel.java
index c458638..78bef80 100755 (executable)
@@ -7,9 +7,7 @@ import jalview.io.*;
 import java.awt.event.*;\r
 import java.util.*;\r
 import java.io.*;\r
-import jalview.util.*;\r
 import javax.swing.*;\r
-import java.awt.print.*;\r
 import java.awt.*;\r
 import java.awt.image.*;\r
 import org.jibble.epsgraphics.*;\r
@@ -17,7 +15,6 @@ import javax.imageio.*;
 \r
 \r
 \r
-\r
 public class TreePanel extends GTreePanel\r
 {\r
   SequenceI[] seq;\r
@@ -56,12 +53,28 @@ public class TreePanel extends GTreePanel
     tree = new NJTree(seq, type, pwtype, start, end);\r
 \r
     treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);\r
-\r
+    treeCanvas.setShowDistances(true); // We know this tree has distances. JBPNote TODO: prolly should add this as a userdefined default\r
+    setViewStateFromTreeCanvas(treeCanvas);\r
     tree.reCount(tree.getTopNode());\r
     tree.findHeight(tree.getTopNode());\r
     scrollPane.setViewportView(treeCanvas);\r
 \r
   }\r
+  private void setViewStateFromTreeCanvas(TreeCanvas tree) {\r
+    // update view menu state from treeCanvas render state\r
+    distanceMenu.setSelected(tree.showDistances);\r
+    bootstrapMenu.setSelected(tree.showBootstrap);\r
+    placeholdersMenu.setSelected(tree.markPlaceholders);\r
+  }\r
+\r
+  private void setTreeCanvasFromViewState(TreeCanvas tree) {\r
+      // update view menu state from treeCanvas render state\r
+      tree.showDistances = distanceMenu.isSelected();\r
+      tree.showBootstrap = bootstrapMenu.isSelected();\r
+      tree.markPlaceholders = placeholdersMenu.isSelected();\r
+    }\r
+\r
+\r
   public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree,\r
                    String type, String pwtype)\r
     {\r
@@ -78,12 +91,19 @@ public class TreePanel extends GTreePanel
       for (int i=0;i < seqVector.size();i++)\r
       {\r
         seq[i] = (Sequence) seqVector.elementAt(i);\r
-        if(seq[i].getName().length()>longestName.length())\r
-          longestName = seq[i].getName();\r
       }\r
       // This constructor matches sequence names to treenodes and sets up the tree layouts.\r
       tree = new NJTree(seq, newtree);\r
-\r
+      // Now have to calculate longest name based on the leaves\r
+      Vector leaves = tree.findLeaves(tree.getTopNode(),new Vector());\r
+      boolean has_placeholders = false;\r
+      for (int i=0;i < leaves.size();i++) {\r
+        SequenceNode lf = (SequenceNode) leaves.elementAt(i);\r
+        if (lf.isPlaceholder())\r
+          has_placeholders = true;\r
+        if (longestName.length()<((Sequence) lf.element()).getName().length())\r
+          longestName = TreeCanvas.PLACEHOLDER+((Sequence) lf.element()).getName();\r
+      }\r
       tree.reCount(tree.getTopNode());\r
       tree.findHeight(tree.getTopNode());\r
 \r
@@ -91,14 +111,37 @@ public class TreePanel extends GTreePanel
       treeCanvas.setShowBootstrap(newtree.HasBootstrap());\r
       treeCanvas.setShowDistances(newtree.HasDistances());\r
       scrollPane.setViewportView(treeCanvas);\r
-\r
+      treeCanvas.setMarkPlaceholders(has_placeholders);\r
+      setViewStateFromTreeCanvas(treeCanvas);\r
+      // JBPNote TODO: preference for always marking placeholders in new associated tree\r
     }\r
 \r
-    public String getText(String format)\r
+\r
+    public void textbox_actionPerformed(ActionEvent e)\r
     {\r
-      return null;\r
+      CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
+      JInternalFrame frame = new JInternalFrame();\r
+      frame.setContentPane(cap);\r
+\r
+      StringBuffer buffer = new StringBuffer();\r
+\r
+      if(type.equals("AV"))\r
+        buffer.append("Average distance tree using ");\r
+      else\r
+        buffer.append("Neighbour joining tree using ");\r
+\r
+      if(pwtype.equals("BL"))\r
+       buffer.append("BLOSUM62");\r
+      else\r
+        buffer.append("PID");\r
+\r
+      Desktop.addInternalFrame(frame,buffer.toString(), 500, 100);\r
+      jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());\r
+      cap.setText(  fout.print(false,true) );\r
+\r
     }\r
 \r
+\r
     public void saveAsNewick_actionPerformed(ActionEvent e)\r
     {\r
 \r
@@ -172,6 +215,10 @@ public class TreePanel extends GTreePanel
     treeCanvas.setShowBootstrap(bootstrapMenu.isSelected());\r
   }\r
 \r
+  protected void placeholdersMenu_actionPerformed(ActionEvent e)\r
+    {\r
+      treeCanvas.setMarkPlaceholders(placeholdersMenu.isSelected());\r
+  }\r
 \r
   protected void epsTree_actionPerformed(ActionEvent e)\r
   {\r