Formatting
[jalview.git] / src / jalview / gui / FontChooser.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2007 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 package jalview.gui;\r
20 \r
21 import java.awt.*;\r
22 import java.awt.event.*;\r
23 import javax.swing.*;\r
24 \r
25 import jalview.bin.*;\r
26 import jalview.jbgui.*;\r
27 \r
28 /**\r
29  * DOCUMENT ME!\r
30  *\r
31  * @author $author$\r
32  * @version $Revision$\r
33  */\r
34 public class FontChooser\r
35     extends GFontChooser\r
36 {\r
37   AlignmentPanel ap;\r
38   TreePanel tp;\r
39   Font oldFont;\r
40   boolean init = true;\r
41   JInternalFrame frame;\r
42 \r
43   /**\r
44    * Creates a new FontChooser object.\r
45    *\r
46    * @param ap DOCUMENT ME!\r
47    */\r
48   public FontChooser(TreePanel tp)\r
49   {\r
50     this.tp = tp;\r
51     ap = tp.treeCanvas.ap;\r
52     oldFont = tp.getTreeFont();\r
53     defaultButton.setVisible(false);\r
54     smoothFont.setEnabled(false);\r
55     init();\r
56   }\r
57 \r
58   /**\r
59    * Creates a new FontChooser object.\r
60    *\r
61    * @param ap DOCUMENT ME!\r
62    */\r
63   public FontChooser(AlignmentPanel ap)\r
64   {\r
65     oldFont = ap.av.getFont();\r
66     this.ap = ap;\r
67     init();\r
68   }\r
69 \r
70   void init()\r
71   {\r
72     frame = new JInternalFrame();\r
73     frame.setContentPane(this);\r
74 \r
75     smoothFont.setSelected(ap.av.antiAlias);\r
76 \r
77     if (tp != null)\r
78     {\r
79       Desktop.addInternalFrame(frame, "Change Font (Tree Panel)", 340, 170, false);\r
80     }\r
81     else\r
82     {\r
83       Desktop.addInternalFrame(frame, "Change Font", 340, 170, false);\r
84     }\r
85 \r
86     frame.setLayer(JLayeredPane.PALETTE_LAYER);\r
87 \r
88     String[] fonts = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment()\r
89         .getAvailableFontFamilyNames();\r
90 \r
91     for (int i = 0; i < fonts.length; i++)\r
92     {\r
93       fontName.addItem(fonts[i]);\r
94     }\r
95 \r
96     for (int i = 1; i < 51; i++)\r
97     {\r
98       fontSize.addItem(i + "");\r
99     }\r
100 \r
101     fontStyle.addItem("plain");\r
102     fontStyle.addItem("bold");\r
103     fontStyle.addItem("italic");\r
104 \r
105     fontName.setSelectedItem(oldFont.getName());\r
106     fontSize.setSelectedItem(oldFont.getSize() + "");\r
107     fontStyle.setSelectedIndex(oldFont.getStyle());\r
108 \r
109     FontMetrics fm = getGraphics().getFontMetrics(oldFont);\r
110     monospaced.setSelected(fm.getStringBounds("M", getGraphics()).getWidth()\r
111                            == fm.getStringBounds("|", getGraphics()).getWidth());\r
112 \r
113     init = false;\r
114   }\r
115 \r
116   public void smoothFont_actionPerformed(ActionEvent e)\r
117   {\r
118     ap.av.antiAlias = smoothFont.isSelected();\r
119     ap.annotationPanel.image = null;\r
120     ap.repaint();\r
121   }\r
122 \r
123   /**\r
124    * DOCUMENT ME!\r
125    *\r
126    * @param e DOCUMENT ME!\r
127    */\r
128   protected void ok_actionPerformed(ActionEvent e)\r
129   {\r
130     try\r
131     {\r
132       frame.setClosed(true);\r
133     }\r
134     catch (Exception ex)\r
135     {\r
136     }\r
137 \r
138     if (ap != null)\r
139     {\r
140       if (ap.getOverviewPanel() != null)\r
141       {\r
142         ap.getOverviewPanel().updateOverviewImage();\r
143       }\r
144     }\r
145   }\r
146 \r
147   /**\r
148    * DOCUMENT ME!\r
149    *\r
150    * @param e DOCUMENT ME!\r
151    */\r
152   protected void cancel_actionPerformed(ActionEvent e)\r
153   {\r
154     if (ap != null)\r
155     {\r
156       ap.av.setFont(oldFont);\r
157       ap.repaint();\r
158     }\r
159     else if (tp != null)\r
160     {\r
161       tp.setTreeFont(oldFont);\r
162     }\r
163     fontName.setSelectedItem(oldFont.getName());\r
164     fontSize.setSelectedItem(oldFont.getSize() + "");\r
165     fontStyle.setSelectedIndex(oldFont.getStyle());\r
166 \r
167     try\r
168     {\r
169       frame.setClosed(true);\r
170     }\r
171     catch (Exception ex)\r
172     {\r
173     }\r
174   }\r
175 \r
176   /**\r
177    * DOCUMENT ME!\r
178    */\r
179   void changeFont()\r
180   {\r
181     Font newFont = new Font(fontName.getSelectedItem().toString(),\r
182                             fontStyle.getSelectedIndex(),\r
183                             Integer.parseInt(fontSize.getSelectedItem().\r
184                                              toString()));\r
185     if (tp != null)\r
186     {\r
187       tp.setTreeFont(newFont);\r
188     }\r
189     else if (ap != null)\r
190     {\r
191       ap.av.setFont(newFont);\r
192       ap.fontChanged();\r
193     }\r
194 \r
195     FontMetrics fm = getGraphics().getFontMetrics(newFont);\r
196 \r
197     monospaced.setSelected(fm.getStringBounds("M", getGraphics()).getWidth()\r
198                            == fm.getStringBounds("|", getGraphics()).getWidth());\r
199 \r
200   }\r
201 \r
202   /**\r
203    * DOCUMENT ME!\r
204    *\r
205    * @param e DOCUMENT ME!\r
206    */\r
207   protected void fontName_actionPerformed(ActionEvent e)\r
208   {\r
209     if (init)\r
210     {\r
211       return;\r
212     }\r
213 \r
214     changeFont();\r
215   }\r
216 \r
217   /**\r
218    * DOCUMENT ME!\r
219    *\r
220    * @param e DOCUMENT ME!\r
221    */\r
222   protected void fontSize_actionPerformed(ActionEvent e)\r
223   {\r
224     if (init)\r
225     {\r
226       return;\r
227     }\r
228 \r
229     changeFont();\r
230   }\r
231 \r
232   /**\r
233    * DOCUMENT ME!\r
234    *\r
235    * @param e DOCUMENT ME!\r
236    */\r
237   protected void fontStyle_actionPerformed(ActionEvent e)\r
238   {\r
239     if (init)\r
240     {\r
241       return;\r
242     }\r
243 \r
244     changeFont();\r
245   }\r
246 \r
247   /**\r
248    * DOCUMENT ME!\r
249    *\r
250    * @param e DOCUMENT ME!\r
251    */\r
252   public void defaultButton_actionPerformed(ActionEvent e)\r
253   {\r
254     Cache.setProperty("FONT_NAME", fontName.getSelectedItem().toString());\r
255     Cache.setProperty("FONT_STYLE", fontStyle.getSelectedIndex() + "");\r
256     Cache.setProperty("FONT_SIZE", fontSize.getSelectedItem().toString());\r
257     Cache.setProperty("ANTI_ALIAS", Boolean.toString(smoothFont.isSelected()));\r
258   }\r
259 }\r