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