Need reference to mainApplet
[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 \r
26 import jalview.analysis.*;\r
27 import jalview.datamodel.*;\r
28 import jalview.io.*;\r
29 import jalview.jbappletgui.*;\r
30 \r
31 public class TreePanel\r
32     extends GTreePanel\r
33 {\r
34   SequenceI[] seq;\r
35   String type;\r
36   String pwtype;\r
37   AlignmentPanel ap;\r
38   int start;\r
39   int end;\r
40   TreeCanvas treeCanvas;\r
41   NJTree tree;\r
42 \r
43   public NJTree getTree()\r
44   {\r
45     return tree;\r
46   }\r
47 \r
48   public TreePanel(AlignmentPanel ap, Vector seqVector, String type,\r
49                    String pwtype, int s, int e)\r
50   {\r
51     super();\r
52 \r
53     this.ap = ap;\r
54     this.type = type;\r
55     this.pwtype = pwtype;\r
56 \r
57     start = s;\r
58     end = e;\r
59 \r
60     String longestName = "";\r
61     seq = new Sequence[seqVector.size()];\r
62     for (int i = 0; i < seqVector.size(); i++)\r
63     {\r
64       seq[i] = (Sequence) seqVector.elementAt(i);\r
65       if (seq[i].getName().length() > longestName.length())\r
66       {\r
67         longestName = seq[i].getName();\r
68       }\r
69     }\r
70 \r
71     tree = new NJTree(seq, type, pwtype, start, end);\r
72 \r
73     treeCanvas = new TreeCanvas(ap.av, tree, scrollPane, longestName);\r
74 \r
75     tree.reCount(tree.getTopNode());\r
76     tree.findHeight(tree.getTopNode());\r
77     scrollPane.add(treeCanvas);\r
78 \r
79   }\r
80 \r
81   public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree,\r
82                    String type, String pwtype)\r
83   {\r
84     super();\r
85     // These are probably only  arbitrary strings reflecting source of tree\r
86     this.type = type;\r
87     this.pwtype = pwtype;\r
88 \r
89     start = 0;\r
90     end = seqVector.size();\r
91 \r
92     String longestName = "";\r
93     seq = new Sequence[seqVector.size()];\r
94     for (int i = 0; i < seqVector.size(); i++)\r
95     {\r
96       seq[i] = (Sequence) seqVector.elementAt(i);\r
97     }\r
98     // This constructor matches sequence names to treenodes and sets up the tree layouts.\r
99     tree = new NJTree(seq, newtree);\r
100     // Now have to calculate longest name based on the leaves\r
101     Vector leaves = tree.findLeaves(tree.getTopNode(), new Vector());\r
102 \r
103     for (int i = 0; i < leaves.size(); i++)\r
104     {\r
105       if (longestName.length() <\r
106           ( (Sequence) ( (SequenceNode) leaves.elementAt(i)).element()).getName().\r
107           length())\r
108       {\r
109         longestName = TreeCanvas.PLACEHOLDER +\r
110             ( (Sequence) ( (SequenceNode) leaves.elementAt(i)).element()).\r
111             getName();\r
112       }\r
113     }\r
114 \r
115     tree.reCount(tree.getTopNode());\r
116     tree.findHeight(tree.getTopNode());\r
117 \r
118     treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);\r
119     treeCanvas.setShowBootstrap(newtree.HasBootstrap());\r
120     treeCanvas.setShowDistances(newtree.HasDistances());\r
121     distanceMenu.setState(newtree.HasDistances());\r
122     bootstrapMenu.setState(newtree.HasBootstrap());\r
123     if (true) // JBPNote TODO: preference for always marking placeholders in new associated tree\r
124     {\r
125       placeholdersMenu.setState(treeCanvas.markPlaceholders);\r
126     }\r
127     scrollPane.add(treeCanvas);\r
128 \r
129   }\r
130 \r
131   public String getText(String format)\r
132   {\r
133     return null;\r
134   }\r
135 \r
136   protected void fitToWindow_actionPerformed(ActionEvent e)\r
137   {\r
138     treeCanvas.fitToWindow = fitToWindow.getState();\r
139     repaint();\r
140   }\r
141 \r
142   public void newickOutput_actionPerformed(ActionEvent actionEvent)\r
143   {\r
144     jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());\r
145     String output = fout.print(false, true);\r
146     CutAndPasteTransfer cap = new CutAndPasteTransfer(false, ap.alignFrame.applet);\r
147     cap.setText(output);\r
148     java.awt.Frame frame = new java.awt.Frame();\r
149     frame.add(cap);\r
150     jalview.bin.JalviewLite.addFrame(frame, type + " " + pwtype, 500, 100);\r
151   }\r
152 \r
153   protected void fontSize_actionPerformed(ActionEvent e)\r
154   {\r
155     /*   if( treeCanvas==null )\r
156         return;\r
157 \r
158       String size = fontSize.getLabel().substring( fontSize.getLabel().indexOf("-")+1);\r
159 \r
160       Object selection = JOptionPane.showInternalInputDialog(Desktop.desktop,\r
161                                   "Select font size",\r
162                                   "Font size",\r
163                                   JOptionPane.QUESTION_MESSAGE,\r
164      null, new String[]{"1","2","4","6","8","10","12","14","16","18","20"}\r
165                                   ,"Font Size - "+size);\r
166       if(selection!=null)\r
167       {\r
168         fontSize.setText("Font Size - " + selection);\r
169 \r
170         int i = Integer.parseInt(selection.toString());\r
171         treeCanvas.setFontSize(i);\r
172       }\r
173        scrollPane.setViewportView(treeCanvas);\r
174      */\r
175   }\r
176 \r
177   protected void distanceMenu_actionPerformed(ActionEvent e)\r
178   {\r
179     treeCanvas.setShowDistances(distanceMenu.getState());\r
180   }\r
181 \r
182   protected void bootstrapMenu_actionPerformed(ActionEvent e)\r
183   {\r
184     treeCanvas.setShowBootstrap(bootstrapMenu.getState());\r
185   }\r
186 \r
187   protected void placeholdersMenu_actionPerformed(ActionEvent e)\r
188   {\r
189     treeCanvas.setMarkPlaceholders(placeholdersMenu.getState());\r
190   }\r
191 \r
192 }\r