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
\r
\r
\r
-\r
public class TreePanel extends GTreePanel\r
{\r
SequenceI[] seq;\r
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
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
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
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