Append start and end
[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 implements ActionListener, ItemListener\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   AlignViewport av;\r
41 \r
42   public NJTree getTree()\r
43   {\r
44     return tree;\r
45   }\r
46 \r
47   /**\r
48    * Creates a new TreePanel object.\r
49    *\r
50    * @param av DOCUMENT ME!\r
51    * @param seqVector DOCUMENT ME!\r
52    * @param type DOCUMENT ME!\r
53    * @param pwtype DOCUMENT ME!\r
54    * @param s DOCUMENT ME!\r
55    * @param e DOCUMENT ME!\r
56    */\r
57   public TreePanel(AlignViewport av, Vector seqVector, String type,\r
58                    String pwtype, int s, int e)\r
59   {\r
60     try\r
61     {\r
62       jbInit();\r
63       this.setMenuBar(jMenuBar1);\r
64     }\r
65     catch (Exception ex)\r
66     {\r
67       ex.printStackTrace();\r
68     }\r
69 \r
70     initTreePanel(av, seqVector, type, pwtype, s, e, null);\r
71   }\r
72 \r
73   /**\r
74    * Creates a new TreePanel object.\r
75    *\r
76    * @param av DOCUMENT ME!\r
77    * @param seqVector DOCUMENT ME!\r
78    * @param newtree DOCUMENT ME!\r
79    * @param type DOCUMENT ME!\r
80    * @param pwtype DOCUMENT ME!\r
81    */\r
82   public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree,\r
83                    String type, String pwtype)\r
84   {\r
85     try\r
86     {\r
87       jbInit();\r
88       this.setMenuBar(jMenuBar1);\r
89     }\r
90     catch (Exception e)\r
91     {\r
92       e.printStackTrace();\r
93     }\r
94 \r
95     initTreePanel(av, seqVector, type, pwtype, 0, seqVector.size(), newtree);\r
96   }\r
97 \r
98 \r
99   void initTreePanel(AlignViewport av, Vector seqVector, String type,\r
100                      String pwtype, int s, int e, NewickFile newTree)\r
101   {\r
102 \r
103     this.av = av;\r
104     this.type = type;\r
105     this.pwtype = pwtype;\r
106 \r
107     start = s;\r
108     end = e;\r
109 \r
110     seq = new Sequence[seqVector.size()];\r
111     for(int i=0; i<seqVector.size(); i++)\r
112       seq[i] = (SequenceI)seqVector.elementAt(i);\r
113 \r
114 \r
115     treeCanvas = new TreeCanvas(av, scrollPane);\r
116     scrollPane.add(treeCanvas);\r
117 \r
118 \r
119     TreeLoader tl = new TreeLoader(newTree);\r
120     tl.start();\r
121 \r
122   }\r
123 \r
124   class TreeLoader extends Thread\r
125   {\r
126     NewickFile newtree;\r
127 \r
128     public TreeLoader(NewickFile newtree)\r
129     {\r
130       this.newtree = newtree;\r
131     }\r
132 \r
133     public void run()\r
134     {\r
135       if(newtree!=null)\r
136         tree = new NJTree(seq, newtree);\r
137       else\r
138         tree = new NJTree(seq, type, pwtype, start, end);\r
139 \r
140       tree.reCount(tree.getTopNode());\r
141       tree.findHeight(tree.getTopNode());\r
142       treeCanvas.setTree(tree);\r
143       if(newtree!=null)\r
144       {\r
145         distanceMenu.setState(newtree.HasDistances());\r
146         bootstrapMenu.setState(newtree.HasBootstrap());\r
147         treeCanvas.setShowBootstrap(newtree.HasBootstrap());\r
148         treeCanvas.setShowDistances(newtree.HasDistances());\r
149       }\r
150 \r
151 \r
152       treeCanvas.repaint();\r
153 \r
154       av.setCurrentTree(tree);\r
155 \r
156     }\r
157   }\r
158 \r
159   public void actionPerformed(ActionEvent evt)\r
160   {\r
161     if(evt.getSource()==newickOutput)\r
162       newickOutput_actionPerformed();\r
163     else if(evt.getSource()==fontSize)\r
164       fontSize_actionPerformed();\r
165   }\r
166 \r
167   public void itemStateChanged(ItemEvent evt)\r
168   {\r
169     if(evt.getSource()==fitToWindow)\r
170       treeCanvas.fitToWindow = fitToWindow.getState();\r
171 \r
172     else if(evt.getSource()==distanceMenu)\r
173       treeCanvas.setShowDistances(distanceMenu.getState());\r
174 \r
175     else if(evt.getSource()==bootstrapMenu)\r
176       treeCanvas.setShowBootstrap(bootstrapMenu.getState());\r
177 \r
178     else if(evt.getSource()==placeholdersMenu)\r
179       treeCanvas.setMarkPlaceholders(placeholdersMenu.getState());\r
180 \r
181     treeCanvas.repaint();\r
182   }\r
183 \r
184 \r
185   public void newickOutput_actionPerformed()\r
186   {\r
187     jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());\r
188     String output = fout.print(false, true);\r
189     CutAndPasteTransfer cap = new CutAndPasteTransfer(false, null);\r
190     cap.setText(output);\r
191     java.awt.Frame frame = new java.awt.Frame();\r
192     frame.add(cap);\r
193     jalview.bin.JalviewLite.addFrame(frame, type + " " + pwtype, 500, 100);\r
194   }\r
195 \r
196   public java.awt.Font getTreeFont()\r
197   {\r
198     return treeCanvas.font;\r
199   }\r
200 \r
201   public void setTreeFont(java.awt.Font font)\r
202   {\r
203     treeCanvas.font = font;\r
204     treeCanvas.repaint();\r
205   }\r
206 \r
207   protected void fontSize_actionPerformed()\r
208   {\r
209      if( treeCanvas==null )\r
210         return;\r
211 \r
212     new FontChooser(this);\r
213   }\r
214 \r
215 \r
216   BorderLayout borderLayout1 = new BorderLayout();\r
217   protected ScrollPane scrollPane = new ScrollPane();\r
218   MenuBar jMenuBar1 = new MenuBar();\r
219   Menu jMenu2 = new Menu();\r
220   protected MenuItem fontSize = new MenuItem();\r
221   protected CheckboxMenuItem bootstrapMenu = new CheckboxMenuItem();\r
222   protected CheckboxMenuItem distanceMenu = new CheckboxMenuItem();\r
223   protected CheckboxMenuItem placeholdersMenu = new CheckboxMenuItem();\r
224   protected CheckboxMenuItem fitToWindow = new CheckboxMenuItem();\r
225   Menu fileMenu = new Menu();\r
226   MenuItem newickOutput = new MenuItem();\r
227 \r
228   private void jbInit() throws Exception {\r
229       setLayout(borderLayout1);\r
230       this.setBackground(Color.white);\r
231       this.setFont(new java.awt.Font("Verdana", 0, 12));\r
232       jMenu2.setLabel("View");\r
233       fontSize.setLabel("Font...");\r
234       fontSize.addActionListener(this);\r
235       bootstrapMenu.setLabel("Show Bootstrap Values");\r
236       bootstrapMenu.addItemListener(this);\r
237       distanceMenu.setLabel("Show Distances");\r
238       distanceMenu.addItemListener(this);\r
239       placeholdersMenu.setLabel("Mark Unassociated Leaves");\r
240       placeholdersMenu.addItemListener(this);\r
241       fitToWindow.setState(true);\r
242       fitToWindow.setLabel("Fit To Window");\r
243       fitToWindow.addItemListener(this);\r
244       fileMenu.setLabel("File");\r
245       newickOutput.setLabel("Newick Format");\r
246       newickOutput.addActionListener(this);\r
247 \r
248     add(scrollPane, BorderLayout.CENTER);\r
249       jMenuBar1.add(fileMenu);\r
250       jMenuBar1.add(jMenu2);\r
251       jMenu2.add(fitToWindow);\r
252       jMenu2.add(fontSize);\r
253       jMenu2.add(distanceMenu);\r
254       jMenu2.add(bootstrapMenu);\r
255       jMenu2.add(placeholdersMenu);\r
256     fileMenu.add(newickOutput);\r
257   }\r
258 \r
259 }\r