changes to JalviewFileChooser
[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     public String getText(String format)\r
98     {\r
99       return null;\r
100     }\r
101 \r
102     public void saveAsNewick_actionPerformed(ActionEvent e)\r
103     {\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",  chooser.getSelectedFile().getParent());\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"),\r
183               new String[]{"eps"},\r
184               new String[]{"Encapsulated Postscript"},\r
185               "Encapsulated Postscript");\r
186       chooser.setFileView(new jalview.io.JalviewFileView());\r
187       chooser.setDialogTitle("Create EPS file from tree");\r
188       chooser.setToolTipText("Save");\r
189 \r
190       int value = chooser.showSaveDialog(this);\r
191       if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)\r
192         return;\r
193 \r
194       jalview.bin.Cache.setProperty("LAST_DIRECTORY",chooser.getSelectedFile().getParent());\r
195       FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());\r
196       EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width, height);\r
197 \r
198 \r
199       treeCanvas.draw(pg, width, height);\r
200 \r
201         pg.flush();\r
202         pg.close();\r
203     }\r
204     catch (Exception ex)\r
205     {\r
206       ex.printStackTrace();\r
207     }\r
208   }\r
209 \r
210   protected void pngTree_actionPerformed(ActionEvent e)\r
211  {\r
212   int width = treeCanvas.getWidth(), height = treeCanvas.getHeight();\r
213     try\r
214     {\r
215       jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(\r
216           jalview.bin.Cache.getProperty("LAST_DIRECTORY"),\r
217           new String[] {"png"},\r
218           new String[] {"Portable network graphics"},\r
219           "Portable network graphics");\r
220 \r
221       chooser.setFileView(new jalview.io.JalviewFileView());\r
222       chooser.setDialogTitle("Create PNG image from tree");\r
223       chooser.setToolTipText("Save");\r
224 \r
225       int value = chooser.showSaveDialog(this);\r
226       if (value != jalview.io.JalviewFileChooser.APPROVE_OPTION)\r
227         return;\r
228 \r
229       jalview.bin.Cache.setProperty("LAST_DIRECTORY",chooser.getSelectedFile().getParent());\r
230       FileOutputStream out = new FileOutputStream(chooser.getSelectedFile());\r
231 \r
232       BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);\r
233       Graphics png = bi.getGraphics();\r
234 \r
235       treeCanvas.draw(png, width, height);\r
236 \r
237         ImageIO.write(bi, "png", out);\r
238         out.close();\r
239     }\r
240     catch (Exception ex)\r
241     {\r
242       ex.printStackTrace();\r
243     }\r
244   }\r
245 \r
246 }\r