NJTree tree;\r
ScrollPane 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
-package jalview.appletgui;\r
-\r
-import jalview.datamodel.*;\r
-import jalview.analysis.*;\r
-import jalview.jbappletgui.GTreePanel;\r
-import java.awt.event.*;\r
-import java.util.*;\r
-import jalview.io.NewickFile;\r
-\r
-\r
-public class TreePanel extends GTreePanel\r
-{\r
- SequenceI[] seq;\r
- String type;\r
- String pwtype;\r
- AlignViewport av;\r
- int start;\r
- int end;\r
- TreeCanvas treeCanvas;\r
- NJTree tree;\r
-\r
- public NJTree getTree()\r
- {\r
- return tree;\r
- }\r
-\r
- public TreePanel(AlignViewport av, Vector seqVector, String type, String pwtype, int s, int e)\r
- {\r
- super();\r
-\r
- this.type = type;\r
- this.pwtype = pwtype;\r
-\r
- start = s;\r
- end = e;\r
-\r
- String longestName = "";\r
- seq = new Sequence [seqVector.size()];\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
-\r
- tree = new NJTree(seq, type, pwtype, start, end);\r
-\r
- treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);\r
-\r
- tree.reCount(tree.getTopNode());\r
- tree.findHeight(tree.getTopNode());\r
- scrollPane.add(treeCanvas);\r
-\r
- }\r
-\r
-public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree,\r
- String type, String pwtype)\r
-{\r
- super();\r
- // These are probably only arbitrary strings reflecting source of tree\r
- this.type = type;\r
- this.pwtype = pwtype;\r
-\r
- start = 0;\r
- end = seqVector.size();\r
-\r
- String longestName = "";\r
- seq = new Sequence [seqVector.size()];\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
- tree.reCount(tree.getTopNode());\r
- tree.findHeight(tree.getTopNode());\r
-\r
- treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);\r
- treeCanvas.setShowBootstrap(newtree.HasBootstrap());\r
- bootstrapMenu.setState(newtree.HasBootstrap());\r
- treeCanvas.setShowDistances(newtree.HasDistances());\r
- distanceMenu.setState(newtree.HasDistances());\r
- scrollPane.add(treeCanvas);\r
-\r
-}\r
-\r
-\r
-\r
-public String getText(String format) {\r
- return null;\r
-}\r
-\r
- protected void fitToWindow_actionPerformed(ActionEvent e)\r
- {\r
- treeCanvas.fitToWindow = fitToWindow.getState();\r
- repaint();\r
- }\r
-\r
- public void newickOutput_actionPerformed(ActionEvent actionEvent)\r
- {\r
- jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());\r
- String output = fout.print(false, true);\r
- CutAndPasteTransfer cap = new CutAndPasteTransfer(false);\r
- cap.setText(output);\r
- java.awt.Frame frame = new java.awt.Frame();\r
- frame.add(cap);\r
- jalview.bin.JalviewLite.addFrame(frame, type+" "+pwtype, 500,500);\r
- }\r
-\r
-\r
-\r
- protected void fontSize_actionPerformed(ActionEvent e)\r
- {\r
- /* if( treeCanvas==null )\r
- return;\r
-\r
- String size = fontSize.getLabel().substring( fontSize.getLabel().indexOf("-")+1);\r
-\r
- Object selection = JOptionPane.showInternalInputDialog(Desktop.desktop,\r
- "Select font size",\r
- "Font size",\r
- JOptionPane.QUESTION_MESSAGE,\r
- null, new String[]{"1","2","4","6","8","10","12","14","16","18","20"}\r
- ,"Font Size - "+size);\r
- if(selection!=null)\r
- {\r
- fontSize.setText("Font Size - " + selection);\r
-\r
- int i = Integer.parseInt(selection.toString());\r
- treeCanvas.setFontSize(i);\r
- }\r
- scrollPane.setViewportView(treeCanvas);\r
-*/\r
- }\r
-\r
- protected void distanceMenu_actionPerformed(ActionEvent e)\r
- {\r
- treeCanvas.setShowDistances(distanceMenu.getState());\r
- }\r
-\r
- protected void bootstrapMenu_actionPerformed(ActionEvent e)\r
- {\r
- treeCanvas.setShowBootstrap(bootstrapMenu.getState());\r
- }\r
-\r
-}\r
+package jalview.appletgui;
+
+import jalview.datamodel.*;
+import jalview.io.NewickFile;
+import jalview.analysis.*;
+import jalview.jbappletgui.GTreePanel;
+import java.awt.event.*;
+import java.util.*;
+import jalview.io.NewickFile;
+
+
+public class TreePanel extends GTreePanel
+{
+ SequenceI[] seq;
+ String type;
+ String pwtype;
+ AlignViewport av;
+ int start;
+ int end;
+ TreeCanvas treeCanvas;
+ NJTree tree;
+
+ public NJTree getTree()
+ {
+ return tree;
+ }
+
+ public TreePanel(AlignViewport av, Vector seqVector, String type, String pwtype, int s, int e)
+ {
+ super();
+
+ this.type = type;
+ this.pwtype = pwtype;
+
+ start = s;
+ end = e;
+
+ String longestName = "";
+ seq = new Sequence [seqVector.size()];
+ for (int i=0;i < seqVector.size();i++)
+ {
+ seq[i] = (Sequence) seqVector.elementAt(i);
+ if(seq[i].getName().length()>longestName.length())
+ longestName = seq[i].getName();
+ }
+
+ tree = new NJTree(seq, type, pwtype, start, end);
+
+ treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);
+
+ tree.reCount(tree.getTopNode());
+ tree.findHeight(tree.getTopNode());
+ scrollPane.add(treeCanvas);
+
+ }
+ public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree,
+ String type, String pwtype)
+ {
+ super();
+ // These are probably only arbitrary strings reflecting source of tree
+ this.type = type;
+ this.pwtype = pwtype;
+
+ start = 0;
+ end = seqVector.size();
+
+ String longestName = "";
+ seq = new Sequence [seqVector.size()];
+ for (int i=0;i < seqVector.size();i++)
+ {
+ seq[i] = (Sequence) seqVector.elementAt(i);
+ }
+ // This constructor matches sequence names to treenodes and sets up the tree layouts.
+ tree = new NJTree(seq, newtree);
+ // Now have to calculate longest name based on the leaves
+ Vector leaves = tree.findLeaves(tree.getTopNode(),new Vector());
+
+ for (int i=0;i < leaves.size();i++)
+ if (longestName.length()<((Sequence) ((SequenceNode) leaves.elementAt(i)).element()).getName().length())
+ longestName = TreeCanvas.PLACEHOLDER+((Sequence) ((SequenceNode) leaves.elementAt(i)).element()).getName();
+
+ tree.reCount(tree.getTopNode());
+ tree.findHeight(tree.getTopNode());
+
+ treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);
+ treeCanvas.setShowBootstrap(newtree.HasBootstrap());
+ treeCanvas.setShowDistances(newtree.HasDistances());
+ distanceMenu.setState(newtree.HasDistances());
+ bootstrapMenu.setState(newtree.HasBootstrap());
+ if (true) // JBPNote TODO: preference for always marking placeholders in new associated tree
+ placeholdersMenu.setState(treeCanvas.markPlaceholders);
+ scrollPane.add(treeCanvas);
+
+ }
+
+public String getText(String format) {
+ return null;
+}
+
+ protected void fitToWindow_actionPerformed(ActionEvent e)
+ {
+ treeCanvas.fitToWindow = fitToWindow.getState();
+ repaint();
+ }
+
+ public void newickOutput_actionPerformed(ActionEvent actionEvent)
+ {
+ jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());
+ String output = fout.print(false, true);
+ CutAndPasteTransfer cap = new CutAndPasteTransfer(false);
+ cap.setText(output);
+ java.awt.Frame frame = new java.awt.Frame();
+ frame.add(cap);
+ jalview.bin.JalviewLite.addFrame(frame, type+" "+pwtype, 500,500);
+ }
+
+
+
+ protected void fontSize_actionPerformed(ActionEvent e)
+ {
+ /* if( treeCanvas==null )
+ return;
+
+ String size = fontSize.getLabel().substring( fontSize.getLabel().indexOf("-")+1);
+
+ Object selection = JOptionPane.showInternalInputDialog(Desktop.desktop,
+ "Select font size",
+ "Font size",
+ JOptionPane.QUESTION_MESSAGE,
+ null, new String[]{"1","2","4","6","8","10","12","14","16","18","20"}
+ ,"Font Size - "+size);
+ if(selection!=null)
+ {
+ fontSize.setText("Font Size - " + selection);
+
+ int i = Integer.parseInt(selection.toString());
+ treeCanvas.setFontSize(i);
+ }
+ scrollPane.setViewportView(treeCanvas);
+*/
+ }
+
+ protected void distanceMenu_actionPerformed(ActionEvent e)
+ {
+ treeCanvas.setShowDistances(distanceMenu.getState());
+ }
+
+ protected void bootstrapMenu_actionPerformed(ActionEvent e)
+ {
+ treeCanvas.setShowBootstrap(bootstrapMenu.getState());
+ }
+
+ protected void placeholdersMenu_actionPerformed(ActionEvent e)
+ {
+ treeCanvas.setMarkPlaceholders(placeholdersMenu.getState());
+ }
+
+}
-package jalview.jbappletgui;\r
-\r
-import java.awt.*;\r
-import java.awt.event.*;\r
-\r
-public class GTreePanel extends Frame\r
-{\r
- BorderLayout borderLayout1 = new BorderLayout();\r
- protected ScrollPane scrollPane = new ScrollPane();\r
- MenuBar jMenuBar1 = new MenuBar();\r
- Menu jMenu2 = new Menu();\r
- protected MenuItem fontSize = new MenuItem();\r
- protected CheckboxMenuItem bootstrapMenu = new CheckboxMenuItem();\r
- protected CheckboxMenuItem distanceMenu = new CheckboxMenuItem();\r
- protected CheckboxMenuItem fitToWindow = new CheckboxMenuItem();\r
- Menu fileMenu = new Menu();\r
- MenuItem newickOutput = new MenuItem();\r
-\r
- public GTreePanel()\r
- {\r
- try\r
- {\r
- jbInit();\r
- this.setMenuBar(jMenuBar1);\r
- }\r
- catch(Exception e)\r
- {\r
- e.printStackTrace();\r
- }\r
-\r
- }\r
- private void jbInit() throws Exception\r
- {\r
- setLayout(borderLayout1);\r
- this.setBackground(Color.white);\r
- this.setFont(new java.awt.Font("Verdana", 0, 12));\r
- jMenu2.setLabel("View");\r
- fontSize.setLabel("Font Size - 12");\r
- fontSize.addActionListener(new java.awt.event.ActionListener()\r
- {\r
- public void actionPerformed(ActionEvent e)\r
- {\r
- fontSize_actionPerformed(e);\r
- }\r
- });\r
- bootstrapMenu.setLabel("Show Bootstrap values");\r
- bootstrapMenu.addItemListener(new java.awt.event.ItemListener()\r
- {\r
- public void itemStateChanged(ItemEvent e)\r
- {\r
- bootstrapMenu_actionPerformed(null);\r
- }\r
- });\r
- distanceMenu.setLabel("Show Distances");\r
- distanceMenu.addItemListener(new java.awt.event.ItemListener()\r
- {\r
- public void itemStateChanged(ItemEvent e)\r
- {\r
- distanceMenu_actionPerformed(null);\r
- }\r
- });\r
- fitToWindow.setState(true);\r
- fitToWindow.setLabel("Fit to window");\r
- fitToWindow.addItemListener(new java.awt.event.ItemListener()\r
- {\r
- public void itemStateChanged(ItemEvent e)\r
- {\r
- fitToWindow_actionPerformed(null);\r
- }\r
- });\r
- fileMenu.setLabel("File");\r
- newickOutput.setLabel("Newick Format");\r
- newickOutput.addActionListener(new ActionListener()\r
- {\r
- public void actionPerformed(ActionEvent actionEvent)\r
- {\r
- newickOutput_actionPerformed(actionEvent);\r
- }\r
- });\r
- add(scrollPane, BorderLayout.CENTER);\r
- jMenuBar1.add(fileMenu);\r
- jMenuBar1.add(jMenu2);\r
- jMenu2.add(fitToWindow);\r
- jMenu2.add(fontSize);\r
- jMenu2.add(distanceMenu);\r
- jMenu2.add(bootstrapMenu);\r
- fileMenu.add(newickOutput);\r
- }\r
-\r
-\r
- protected void printMenu_actionPerformed(ActionEvent e)\r
- {\r
-\r
- }\r
-\r
- protected void fontSize_actionPerformed(ActionEvent e)\r
- {\r
-\r
- }\r
-\r
- protected void distanceMenu_actionPerformed(ActionEvent e)\r
- {\r
-\r
- }\r
-\r
- protected void bootstrapMenu_actionPerformed(ActionEvent e)\r
- {\r
-\r
- }\r
-\r
- protected void fitToWindow_actionPerformed(ActionEvent e)\r
- {\r
-\r
- }\r
-\r
- public void newickOutput_actionPerformed(ActionEvent actionEvent)\r
- {\r
-\r
- }\r
-\r
-}\r
+package jalview.jbappletgui;
+
+import java.awt.*;
+import java.awt.event.*;
+
+public class GTreePanel extends Frame
+{
+ BorderLayout borderLayout1 = new BorderLayout();
+ protected ScrollPane scrollPane = new ScrollPane();
+ MenuBar jMenuBar1 = new MenuBar();
+ Menu jMenu2 = new Menu();
+ protected MenuItem fontSize = new MenuItem();
+ protected CheckboxMenuItem bootstrapMenu = new CheckboxMenuItem();
+ protected CheckboxMenuItem distanceMenu = new CheckboxMenuItem();
+ protected CheckboxMenuItem placeholdersMenu = new CheckboxMenuItem();
+ protected CheckboxMenuItem fitToWindow = new CheckboxMenuItem();
+ Menu fileMenu = new Menu();
+ MenuItem newickOutput = new MenuItem();
+
+ public GTreePanel()
+ {
+ try
+ {
+ jbInit();
+ this.setMenuBar(jMenuBar1);
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ }
+ private void jbInit() throws Exception
+ {
+ setLayout(borderLayout1);
+ this.setBackground(Color.white);
+ this.setFont(new java.awt.Font("Verdana", 0, 12));
+ jMenu2.setLabel("View");
+ fontSize.setLabel("Font Size - 12");
+ fontSize.addActionListener(new java.awt.event.ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ fontSize_actionPerformed(e);
+ }
+ });
+ bootstrapMenu.setLabel("Show Bootstrap values");
+ bootstrapMenu.addItemListener(new java.awt.event.ItemListener()
+ {
+ public void itemStateChanged(ItemEvent e)
+ {
+ bootstrapMenu_actionPerformed(null);
+ }
+ });
+ distanceMenu.setLabel("Show Distances");
+ distanceMenu.addItemListener(new java.awt.event.ItemListener()
+ {
+ public void itemStateChanged(ItemEvent e)
+ {
+ distanceMenu_actionPerformed(null);
+ }
+ });
+ placeholdersMenu.setLabel("Mark Unassociated Leaves");
+ placeholdersMenu.addItemListener(new java.awt.event.ItemListener()
+ {
+ public void itemStateChanged(ItemEvent e)
+ {
+ placeholdersMenu_actionPerformed(null);
+ }
+ });
+ fitToWindow.setState(true);
+ fitToWindow.setLabel("Fit to window");
+ fitToWindow.addItemListener(new java.awt.event.ItemListener()
+ {
+ public void itemStateChanged(ItemEvent e)
+ {
+ fitToWindow_actionPerformed(null);
+ }
+ });
+ fileMenu.setLabel("File");
+ newickOutput.setLabel("Newick format");
+ newickOutput.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent actionEvent)
+ {
+ newickOutput_actionPerformed(actionEvent);
+ }
+ });
+ add(scrollPane, BorderLayout.CENTER);
+ jMenuBar1.add(fileMenu);
+ jMenuBar1.add(jMenu2);
+ jMenu2.add(fitToWindow);
+ jMenu2.add(fontSize);
+ jMenu2.add(distanceMenu);
+ jMenu2.add(bootstrapMenu);
+ jMenu2.add(placeholdersMenu);
+ fileMenu.add(newickOutput);
+ }
+
+
+ protected void printMenu_actionPerformed(ActionEvent e)
+ {
+
+ }
+
+ protected void fontSize_actionPerformed(ActionEvent e)
+ {
+
+ }
+
+ protected void distanceMenu_actionPerformed(ActionEvent e)
+ {
+
+ }
+
+ protected void bootstrapMenu_actionPerformed(ActionEvent e)
+ {
+
+ }
+
+ protected void placeholdersMenu_actionPerformed(ActionEvent e)
+ {
+
+ }
+
+ protected void fitToWindow_actionPerformed(ActionEvent e)
+ {
+
+ }
+
+ public void newickOutput_actionPerformed(ActionEvent actionEvent)
+ {
+
+ }
+
+}