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
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
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
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
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
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
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