getTree method added
[jalview.git] / src / jalview / gui / TreePanel.java
1 package jalview.gui;\r
2 \r
3 import jalview.datamodel.*;\r
4 import jalview.analysis.*;\r
5 import jalview.jbgui.GTreePanel;\r
6 import jalview.io.*;\r
7 import java.awt.event.*;\r
8 import java.util.*;\r
9 import java.io.*;\r
10 import jalview.util.*;\r
11 import javax.swing.*;\r
12 import java.awt.print.*;\r
13 import java.awt.*;\r
14 import java.awt.image.*;\r
15 import org.jibble.epsgraphics.*;\r
16 import javax.imageio.*;\r
17 \r
18 \r
19 \r
20 \r
21 public class TreePanel extends GTreePanel\r
22 {\r
23   SequenceI[] seq;\r
24   String type;\r
25   String pwtype;\r
26   AlignViewport av;\r
27   int start;\r
28   int end;\r
29   TreeCanvas treeCanvas;\r
30   NJTree tree;\r
31 \r
32   public NJTree getTree()\r
33   {\r
34     return tree;\r
35   }\r
36 \r
37   public TreePanel(AlignViewport av, Vector seqVector, String type, String pwtype, int s, int e)\r
38   {\r
39     super();\r
40 \r
41     this.type = type;\r
42     this.pwtype = pwtype;\r
43 \r
44     start = s;\r
45     end = e;\r
46 \r
47     String longestName = "";\r
48     seq = new Sequence [seqVector.size()];\r
49     for (int i=0;i < seqVector.size();i++)\r
50     {\r
51       seq[i] = (Sequence) seqVector.elementAt(i);\r
52       if(seq[i].getName().length()>longestName.length())\r
53         longestName = seq[i].getName();\r
54     }\r
55 \r
56     tree = new NJTree(seq, type, pwtype, start, end);\r
57 \r
58     treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);\r
59 \r
60     tree.reCount(tree.getTopNode());\r
61     tree.findHeight(tree.getTopNode());\r
62     scrollPane.setViewportView(treeCanvas);\r
63 \r
64   }\r
65   public TreePanel(AlignViewport av, Vector seqVector, NewickFile newtree,\r
66                    String type, String pwtype)\r
67     {\r
68       super();\r
69       // These are probably only  arbitrary strings reflecting source of tree\r
70       this.type = type;\r
71       this.pwtype = pwtype;\r
72 \r
73       start = 0;\r
74       end = seqVector.size();\r
75 \r
76       String longestName = "";\r
77       seq = new Sequence [seqVector.size()];\r
78       for (int i=0;i < seqVector.size();i++)\r
79       {\r
80         seq[i] = (Sequence) seqVector.elementAt(i);\r
81         if(seq[i].getName().length()>longestName.length())\r
82           longestName = seq[i].getName();\r
83       }\r
84       // This constructor matches sequence names to treenodes and sets up the tree layouts.\r
85       tree = new NJTree(seq, newtree);\r
86 \r
87       tree.reCount(tree.getTopNode());\r
88       tree.findHeight(tree.getTopNode());\r
89 \r
90       treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);\r
91       treeCanvas.setShowBootstrap(newtree.HasBootstrap());\r
92       treeCanvas.setShowDistances(newtree.HasDistances());\r
93       scrollPane.setViewportView(treeCanvas);\r
94 \r
95     }\r
96 \r
97 \r
98 \r
99 public String getText(String format) {\r
100   return null;\r
101 }\r
102 \r
103 \r
104   protected void saveMenu_actionPerformed(ActionEvent e)\r
105   {\r
106     JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.\r
107         getProperty("LAST_DIRECTORY"));\r
108     chooser.setFileView(new JalviewFileView());\r
109     chooser.setDialogTitle("Save tree as newick file");\r
110     chooser.setToolTipText("Save");\r
111     int value = chooser.showSaveDialog(null);\r
112     if (value == JalviewFileChooser.APPROVE_OPTION) {\r
113       String choice =  chooser.getSelectedFile().getPath();\r
114       jalview.bin.Cache.setProperty("LAST_DIRECTORY",  choice);\r
115       try{\r
116         jalview.io.NewickFile fout = new jalview.io.NewickFile(tree.getTopNode());\r
117         String output = fout.print(false,true); // distances only\r
118         java.io.PrintWriter out = new java.io.PrintWriter( new java.io.FileWriter( choice )  );\r
119         out.println(output);\r
120         out.close();\r
121       }\r
122       catch (Exception ex) {\r
123         ex.printStackTrace();\r
124       }\r
125     }\r
126   }\r
127 \r
128   protected void printMenu_actionPerformed(ActionEvent e)\r
129   {\r
130 \r
131     //Putting in a thread avoids Swing painting problems\r
132     treeCanvas.startPrinting();\r
133   }\r
134 \r
135   protected void fitToWindow_actionPerformed(ActionEvent e)\r
136   {\r
137     treeCanvas.fitToWindow = fitToWindow.isSelected();\r
138     repaint();\r
139   }\r
140 \r
141 \r
142   protected void fontSize_actionPerformed(ActionEvent e)\r
143   {\r
144     if( treeCanvas==null )\r
145      return;\r
146 \r
147    String size = fontSize.getText().substring( fontSize.getText().indexOf("-")+1);\r
148 \r
149    Object selection = JOptionPane.showInternalInputDialog(Desktop.desktop,\r
150                                "Select font size",\r
151                                "Font size",\r
152                                JOptionPane.QUESTION_MESSAGE,\r
153                                null, new String[]{"1","2","4","6","8","10","12","14","16","18","20"}\r
154                                ,"Font Size - "+size);\r
155    if(selection!=null)\r
156    {\r
157      fontSize.setText("Font Size - " + selection);\r
158 \r
159      int i = Integer.parseInt(selection.toString());\r
160      treeCanvas.setFontSize(i);\r
161    }\r
162     scrollPane.setViewportView(treeCanvas);\r
163 \r
164   }\r
165 \r
166   protected void distanceMenu_actionPerformed(ActionEvent e)\r
167   {\r
168     treeCanvas.setShowDistances(distanceMenu.isSelected());\r
169   }\r
170 \r
171   protected void bootstrapMenu_actionPerformed(ActionEvent e)\r
172   {\r
173     treeCanvas.setShowBootstrap(bootstrapMenu.isSelected());\r
174   }\r
175 \r
176 \r
177   protected void epsTree_actionPerformed(ActionEvent e)\r
178   {\r
179     int width = treeCanvas.getWidth(), height=treeCanvas.getHeight();\r
180     try\r
181     {\r
182       jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(jalview.bin.Cache.getProperty(\r
183           "LAST_DIRECTORY"), new String[]{"eps"}, "Encapsulated Postscript");\r
184       chooser.setFileView(new jalview.io.JalviewFileView());\r
185       chooser.setDialogTitle("Create EPS file from tree");\r
186       chooser.setToolTipText("Save");\r
187 \r
188       int value = chooser.showSaveDialog(this);\r
189       if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)\r
190         return;\r
191 \r
192       jalview.bin.Cache.setProperty("LAST_DIRECTORY",chooser.getSelectedFile().getPath());\r
193       FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());\r
194       EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width, height);\r
195 \r
196 \r
197       treeCanvas.draw(pg, width, height);\r
198 \r
199         pg.flush();\r
200         pg.close();\r
201     }\r
202     catch (Exception ex)\r
203     {\r
204       ex.printStackTrace();\r
205     }\r
206   }\r
207 \r
208   protected void pngTree_actionPerformed(ActionEvent e)\r
209  {\r
210   int width = treeCanvas.getWidth(), height = treeCanvas.getHeight();\r
211     try\r
212     {\r
213       jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(jalview.bin.Cache.getProperty(\r
214           "LAST_DIRECTORY"), new String[]{"png"}, "Portable network graphics");\r
215       chooser.setFileView(new jalview.io.JalviewFileView());\r
216       chooser.setDialogTitle("Create PNG image from tree");\r
217       chooser.setToolTipText("Save");\r
218 \r
219       int value = chooser.showSaveDialog(this);\r
220       if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)\r
221         return;\r
222 \r
223       jalview.bin.Cache.setProperty("LAST_DIRECTORY",chooser.getSelectedFile().getPath());\r
224       FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());\r
225 \r
226       BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);\r
227       Graphics png = bi.getGraphics();\r
228 \r
229       treeCanvas.draw(png, width, height);\r
230 \r
231         ImageIO.write(bi, "png", out);\r
232         out.close();\r
233     }\r
234     catch (Exception ex)\r
235     {\r
236       ex.printStackTrace();\r
237     }\r
238   }\r
239 \r
240 }\r