added tree node property for sequence placeholders.
[jalview.git] / src / jalview / appletgui / TreePanel.java
index 2aeeaed..99d0328 100755 (executable)
-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());
+  }
+
+}