2 * Jalview - A Sequence Alignment Editor and Viewer
3 * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
20 package jalview.appletgui;
23 import java.awt.event.*;
24 import java.util.Hashtable;
26 import jalview.analysis.*;
27 import jalview.datamodel.*;
30 public class TreePanel
31 extends EmbmenuFrame implements ActionListener, ItemListener
38 TreeCanvas treeCanvas;
42 public NJTree getTree()
48 * Creates a new TreePanel object.
50 * @param av DOCUMENT ME!
51 * @param seqVector DOCUMENT ME!
52 * @param type DOCUMENT ME!
53 * @param pwtype DOCUMENT ME!
54 * @param s DOCUMENT ME!
55 * @param e DOCUMENT ME!
57 public TreePanel(AlignViewport av, String type, String pwtype)
62 this.setMenuBar(jMenuBar1);
69 initTreePanel(av, type, pwtype, null);
73 * Creates a new TreePanel object.
75 * @param av DOCUMENT ME!
76 * @param seqVector DOCUMENT ME!
77 * @param newtree DOCUMENT ME!
78 * @param type DOCUMENT ME!
79 * @param pwtype DOCUMENT ME!
81 public TreePanel(AlignViewport av,
89 this.setMenuBar(jMenuBar1);
96 initTreePanel(av, type, pwtype, newtree);
98 void initTreePanel(AlignViewport av,
106 this.pwtype = pwtype;
109 treeCanvas = new TreeCanvas(av, scrollPane);
110 TreeLoader tl = new TreeLoader(newTree);
112 embedMenuIfNeeded(treeCanvas);
113 scrollPane.add(treeCanvas, BorderLayout.CENTER);
115 void showOriginalData()
117 // decide if av alignment is sufficiently different to original data to warrant a new window to be created
118 // create new alignmnt window with hidden regions (unhiding hidden regions yields unaligned seqs)
119 // or create a selection box around columns in alignment view
120 // test Alignment(SeqCigar[])
121 if (tree.seqData != null)
125 // we try to get the associated view's gap character
126 // but this may fail if the view was closed...
129 } catch (Exception ex) {};
130 Object[] alAndColsel = tree.seqData.getAlignmentAndColumnSelection(gc);
132 if (alAndColsel != null && alAndColsel[0] != null)
134 Alignment al = new Alignment( (SequenceI[]) alAndColsel[0]);
135 AlignFrame af = new AlignFrame(al,
137 "Original Data for Tree",
140 af.viewport.setHiddenColumns( (ColumnSelection) alAndColsel[1]);
145 System.out.println("Original Tree Data not available");
153 jalview.datamodel.AlignmentView odata = null;
155 public TreeLoader(NewickFile newtree)
157 this.newtree = newtree;
166 tree = new NJTree(av.alignment.getSequencesArray(),
171 tree = new NJTree(av.alignment.getSequencesArray(), odata, newtree);
179 AlignmentView seqStrings = av.getAlignmentView(av.getSelectionGroup() != null);
180 if (av.getSelectionGroup() == null)
183 end = av.alignment.getWidth();
184 seqs = av.alignment.getSequencesArray();
188 start = av.getSelectionGroup().getStartRes();
189 end = av.getSelectionGroup().getEndRes() + 1;
190 seqs = av.getSelectionGroup().getSequencesInOrder(av.alignment);
193 tree = new NJTree(seqs, seqStrings, type, pwtype, start, end);
196 tree.reCount(tree.getTopNode());
197 tree.findHeight(tree.getTopNode());
198 treeCanvas.setTree(tree);
201 distanceMenu.setState(newtree.HasDistances());
202 bootstrapMenu.setState(newtree.HasBootstrap());
203 treeCanvas.setShowBootstrap(newtree.HasBootstrap());
204 treeCanvas.setShowDistances(newtree.HasDistances());
207 treeCanvas.repaint();
209 av.setCurrentTree(tree);
214 public void actionPerformed(ActionEvent evt)
216 if (evt.getSource() == newickOutput)
218 newickOutput_actionPerformed();
220 else if (evt.getSource() == fontSize)
222 fontSize_actionPerformed();
224 else if (evt.getSource() == inputData)
230 public void itemStateChanged(ItemEvent evt)
232 if (evt.getSource() == fitToWindow)
234 treeCanvas.fitToWindow = fitToWindow.getState();
237 else if (evt.getSource() == distanceMenu)
239 treeCanvas.setShowDistances(distanceMenu.getState());
242 else if (evt.getSource() == bootstrapMenu)
244 treeCanvas.setShowBootstrap(bootstrapMenu.getState());
247 else if (evt.getSource() == placeholdersMenu)
249 treeCanvas.setMarkPlaceholders(placeholdersMenu.getState());
252 treeCanvas.repaint();
255 public void newickOutput_actionPerformed()
257 jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());
258 String output = fout.print(false, true);
259 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, null);
261 java.awt.Frame frame = new java.awt.Frame();
263 jalview.bin.JalviewLite.addFrame(frame, type + " " + pwtype, 500, 100);
266 public java.awt.Font getTreeFont()
268 return treeCanvas.font;
271 public void setTreeFont(java.awt.Font font)
273 treeCanvas.font = font;
274 treeCanvas.repaint();
277 protected void fontSize_actionPerformed()
279 if (treeCanvas == null)
284 new FontChooser(this);
287 BorderLayout borderLayout1 = new BorderLayout();
288 protected ScrollPane scrollPane = new ScrollPane();
289 MenuBar jMenuBar1 = new MenuBar();
290 Menu jMenu2 = new Menu();
291 protected MenuItem fontSize = new MenuItem();
292 protected CheckboxMenuItem bootstrapMenu = new CheckboxMenuItem();
293 protected CheckboxMenuItem distanceMenu = new CheckboxMenuItem();
294 protected CheckboxMenuItem placeholdersMenu = new CheckboxMenuItem();
295 protected CheckboxMenuItem fitToWindow = new CheckboxMenuItem();
296 Menu fileMenu = new Menu();
297 MenuItem newickOutput = new MenuItem();
298 MenuItem inputData = new MenuItem();
300 private void jbInit()
303 setLayout(borderLayout1);
304 this.setBackground(Color.white);
305 this.setFont(new java.awt.Font("Verdana", 0, 12));
306 jMenu2.setLabel("View");
307 fontSize.setLabel("Font...");
308 fontSize.addActionListener(this);
309 bootstrapMenu.setLabel("Show Bootstrap Values");
310 bootstrapMenu.addItemListener(this);
311 distanceMenu.setLabel("Show Distances");
312 distanceMenu.addItemListener(this);
313 placeholdersMenu.setLabel("Mark Unassociated Leaves");
314 placeholdersMenu.addItemListener(this);
315 fitToWindow.setState(true);
316 fitToWindow.setLabel("Fit To Window");
317 fitToWindow.addItemListener(this);
318 fileMenu.setLabel("File");
319 newickOutput.setLabel("Newick Format");
320 newickOutput.addActionListener(this);
321 inputData.setLabel("Input Data...");
323 add(scrollPane, BorderLayout.CENTER);
324 jMenuBar1.add(fileMenu);
325 jMenuBar1.add(jMenu2);
326 jMenu2.add(fitToWindow);
327 jMenu2.add(fontSize);
328 jMenu2.add(distanceMenu);
329 jMenu2.add(bootstrapMenu);
330 jMenu2.add(placeholdersMenu);
331 fileMenu.add(newickOutput);
332 fileMenu.add(inputData);
333 inputData.addActionListener(this);