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