JAL-1807 still testing
[jalviewjs.git] / unused / appletgui / TreePanel.java
index 4fa660b..4bc18a0 100644 (file)
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.appletgui;
-
-import jalview.analysis.NJTree;
-import jalview.api.analysis.ScoreModelI;
-import jalview.api.analysis.ViewBasedAnalysisI;
-import jalview.bin.JalviewLite;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentView;
-import jalview.datamodel.ColumnSelection;
-import jalview.datamodel.SequenceI;
-import jalview.io.NewickFile;
-import jalview.schemes.ResidueProperties;
-import jalview.util.MessageManager;
-
-import java.awt.BorderLayout;
-import javax.swing.JCheckBoxMenuItem;
-import java.awt.Color;
-
-import javax.swing.JFrame;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JScrollPane;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-
-public class TreePanel extends EmbmenuFrame implements ActionListener,
-        ItemListener
-{
-  SequenceI[] seq;
-
-  String type;
-
-  String pwtype;
-
-  int start;
-
-  int end;
-
-  TreeCanvas treeCanvas;
-
-  NJTree tree;
-
-  AlignmentPanel ap;
-
-  AlignViewport av;
-
-  public NJTree getTree()
-  {
-    return tree;
-  }
-
-  public void finalize() throws Throwable
-  {
-    ap = null;
-    av = null;
-    super.finalize();
-  }
-
-  /**
-   * Creates a new TreePanel object.
-   * 
-   * @param av
-   *          DOCUMENT ME!
-   * @param seqVector
-   *          DOCUMENT ME!
-   * @param type
-   *          DOCUMENT ME!
-   * @param pwtype
-   *          DOCUMENT ME!
-   * @param s
-   *          DOCUMENT ME!
-   * @param e
-   *          DOCUMENT ME!
-   */
-  public TreePanel(AlignmentPanel ap, String type, String pwtype)
-  {
-    try
-    {
-      jbInit();
-      this.setJMenuBar(jMenuBar1);
-    } catch (Exception ex)
-    {
-      ex.printStackTrace();
-    }
-
-    initTreePanel(ap, type, pwtype, null);
-  }
-
-  /**
-   * Creates a new TreePanel object.
-   * 
-   * @param av
-   *          DOCUMENT ME!
-   * @param seqVector
-   *          DOCUMENT ME!
-   * @param newtree
-   *          DOCUMENT ME!
-   * @param type
-   *          DOCUMENT ME!
-   * @param pwtype
-   *          DOCUMENT ME!
-   */
-  public TreePanel(AlignmentPanel ap, String type, String pwtype,
-          NewickFile newtree)
-  {
-    try
-    {
-      jbInit();
-      this.setJMenuBar(jMenuBar1);
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-    }
-
-    initTreePanel(ap, type, pwtype, newtree);
-  }
-
-  void initTreePanel(AlignmentPanel ap, String type, String pwtype,
-          NewickFile newTree)
-  {
-
-    this.ap = ap;
-    this.av = ap.av;
-    this.type = type;
-    this.pwtype = pwtype;
-
-    treeCanvas = new TreeCanvas(ap, scrollPane);
-    TreeLoader tl = new TreeLoader(newTree);
-    tl.start();
-    embedMenuIfNeeded(treeCanvas);
-    scrollPane.add(treeCanvas, BorderLayout.CENTER);
-  }
-
-  void showOriginalData()
-  {
-    // decide if av alignment is sufficiently different to original data to
-    // warrant a new window to be created
-    // create new alignmnt window with hidden regions (unhiding hidden regions
-    // yields unaligned seqs)
-    // or create a selection box around columns in alignment view
-    // test Alignment(SeqCigar[])
-    if (tree.seqData != null)
-    {
-      char gc = '-';
-      try
-      {
-        // we try to get the associated view's gap character
-        // but this may fail if the view was closed...
-        gc = av.getGapCharacter();
-      } catch (Exception ex)
-      {
-      }
-      ;
-      Object[] alAndColsel = tree.seqData
-              .getAlignmentAndColumnSelection(gc);
-
-      if (alAndColsel != null && alAndColsel[0] != null)
-      {
-        Alignment al = new Alignment((SequenceI[]) alAndColsel[0]);
-        AlignFrame af = new AlignFrame(al, av.applet,
-                "Original Data for Tree", false);
-
-        af.viewport.setHiddenColumns((ColumnSelection) alAndColsel[1]);
-      }
-    }
-    else
-    {
-      System.out.println("Original Tree Data not available");
-    }
-  }
-
-  class TreeLoader extends Thread
-  {
-    NewickFile newtree;
-
-    AlignmentView odata = null;
-
-    public TreeLoader(NewickFile newtree)
-    {
-      this.newtree = newtree;
-    }
-
-    public void run()
-    {
-      if (newtree != null)
-      {
-        if (odata == null)
-        {
-          tree = new NJTree(av.getAlignment().getSequencesArray(), newtree);
-        }
-        else
-        {
-          tree = new NJTree(av.getAlignment().getSequencesArray(), odata,
-                  newtree);
-        }
-
-      }
-      else
-      {
-        int start, end;
-        SequenceI[] seqs;
-        boolean selview = av.getSelectionGroup() != null
-                && av.getSelectionGroup().getSize() > 1;
-        AlignmentView seqStrings = av.getAlignmentView(selview);
-        if (!selview)
-        {
-          start = 0;
-          end = av.getAlignment().getWidth();
-          seqs = av.getAlignment().getSequencesArray();
-        }
-        else
-        {
-          start = av.getSelectionGroup().getStartRes();
-          end = av.getSelectionGroup().getEndRes() + 1;
-          seqs = av.getSelectionGroup().getSequencesInOrder(
-                  av.getAlignment());
-        }
-        ScoreModelI sm = ResidueProperties.getScoreModel(pwtype);
-        if (sm instanceof ViewBasedAnalysisI)
-        {
-          try
-          {
-            sm = sm.getClass().newInstance();
-            ((ViewBasedAnalysisI) sm)
-                    .configureFromAlignmentView(treeCanvas.ap);
-          } catch (Exception q)
-          {
-            System.err.println("Couldn't create a scoremodel instance for "
-                    + sm.getName());
-            q.printStackTrace();
-          }
-          tree = new NJTree(seqs, seqStrings, type, pwtype, sm, start, end);
-        }
-        else
-        {
-          tree = new NJTree(seqs, seqStrings, type, pwtype, null, start,
-                  end);
-        }
-      }
-
-      tree.reCount(tree.getTopNode());
-      tree.findHeight(tree.getTopNode());
-      treeCanvas.setTree(tree);
-      if (newtree != null)
-      {
-        // Set default view, paying lip service to any overriding tree view
-        // parameter settings
-        boolean showDist = newtree.HasDistances()
-                && av.applet.getDefaultParameter("showTreeDistances",
-                        newtree.HasDistances());
-        boolean showBoots = newtree.HasBootstrap()
-                && av.applet.getDefaultParameter("showTreeBootstraps",
-                        newtree.HasBootstrap());
-        distanceMenu.setSelected(showDist);
-        bootstrapMenu.setSelected(showBoots);
-        treeCanvas.setShowBootstrap(showBoots);
-        treeCanvas.setShowDistances(showDist);
-        treeCanvas.setMarkPlaceholders(av.applet.getDefaultParameter(
-                "showUnlinkedTreeNodes", false));
-      }
-
-      treeCanvas.repaint();
-
-      av.setCurrentTree(tree);
-
-    }
-  }
-
-  public void actionPerformed(ActionEvent evt)
-  {
-    if (evt.getSource() == newickOutput)
-    {
-      newickOutput_actionPerformed();
-    }
-    else if (evt.getSource() == fontSize)
-    {
-      fontSize_actionPerformed();
-    }
-    else if (evt.getSource() == inputData)
-    {
-      showOriginalData();
-    }
-  }
-
-  public void itemStateChanged(ItemEvent evt)
-  {
-    if (evt.getSource() == fitToWindow)
-    {
-      treeCanvas.fitToWindow = fitToWindow.getState();
-    }
-
-    else if (evt.getSource() == distanceMenu)
-    {
-      treeCanvas.setShowDistances(distanceMenu.getState());
-    }
-
-    else if (evt.getSource() == bootstrapMenu)
-    {
-      treeCanvas.setShowBootstrap(bootstrapMenu.getState());
-    }
-
-    else if (evt.getSource() == placeholdersMenu)
-    {
-      treeCanvas.setMarkPlaceholders(placeholdersMenu.getState());
-    }
-
-    treeCanvas.repaint();
-  }
-
-  public void newickOutput_actionPerformed()
-  {
-    NewickFile fout = new NewickFile(tree.getTopNode());
-    String output = fout.print(false, true);
-    CutAndPasteTransfer cap = new CutAndPasteTransfer(false, null);
-    cap.setText(output);
-    JFrame frame = new JFrame();
-    frame.add(cap);
-    JalviewLite.addFrame(frame, type + " " + pwtype, 500, 100);
-  }
-
-  public java.awt.Font getTreeFont()
-  {
-    return treeCanvas.font;
-  }
-
-  public void setTreeFont(java.awt.Font font)
-  {
-    treeCanvas.font = font;
-    treeCanvas.repaint();
-  }
-
-  protected void fontSize_actionPerformed()
-  {
-    if (treeCanvas == null)
-    {
-      return;
-    }
-
-    new FontChooser(this);
-  }
-
-  BorderLayout borderLayout1 = new BorderLayout();
-
-  protected JScrollPane scrollPane = new JScrollPane();
-
-  JMenuBar jMenuBar1 = new JMenuBar();
-
-  JMenu jMenu2 = new JMenu();
-
-  protected JMenuItem fontSize = new JMenuItem();
-
-  protected JCheckBoxMenuItem bootstrapMenu = new JCheckBoxMenuItem();
-
-  protected JCheckBoxMenuItem distanceMenu = new JCheckBoxMenuItem();
-
-  protected JCheckBoxMenuItem placeholdersMenu = new JCheckBoxMenuItem();
-
-  protected JCheckBoxMenuItem fitToWindow = new JCheckBoxMenuItem();
-
-  JMenu fileMenu = new JMenu();
-
-  JMenuItem newickOutput = new JMenuItem();
-
-  JMenuItem inputData = new JMenuItem();
-
-  private void jbInit() throws Exception
-  {
-    setLayout(borderLayout1);
-    this.setBackground(Color.white);
-    this.setFont(new java.awt.Font("Verdana", 0, 12));
-    jMenu2.setLabel(MessageManager.getString("action.view"));
-    fontSize.setLabel(MessageManager.getString("action.font"));
-    fontSize.addActionListener(this);
-    bootstrapMenu.setLabel(MessageManager
-            .getString("label.show_bootstrap_values"));
-    bootstrapMenu.addItemListener(this);
-    distanceMenu.setLabel(MessageManager.getString("label.show_distances"));
-    distanceMenu.addItemListener(this);
-    placeholdersMenu.setLabel(MessageManager
-            .getString("label.mark_unassociated_leaves"));
-    placeholdersMenu.addItemListener(this);
-    fitToWindow.setState(true);
-    fitToWindow.setLabel(MessageManager.getString("label.fit_to_window"));
-    fitToWindow.addItemListener(this);
-    fileMenu.setLabel(MessageManager.getString("action.file"));
-    newickOutput.setLabel(MessageManager.getString("label.newick_format"));
-    newickOutput.addActionListener(this);
-    inputData.setLabel(MessageManager.getString("label.input_data"));
-
-    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);
-    fileMenu.add(inputData);
-    inputData.addActionListener(this);
-  }
-
-}
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)\r
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors\r
+ * \r
+ * This file is part of Jalview.\r
+ * \r
+ * Jalview is free software: you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License \r
+ * as published by the Free Software Foundation, either version 3\r
+ * of the License, or (at your option) any later version.\r
+ *  \r
+ * Jalview is distributed in the hope that it will be useful, but \r
+ * WITHOUT ANY WARRANTY; without even the implied warranty \r
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
+ * PURPOSE.  See the GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\r
+ * The Jalview Authors are detailed in the 'AUTHORS' file.\r
+ */\r
+package jalview.appletgui;\r
+\r
+import jalview.analysis.NJTree;\r
+import jalview.api.analysis.ScoreModelI;\r
+import jalview.api.analysis.ViewBasedAnalysisI;\r
+import jalview.bin.JalviewLite;\r
+import jalview.datamodel.Alignment;\r
+import jalview.datamodel.AlignmentView;\r
+import jalview.datamodel.ColumnSelection;\r
+import jalview.datamodel.SequenceI;\r
+import jalview.io.NewickFile;\r
+import jalview.schemes.ResidueProperties;\r
+import jalview.util.MessageManager;\r
+\r
+import java.awt.BorderLayout;\r
+import javax.swing.JCheckBoxMenuItem;\r
+import java.awt.Color;\r
+\r
+import javax.swing.JFrame;\r
+import javax.swing.JMenu;\r
+import javax.swing.JMenuBar;\r
+import javax.swing.JMenuItem;\r
+import javax.swing.JScrollPane;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.awt.event.ItemEvent;\r
+import java.awt.event.ItemListener;\r
+\r
+public class TreePanel extends EmbmenuFrame implements ActionListener,\r
+        ItemListener\r
+{\r
+  SequenceI[] seq;\r
+\r
+  String type;\r
+\r
+  String pwtype;\r
+\r
+  int start;\r
+\r
+  int end;\r
+\r
+  TreeCanvas treeCanvas;\r
+\r
+  NJTree tree;\r
+\r
+  AlignmentPanel ap;\r
+\r
+  AlignViewport av;\r
+\r
+  public NJTree getTree()\r
+  {\r
+    return tree;\r
+  }\r
+\r
+  public void finalize() throws Throwable\r
+  {\r
+    ap = null;\r
+    av = null;\r
+    super.finalize();\r
+  }\r
+\r
+  /**\r
+   * Creates a new TreePanel object.\r
+   * \r
+   * @param av\r
+   *          DOCUMENT ME!\r
+   * @param seqVector\r
+   *          DOCUMENT ME!\r
+   * @param type\r
+   *          DOCUMENT ME!\r
+   * @param pwtype\r
+   *          DOCUMENT ME!\r
+   * @param s\r
+   *          DOCUMENT ME!\r
+   * @param e\r
+   *          DOCUMENT ME!\r
+   */\r
+  public TreePanel(AlignmentPanel ap, String type, String pwtype)\r
+  {\r
+    try\r
+    {\r
+      jbInit();\r
+      this.setJMenuBar(jMenuBar1);\r
+    } catch (Exception ex)\r
+    {\r
+      ex.printStackTrace();\r
+    }\r
+\r
+    initTreePanel(ap, type, pwtype, null);\r
+  }\r
+\r
+  /**\r
+   * Creates a new TreePanel object.\r
+   * \r
+   * @param av\r
+   *          DOCUMENT ME!\r
+   * @param seqVector\r
+   *          DOCUMENT ME!\r
+   * @param newtree\r
+   *          DOCUMENT ME!\r
+   * @param type\r
+   *          DOCUMENT ME!\r
+   * @param pwtype\r
+   *          DOCUMENT ME!\r
+   */\r
+  public TreePanel(AlignmentPanel ap, String type, String pwtype,\r
+          NewickFile newtree)\r
+  {\r
+    try\r
+    {\r
+      jbInit();\r
+      this.setJMenuBar(jMenuBar1);\r
+    } catch (Exception e)\r
+    {\r
+      e.printStackTrace();\r
+    }\r
+\r
+    initTreePanel(ap, type, pwtype, newtree);\r
+  }\r
+\r
+  void initTreePanel(AlignmentPanel ap, String type, String pwtype,\r
+          NewickFile newTree)\r
+  {\r
+\r
+    this.ap = ap;\r
+    this.av = ap.av;\r
+    this.type = type;\r
+    this.pwtype = pwtype;\r
+\r
+    treeCanvas = new TreeCanvas(ap, scrollPane);\r
+    TreeLoader tl = new TreeLoader(newTree);\r
+    tl.start();\r
+    embedMenuIfNeeded(treeCanvas);\r
+    scrollPane.add(treeCanvas, BorderLayout.CENTER);\r
+  }\r
+\r
+  void showOriginalData()\r
+  {\r
+    // decide if av alignment is sufficiently different to original data to\r
+    // warrant a new window to be created\r
+    // create new alignmnt window with hidden regions (unhiding hidden regions\r
+    // yields unaligned seqs)\r
+    // or create a selection box around columns in alignment view\r
+    // test Alignment(SeqCigar[])\r
+    if (tree.seqData != null)\r
+    {\r
+      char gc = '-';\r
+      try\r
+      {\r
+        // we try to get the associated view's gap character\r
+        // but this may fail if the view was closed...\r
+        gc = av.getGapCharacter();\r
+      } catch (Exception ex)\r
+      {\r
+      }\r
+      ;\r
+      Object[] alAndColsel = tree.seqData\r
+              .getAlignmentAndColumnSelection(gc);\r
+\r
+      if (alAndColsel != null && alAndColsel[0] != null)\r
+      {\r
+        Alignment al = new Alignment((SequenceI[]) alAndColsel[0]);\r
+        AlignFrame af = new AlignFrame(al, av.applet,\r
+                "Original Data for Tree", false);\r
+\r
+        af.viewport.setHiddenColumns((ColumnSelection) alAndColsel[1]);\r
+      }\r
+    }\r
+    else\r
+    {\r
+      System.out.println("Original Tree Data not available");\r
+    }\r
+  }\r
+\r
+  class TreeLoader extends Thread\r
+  {\r
+    NewickFile newtree;\r
+\r
+    AlignmentView odata = null;\r
+\r
+    public TreeLoader(NewickFile newtree)\r
+    {\r
+      this.newtree = newtree;\r
+    }\r
+\r
+    public void run()\r
+    {\r
+      if (newtree != null)\r
+      {\r
+        if (odata == null)\r
+        {\r
+          tree = new NJTree(av.getAlignment().getSequencesArray(), newtree);\r
+        }\r
+        else\r
+        {\r
+          tree = new NJTree(av.getAlignment().getSequencesArray(), odata,\r
+                  newtree);\r
+        }\r
+\r
+      }\r
+      else\r
+      {\r
+        int start, end;\r
+        SequenceI[] seqs;\r
+        boolean selview = av.getSelectionGroup() != null\r
+                && av.getSelectionGroup().getSize() > 1;\r
+        AlignmentView seqStrings = av.getAlignmentView(selview);\r
+        if (!selview)\r
+        {\r
+          start = 0;\r
+          end = av.getAlignment().getWidth();\r
+          seqs = av.getAlignment().getSequencesArray();\r
+        }\r
+        else\r
+        {\r
+          start = av.getSelectionGroup().getStartRes();\r
+          end = av.getSelectionGroup().getEndRes() + 1;\r
+          seqs = av.getSelectionGroup().getSequencesInOrder(\r
+                  av.getAlignment());\r
+        }\r
+        ScoreModelI sm = ResidueProperties.getScoreModel(pwtype);\r
+        if (sm instanceof ViewBasedAnalysisI)\r
+        {\r
+          try\r
+          {\r
+            sm = sm.getClass().newInstance();\r
+            ((ViewBasedAnalysisI) sm)\r
+                    .configureFromAlignmentView(treeCanvas.ap);\r
+          } catch (Exception q)\r
+          {\r
+            System.err.println("Couldn't create a scoremodel instance for "\r
+                    + sm.getName());\r
+            q.printStackTrace();\r
+          }\r
+          tree = new NJTree(seqs, seqStrings, type, pwtype, sm, start, end);\r
+        }\r
+        else\r
+        {\r
+          tree = new NJTree(seqs, seqStrings, type, pwtype, null, start,\r
+                  end);\r
+        }\r
+      }\r
+\r
+      tree.reCount(tree.getTopNode());\r
+      tree.findHeight(tree.getTopNode());\r
+      treeCanvas.setTree(tree);\r
+      if (newtree != null)\r
+      {\r
+        // Set default view, paying lip service to any overriding tree view\r
+        // parameter settings\r
+        boolean showDist = newtree.HasDistances()\r
+                && av.applet.getDefaultParameter("showTreeDistances",\r
+                        newtree.HasDistances());\r
+        boolean showBoots = newtree.HasBootstrap()\r
+                && av.applet.getDefaultParameter("showTreeBootstraps",\r
+                        newtree.HasBootstrap());\r
+        distanceMenu.setSelected(showDist);\r
+        bootstrapMenu.setSelected(showBoots);\r
+        treeCanvas.setShowBootstrap(showBoots);\r
+        treeCanvas.setShowDistances(showDist);\r
+        treeCanvas.setMarkPlaceholders(av.applet.getDefaultParameter(\r
+                "showUnlinkedTreeNodes", false));\r
+      }\r
+\r
+      treeCanvas.repaint();\r
+\r
+      av.setCurrentTree(tree);\r
+\r
+    }\r
+  }\r
+\r
+  public void actionPerformed(ActionEvent evt)\r
+  {\r
+    if (evt.getSource() == newickOutput)\r
+    {\r
+      newickOutput_actionPerformed();\r
+    }\r
+    else if (evt.getSource() == fontSize)\r
+    {\r
+      fontSize_actionPerformed();\r
+    }\r
+    else if (evt.getSource() == inputData)\r
+    {\r
+      showOriginalData();\r
+    }\r
+  }\r
+\r
+  public void itemStateChanged(ItemEvent evt)\r
+  {\r
+    if (evt.getSource() == fitToWindow)\r
+    {\r
+      treeCanvas.fitToWindow = fitToWindow.getState();\r
+    }\r
+\r
+    else if (evt.getSource() == distanceMenu)\r
+    {\r
+      treeCanvas.setShowDistances(distanceMenu.getState());\r
+    }\r
+\r
+    else if (evt.getSource() == bootstrapMenu)\r
+    {\r
+      treeCanvas.setShowBootstrap(bootstrapMenu.getState());\r
+    }\r
+\r
+    else if (evt.getSource() == placeholdersMenu)\r
+    {\r
+      treeCanvas.setMarkPlaceholders(placeholdersMenu.getState());\r
+    }\r
+\r
+    treeCanvas.repaint();\r
+  }\r
+\r
+  public void newickOutput_actionPerformed()\r
+  {\r
+    NewickFile fout = new NewickFile(tree.getTopNode());\r
+    String output = fout.print(false, true);\r
+    CutAndPasteTransfer cap = new CutAndPasteTransfer(false, null);\r
+    cap.setText(output);\r
+    JFrame frame = new JFrame();\r
+    frame.add(cap);\r
+    JalviewLite.addFrame(frame, type + " " + pwtype, 500, 100);\r
+  }\r
+\r
+  public java.awt.Font getTreeFont()\r
+  {\r
+    return treeCanvas.font;\r
+  }\r
+\r
+  public void setTreeFont(java.awt.Font font)\r
+  {\r
+    treeCanvas.font = font;\r
+    treeCanvas.repaint();\r
+  }\r
+\r
+  protected void fontSize_actionPerformed()\r
+  {\r
+    if (treeCanvas == null)\r
+    {\r
+      return;\r
+    }\r
+\r
+    new FontChooser(this);\r
+  }\r
+\r
+  BorderLayout borderLayout1 = new BorderLayout();\r
+\r
+  protected JScrollPane scrollPane = new JScrollPane();\r
+\r
+  JMenuBar jMenuBar1 = new JMenuBar();\r
+\r
+  JMenu jMenu2 = new JMenu();\r
+\r
+  protected JMenuItem fontSize = new JMenuItem();\r
+\r
+  protected JCheckBoxMenuItem bootstrapMenu = new JCheckBoxMenuItem();\r
+\r
+  protected JCheckBoxMenuItem distanceMenu = new JCheckBoxMenuItem();\r
+\r
+  protected JCheckBoxMenuItem placeholdersMenu = new JCheckBoxMenuItem();\r
+\r
+  protected JCheckBoxMenuItem fitToWindow = new JCheckBoxMenuItem();\r
+\r
+  JMenu fileMenu = new JMenu();\r
+\r
+  JMenuItem newickOutput = new JMenuItem();\r
+\r
+  JMenuItem inputData = new JMenuItem();\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(MessageManager.getString("action.view"));\r
+    fontSize.setLabel(MessageManager.getString("action.font"));\r
+    fontSize.addActionListener(this);\r
+    bootstrapMenu.setLabel(MessageManager\r
+            .getString("label.show_bootstrap_values"));\r
+    bootstrapMenu.addItemListener(this);\r
+    distanceMenu.setLabel(MessageManager.getString("label.show_distances"));\r
+    distanceMenu.addItemListener(this);\r
+    placeholdersMenu.setLabel(MessageManager\r
+            .getString("label.mark_unassociated_leaves"));\r
+    placeholdersMenu.addItemListener(this);\r
+    fitToWindow.setState(true);\r
+    fitToWindow.setLabel(MessageManager.getString("label.fit_to_window"));\r
+    fitToWindow.addItemListener(this);\r
+    fileMenu.setLabel(MessageManager.getString("action.file"));\r
+    newickOutput.setLabel(MessageManager.getString("label.newick_format"));\r
+    newickOutput.addActionListener(this);\r
+    inputData.setLabel(MessageManager.getString("label.input_data"));\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
+    jMenu2.add(placeholdersMenu);\r
+    fileMenu.add(newickOutput);\r
+    fileMenu.add(inputData);\r
+    inputData.addActionListener(this);\r
+  }\r
+\r
+}\r