after merge
[jalview.git] / src / jalview / appletgui / TreePanel.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 \r
20 package jalview.appletgui;\r
21 \r
22 import java.util.*;\r
23 \r
24 import java.awt.event.*;\r
25 import java.awt.*;\r
26 \r
27 import jalview.analysis.*;\r
28 import jalview.datamodel.*;\r
29 import jalview.io.*;\r
30 \r
31 public class TreePanel extends Frame\r
32 {\r
33   SequenceI[] seq;\r
34   String type;\r
35   String pwtype;\r
36   int start;\r
37   int end;\r
38   TreeCanvas treeCanvas;\r
39   NJTree tree;\r
40 \r
41   public NJTree getTree()\r
42   {\r
43     return tree;\r
44   }\r
45 \r
46   /**\r
47    * Creates a new TreePanel object.\r
48    *\r
49    * @param av DOCUMENT ME!\r
50    * @param seqVector DOCUMENT ME!\r
51    * @param type DOCUMENT ME!\r
52    * @param pwtype DOCUMENT ME!\r
53    * @param s DOCUMENT ME!\r
54    * @param e DOCUMENT ME!\r
55    */\r
56   public TreePanel(AlignViewport av, Vector seqVector, String type,\r
57                    String pwtype, int s, int e)\r
58   {\r
59     try\r
60     {\r
61       jbInit();\r
62       this.setMenuBar(jMenuBar1);\r
63     }\r
64     catch (Exception ex)\r
65     {\r
66       ex.printStackTrace();\r
67     }\r
68 \r
69     initTreePanel(av, seqVector, type, pwtype, s, e, null);\r
70   }\r
71 \r
72   /**\r
73    * Creates a new TreePanel object.\r
74    *\r
75    * @param av DOCUMENT ME!\r
76    * @param seqVector DOCUMENT ME!\r
77    * @param newtree DOCUMENT ME!\r
78    * @param type DOCUMENT ME!\r
79    * @param pwtype DOCUMENT ME!\r
80    */\r
81   public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree,\r
82                    String type, String pwtype)\r
83   {\r
84     try\r
85     {\r
86       jbInit();\r
87       this.setMenuBar(jMenuBar1);\r
88     }\r
89     catch (Exception e)\r
90     {\r
91       e.printStackTrace();\r
92     }\r
93 \r
94     initTreePanel(av, seqVector, type, pwtype, 0, seqVector.size(), newtree);\r
95   }\r
96 \r
97 \r
98   void initTreePanel(AlignViewport av, Vector seqVector, String type,\r
99                      String pwtype, int s, int e, NewickFile newTree)\r
100   {\r
101 \r
102     this.type = type;\r
103     this.pwtype = pwtype;\r
104 \r
105     start = s;\r
106     end = e;\r
107 \r
108     seq = new Sequence[seqVector.size()];\r
109     for(int i=0; i<seqVector.size(); i++)\r
110       seq[i] = (SequenceI)seqVector.elementAt(i);\r
111 \r
112 \r
113     treeCanvas = new TreeCanvas(av, scrollPane);\r
114     scrollPane.add(treeCanvas);\r
115 \r
116 \r
117     TreeLoader tl = new TreeLoader(newTree);\r
118     tl.start();\r
119 \r
120   }\r
121 \r
122   class TreeLoader extends Thread\r
123   {\r
124     NewickFile newtree;\r
125 \r
126     public TreeLoader(NewickFile newtree)\r
127     {\r
128       this.newtree = newtree;\r
129     }\r
130 \r
131     public void run()\r
132     {\r
133       if(newtree!=null)\r
134         tree = new NJTree(seq, newtree);\r
135       else\r
136         tree = new NJTree(seq, type, pwtype, start, end);\r
137 \r
138       tree.reCount(tree.getTopNode());\r
139       tree.findHeight(tree.getTopNode());\r
140       treeCanvas.setTree(tree);\r
141       if(newtree!=null)\r
142       {\r
143         distanceMenu.setState(newtree.HasDistances());\r
144         bootstrapMenu.setState(newtree.HasBootstrap());\r
145         treeCanvas.setShowBootstrap(newtree.HasBootstrap());\r
146         treeCanvas.setShowDistances(newtree.HasDistances());\r
147       }\r
148 \r
149 \r
150       treeCanvas.repaint();\r
151 \r
152     }\r
153   }\r
154 \r
155   public String getText(String format)\r
156   {\r
157     return null;\r
158   }\r
159 \r
160   protected void fitToWindow_actionPerformed(ActionEvent e)\r
161   {\r
162     treeCanvas.fitToWindow = fitToWindow.getState();\r
163     treeCanvas.repaint();\r
164   }\r
165 \r
166   public void newickOutput_actionPerformed(ActionEvent actionEvent)\r
167   {\r
168     jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());\r
169     String output = fout.print(false, true);\r
170     CutAndPasteTransfer cap = new CutAndPasteTransfer(false, null);\r
171     cap.setText(output);\r
172     java.awt.Frame frame = new java.awt.Frame();\r
173     frame.add(cap);\r
174     jalview.bin.JalviewLite.addFrame(frame, type + " " + pwtype, 500, 100);\r
175   }\r
176 \r
177   public java.awt.Font getTreeFont()\r
178   {\r
179     return treeCanvas.font;\r
180   }\r
181 \r
182   public void setTreeFont(java.awt.Font font)\r
183   {\r
184     treeCanvas.font = font;\r
185     treeCanvas.repaint();\r
186   }\r
187 \r
188   protected void fontSize_actionPerformed(ActionEvent e)\r
189   {\r
190      if( treeCanvas==null )\r
191         return;\r
192 \r
193     new FontChooser(this);\r
194   }\r
195 \r
196   protected void distanceMenu_actionPerformed(ActionEvent e)\r
197   {\r
198     treeCanvas.setShowDistances(distanceMenu.getState());\r
199   }\r
200 \r
201   protected void bootstrapMenu_actionPerformed(ActionEvent e)\r
202   {\r
203     treeCanvas.setShowBootstrap(bootstrapMenu.getState());\r
204   }\r
205 \r
206   protected void placeholdersMenu_actionPerformed(ActionEvent e)\r
207   {\r
208     treeCanvas.setMarkPlaceholders(placeholdersMenu.getState());\r
209   }\r
210 \r
211   BorderLayout borderLayout1 = new BorderLayout();\r
212   protected ScrollPane scrollPane = new ScrollPane();\r
213   MenuBar jMenuBar1 = new MenuBar();\r
214   Menu jMenu2 = new Menu();\r
215   protected MenuItem fontSize = new MenuItem();\r
216   protected CheckboxMenuItem bootstrapMenu = new CheckboxMenuItem();\r
217   protected CheckboxMenuItem distanceMenu = new CheckboxMenuItem();\r
218   protected CheckboxMenuItem placeholdersMenu = new CheckboxMenuItem();\r
219   protected CheckboxMenuItem fitToWindow = new CheckboxMenuItem();\r
220   Menu fileMenu = new Menu();\r
221   MenuItem newickOutput = new MenuItem();\r
222 \r
223   private void jbInit() throws Exception {\r
224       setLayout(borderLayout1);\r
225       this.setBackground(Color.white);\r
226       this.setFont(new java.awt.Font("Verdana", 0, 12));\r
227       jMenu2.setLabel("View");\r
228       fontSize.setLabel("Font...");\r
229       fontSize.addActionListener(new java.awt.event.ActionListener() {\r
230               public void actionPerformed(ActionEvent e) {\r
231                   fontSize_actionPerformed(e);\r
232               }\r
233           });\r
234       bootstrapMenu.setLabel("Show Bootstrap Values");\r
235       bootstrapMenu.addItemListener(new java.awt.event.ItemListener() {\r
236               public void itemStateChanged(ItemEvent e) {\r
237                   bootstrapMenu_actionPerformed(null);\r
238               }\r
239           });\r
240       distanceMenu.setLabel("Show Distances");\r
241       distanceMenu.addItemListener(new java.awt.event.ItemListener() {\r
242               public void itemStateChanged(ItemEvent e) {\r
243                   distanceMenu_actionPerformed(null);\r
244               }\r
245           });\r
246       placeholdersMenu.setLabel("Mark Unassociated Leaves");\r
247       placeholdersMenu.addItemListener(new java.awt.event.ItemListener() {\r
248               public void itemStateChanged(ItemEvent e) {\r
249                   placeholdersMenu_actionPerformed(null);\r
250               }\r
251           });\r
252       fitToWindow.setState(true);\r
253       fitToWindow.setLabel("Fit To Window");\r
254       fitToWindow.addItemListener(new java.awt.event.ItemListener() {\r
255               public void itemStateChanged(ItemEvent e) {\r
256                   fitToWindow_actionPerformed(null);\r
257               }\r
258           });\r
259       fileMenu.setLabel("File");\r
260       newickOutput.setLabel("Newick Format");\r
261       newickOutput.addActionListener(new ActionListener() {\r
262               public void actionPerformed(ActionEvent actionEvent) {\r
263                   newickOutput_actionPerformed(actionEvent);\r
264               }\r
265           });\r
266 \r
267     add(scrollPane, BorderLayout.CENTER);\r
268       jMenuBar1.add(fileMenu);\r
269       jMenuBar1.add(jMenu2);\r
270       jMenu2.add(fitToWindow);\r
271       jMenu2.add(fontSize);\r
272       jMenu2.add(distanceMenu);\r
273       jMenu2.add(bootstrapMenu);\r
274       jMenu2.add(placeholdersMenu);\r
275     fileMenu.add(newickOutput);\r
276   }\r
277 \r
278 }\r