Modified output on stdout for similarity matrix.
[jalview.git] / src / jalview / gui / TreePanel.java
index 87c4d14..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
@@ -110,7 +153,7 @@ public class TreePanel extends GTreePanel
     int value = chooser.showSaveDialog(null);\r
     if (value == JalviewFileChooser.APPROVE_OPTION) {\r
       String choice =  chooser.getSelectedFile().getPath();\r
-      jalview.bin.Cache.setProperty("LAST_DIRECTORY",  choice);\r
+      jalview.bin.Cache.setProperty("LAST_DIRECTORY",  chooser.getSelectedFile().getParent());\r
       try{\r
         jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());\r
         String output = fout.print(false,true); // distances only\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
@@ -179,7 +226,10 @@ public class TreePanel extends GTreePanel
     try\r
     {\r
       jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(jalview.bin.Cache.getProperty(\r
-          "LAST_DIRECTORY"), new String[]{"eps"}, "Encapsulated Postscript");\r
+          "LAST_DIRECTORY"),\r
+              new String[]{"eps"},\r
+              new String[]{"Encapsulated Postscript"},\r
+              "Encapsulated Postscript");\r
       chooser.setFileView(new jalview.io.JalviewFileView());\r
       chooser.setDialogTitle("Create EPS file from tree");\r
       chooser.setToolTipText("Save");\r
@@ -188,7 +238,7 @@ public class TreePanel extends GTreePanel
       if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)\r
         return;\r
 \r
-      jalview.bin.Cache.setProperty("LAST_DIRECTORY",chooser.getSelectedFile().getPath());\r
+      jalview.bin.Cache.setProperty("LAST_DIRECTORY",chooser.getSelectedFile().getParent());\r
       FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());\r
       EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width, height);\r
 \r
@@ -209,8 +259,12 @@ public class TreePanel extends GTreePanel
   int width = treeCanvas.getWidth(), height = treeCanvas.getHeight();\r
     try\r
     {\r
-      jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(jalview.bin.Cache.getProperty(\r
-          "LAST_DIRECTORY"), new String[]{"png"}, "Portable network graphics");\r
+      jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(\r
+          jalview.bin.Cache.getProperty("LAST_DIRECTORY"),\r
+          new String[] {"png"},\r
+          new String[] {"Portable network graphics"},\r
+          "Portable network graphics");\r
+\r
       chooser.setFileView(new jalview.io.JalviewFileView());\r
       chooser.setDialogTitle("Create PNG image from tree");\r
       chooser.setToolTipText("Save");\r
@@ -219,7 +273,7 @@ public class TreePanel extends GTreePanel
       if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)\r
         return;\r
 \r
-      jalview.bin.Cache.setProperty("LAST_DIRECTORY",chooser.getSelectedFile().getPath());\r
+      jalview.bin.Cache.setProperty("LAST_DIRECTORY",chooser.getSelectedFile().getParent());\r
       FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());\r
 \r
       BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);\r