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