NJTree tree;\r
JScrollPane scrollPane;\r
AlignViewport av;\r
-\r
+ public static final String PLACEHOLDER=" * ";\r
Font font;\r
int fontSize = 12;\r
\r
boolean fitToWindow = true;\r
boolean showDistances = false;\r
boolean showBootstrap = false;\r
+ boolean markPlaceholders = false;\r
\r
int offx = 20;\r
int offy = 20;\r
g.drawString(nodeLabel,xstart,ypos - 10);\r
}\r
\r
- // Colour selected leaves differently\r
- String name = node.getName();\r
+ String name = (markPlaceholders && node.isPlaceholder()) ? (PLACEHOLDER+node.getName()) : node.getName();\r
FontMetrics fm = g.getFontMetrics(font);\r
- int charWidth = fm.stringWidth(node.getName()) + 3;\r
+ int charWidth = fm.stringWidth(name) + 3;\r
int charHeight = fm.getHeight();\r
\r
Rectangle rect = new Rectangle(xend+20,ypos-charHeight,\r
\r
nameHash.put((SequenceI)node.element(),rect);\r
\r
+ // Colour selected leaves differently\r
SequenceGroup selected = av.getSelectionGroup();\r
if (selected!=null && selected.sequences.contains((SequenceI)node.element())) {\r
g.setColor(Color.gray);\r
g.fillRect(xend + 10, ypos - charHeight + 3,charWidth,charHeight);\r
g.setColor(Color.white);\r
}\r
- g.drawString(node.getName(),xend+10,ypos);\r
+ g.drawString(name,xend+10,ypos);\r
g.setColor(Color.black);\r
} else {\r
drawNode(g,(SequenceNode)node.left(), chunk,scale,width,offx,offy);\r
this.showBootstrap = state;\r
repaint();\r
}\r
+ public void setMarkPlaceholders(boolean state) {\r
+ this.markPlaceholders = state;\r
+ repaint();\r
+ }\r
\r
}\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
+ // Now have to calculate longest name based on the leaves\r
+ Vector leaves = tree.findLeaves(tree.getTopNode(),new Vector());\r
+\r
+ for (int i=0;i < leaves.size();i++)\r
+ if (longestName.length()<((Sequence) ((SequenceNode) leaves.elementAt(i)).element()).getName().length())\r
+ longestName = TreeCanvas.PLACEHOLDER+((Sequence) ((SequenceNode) leaves.elementAt(i)).element()).getName();\r
\r
tree.reCount(tree.getTopNode());\r
tree.findHeight(tree.getTopNode());\r
treeCanvas.setShowBootstrap(newtree.HasBootstrap());\r
treeCanvas.setShowDistances(newtree.HasDistances());\r
scrollPane.setViewportView(treeCanvas);\r
+ distanceMenu.setSelected(newtree.HasDistances());\r
+ bootstrapMenu.setSelected(newtree.HasBootstrap());\r
+ if (true) // JBPNote TODO: preference for always marking placeholders in new associated tree\r
+ placeholdersMenu.setSelected(treeCanvas.markPlaceholders);\r
\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