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)
123 Object[] alAndColsel = tree.seqData.getAlignmentAndColumnSelection(av.
126 if (alAndColsel != null && alAndColsel[0] != null)
128 Alignment al = new Alignment( (SequenceI[]) alAndColsel[0]);
129 AlignFrame af = new AlignFrame(al,
131 "Original Data for Tree",
134 af.viewport.setHiddenColumns( (ColumnSelection) alAndColsel[1]);
139 System.out.println("Original Tree Data not available");
147 jalview.datamodel.AlignmentView odata = null;
149 public TreeLoader(NewickFile newtree)
151 this.newtree = newtree;
160 tree = new NJTree(av.alignment.getSequencesArray(),
165 tree = new NJTree(av.alignment.getSequencesArray(), odata, newtree);
173 AlignmentView seqStrings = av.getAlignmentView(av.getSelectionGroup() != null);
174 if (av.getSelectionGroup() == null)
177 end = av.alignment.getWidth();
178 seqs = av.alignment.getSequencesArray();
182 start = av.getSelectionGroup().getStartRes();
183 end = av.getSelectionGroup().getEndRes() + 1;
184 seqs = av.getSelectionGroup().getSequencesInOrder(av.alignment);
187 tree = new NJTree(seqs, seqStrings, type, pwtype, start, end);
190 tree.reCount(tree.getTopNode());
191 tree.findHeight(tree.getTopNode());
192 treeCanvas.setTree(tree);
195 distanceMenu.setState(newtree.HasDistances());
196 bootstrapMenu.setState(newtree.HasBootstrap());
197 treeCanvas.setShowBootstrap(newtree.HasBootstrap());
198 treeCanvas.setShowDistances(newtree.HasDistances());
201 treeCanvas.repaint();
203 av.setCurrentTree(tree);
208 public void actionPerformed(ActionEvent evt)
210 if (evt.getSource() == newickOutput)
212 newickOutput_actionPerformed();
214 else if (evt.getSource() == fontSize)
216 fontSize_actionPerformed();
218 else if (evt.getSource() == inputData)
224 public void itemStateChanged(ItemEvent evt)
226 if (evt.getSource() == fitToWindow)
228 treeCanvas.fitToWindow = fitToWindow.getState();
231 else if (evt.getSource() == distanceMenu)
233 treeCanvas.setShowDistances(distanceMenu.getState());
236 else if (evt.getSource() == bootstrapMenu)
238 treeCanvas.setShowBootstrap(bootstrapMenu.getState());
241 else if (evt.getSource() == placeholdersMenu)
243 treeCanvas.setMarkPlaceholders(placeholdersMenu.getState());
246 treeCanvas.repaint();
249 public void newickOutput_actionPerformed()
251 jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());
252 String output = fout.print(false, true);
253 CutAndPasteTransfer cap = new CutAndPasteTransfer(false, null);
255 java.awt.Frame frame = new java.awt.Frame();
257 jalview.bin.JalviewLite.addFrame(frame, type + " " + pwtype, 500, 100);
260 public java.awt.Font getTreeFont()
262 return treeCanvas.font;
265 public void setTreeFont(java.awt.Font font)
267 treeCanvas.font = font;
268 treeCanvas.repaint();
271 protected void fontSize_actionPerformed()
273 if (treeCanvas == null)
278 new FontChooser(this);
281 BorderLayout borderLayout1 = new BorderLayout();
282 protected ScrollPane scrollPane = new ScrollPane();
283 MenuBar jMenuBar1 = new MenuBar();
284 Menu jMenu2 = new Menu();
285 protected MenuItem fontSize = new MenuItem();
286 protected CheckboxMenuItem bootstrapMenu = new CheckboxMenuItem();
287 protected CheckboxMenuItem distanceMenu = new CheckboxMenuItem();
288 protected CheckboxMenuItem placeholdersMenu = new CheckboxMenuItem();
289 protected CheckboxMenuItem fitToWindow = new CheckboxMenuItem();
290 Menu fileMenu = new Menu();
291 MenuItem newickOutput = new MenuItem();
292 MenuItem inputData = new MenuItem();
294 private void jbInit()
297 setLayout(borderLayout1);
298 this.setBackground(Color.white);
299 this.setFont(new java.awt.Font("Verdana", 0, 12));
300 jMenu2.setLabel("View");
301 fontSize.setLabel("Font...");
302 fontSize.addActionListener(this);
303 bootstrapMenu.setLabel("Show Bootstrap Values");
304 bootstrapMenu.addItemListener(this);
305 distanceMenu.setLabel("Show Distances");
306 distanceMenu.addItemListener(this);
307 placeholdersMenu.setLabel("Mark Unassociated Leaves");
308 placeholdersMenu.addItemListener(this);
309 fitToWindow.setState(true);
310 fitToWindow.setLabel("Fit To Window");
311 fitToWindow.addItemListener(this);
312 fileMenu.setLabel("File");
313 newickOutput.setLabel("Newick Format");
314 newickOutput.addActionListener(this);
315 inputData.setLabel("Input Data...");
317 add(scrollPane, BorderLayout.CENTER);
318 jMenuBar1.add(fileMenu);
319 jMenuBar1.add(jMenu2);
320 jMenu2.add(fitToWindow);
321 jMenu2.add(fontSize);
322 jMenu2.add(distanceMenu);
323 jMenu2.add(bootstrapMenu);
324 jMenu2.add(placeholdersMenu);
325 fileMenu.add(newickOutput);
326 fileMenu.add(inputData);
327 inputData.addActionListener(this);