header updated
[jalview.git] / src / jalview / appletgui / FontChooser.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2006 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 java.awt.*;\r
23 \r
24 import java.awt.event.*;\r
25 \r
26 public class FontChooser\r
27     extends Panel implements ActionListener, ItemListener\r
28 {\r
29   AlignmentPanel ap;\r
30   TreePanel tp;\r
31   Font oldFont;\r
32   boolean init = true;\r
33   Frame frame;\r
34 \r
35   public FontChooser(TreePanel tp)\r
36   {\r
37     try\r
38     {\r
39       jbInit();\r
40     }\r
41     catch (Exception e)\r
42     {\r
43       e.printStackTrace();\r
44     }\r
45 \r
46     this.tp = tp;\r
47     oldFont = tp.getTreeFont();\r
48     init();\r
49   }\r
50 \r
51   public FontChooser(AlignmentPanel ap)\r
52   {\r
53     try\r
54     {\r
55       jbInit();\r
56     }\r
57     catch (Exception e)\r
58     {\r
59       e.printStackTrace();\r
60     }\r
61 \r
62     this.ap = ap;\r
63     oldFont = ap.av.getFont();\r
64     init();\r
65   }\r
66 \r
67   void init()\r
68   {\r
69     String fonts[] = Toolkit.getDefaultToolkit().getFontList();\r
70     for (int i = 0; i < fonts.length; i++)\r
71     {\r
72       fontName.addItem(fonts[i]);\r
73     }\r
74 \r
75     for (int i = 1; i < 31; i++)\r
76     {\r
77       fontSize.addItem(i + "");\r
78     }\r
79 \r
80     fontStyle.addItem("plain");\r
81     fontStyle.addItem("bold");\r
82     fontStyle.addItem("italic");\r
83 \r
84     fontName.select(oldFont.getName());\r
85     fontSize.select(oldFont.getSize() + "");\r
86     fontStyle.select(oldFont.getStyle());\r
87 \r
88     Frame frame = new Frame();\r
89     this.frame = frame;\r
90     frame.add(this);\r
91     jalview.bin.JalviewLite.addFrame(frame, "Change Font", 440, 115);\r
92 \r
93     init = false;\r
94   }\r
95 \r
96   public void actionPerformed(ActionEvent evt)\r
97   {\r
98     if(evt.getSource()==ok)\r
99       ok_actionPerformed();\r
100     else if(evt.getSource()==cancel)\r
101       cancel_actionPerformed();\r
102   }\r
103 \r
104   public void itemStateChanged(ItemEvent evt)\r
105   {\r
106     if(evt.getSource()==fontName)\r
107       fontName_actionPerformed();\r
108     else if(evt.getSource()==fontSize)\r
109       fontSize_actionPerformed();\r
110     else if(evt.getSource()==fontStyle)\r
111       fontStyle_actionPerformed();\r
112   }\r
113 \r
114 \r
115   protected void ok_actionPerformed()\r
116   {\r
117     frame.setVisible(false);\r
118     if (ap != null)\r
119     {\r
120       if (ap.getOverviewPanel() != null)\r
121       {\r
122         ap.getOverviewPanel().updateOverviewImage();\r
123       }\r
124     }\r
125 \r
126   }\r
127 \r
128   protected void cancel_actionPerformed()\r
129   {\r
130     if(ap!=null)\r
131     {\r
132       ap.av.setFont(oldFont);\r
133       ap.repaint();\r
134     }\r
135     else if(tp!=null)\r
136     {\r
137       tp.setTreeFont(oldFont);\r
138       tp.treeCanvas.repaint();\r
139     }\r
140 \r
141     fontName.select(oldFont.getName());\r
142     fontSize.select(oldFont.getSize() + "");\r
143     fontStyle.select(oldFont.getStyle());\r
144 \r
145     frame.setVisible(false);\r
146   }\r
147 \r
148   void changeFont()\r
149   {\r
150     Font newFont = new Font(fontName.getSelectedItem().toString(),\r
151                             fontStyle.getSelectedIndex(),\r
152                             Integer.parseInt(fontSize.getSelectedItem().\r
153                                              toString())\r
154         );\r
155     if (ap != null)\r
156     {\r
157       ap.av.setFont(newFont);\r
158       ap.fontChanged();\r
159     }\r
160     else if(tp != null)\r
161     {\r
162       tp.setTreeFont(newFont);\r
163       }\r
164   }\r
165 \r
166   protected void fontName_actionPerformed()\r
167   {\r
168     if (init)\r
169     {\r
170       return;\r
171     }\r
172     changeFont();\r
173   }\r
174 \r
175   protected void fontSize_actionPerformed()\r
176   {\r
177     if (init)\r
178     {\r
179       return;\r
180     }\r
181     changeFont();\r
182   }\r
183 \r
184   protected void fontStyle_actionPerformed()\r
185   {\r
186     if (init)\r
187     {\r
188       return;\r
189     }\r
190     changeFont();\r
191   }\r
192   Label label1 = new Label();\r
193   protected Choice fontSize = new Choice();\r
194   protected Choice fontStyle = new Choice();\r
195   Label label2 = new Label();\r
196   Label label3 = new Label();\r
197   protected Choice fontName = new Choice();\r
198   Button ok = new Button();\r
199   Button cancel = new Button();\r
200   Panel panel1 = new Panel();\r
201   Panel panel2 = new Panel();\r
202   Panel panel3 = new Panel();\r
203   BorderLayout borderLayout1 = new BorderLayout();\r
204   BorderLayout borderLayout2 = new BorderLayout();\r
205   BorderLayout borderLayout3 = new BorderLayout();\r
206   Panel panel4 = new Panel();\r
207   Panel panel5 = new Panel();\r
208   BorderLayout borderLayout4 = new BorderLayout();\r
209 \r
210 \r
211   private void jbInit() throws Exception {\r
212       label1.setFont(new java.awt.Font("Verdana", 0, 11));\r
213       label1.setAlignment(Label.RIGHT);\r
214       label1.setText("Font: ");\r
215       this.setLayout(borderLayout4);\r
216       fontSize.setFont(new java.awt.Font("Verdana", 0, 11));\r
217       fontSize.addItemListener(this);\r
218       fontStyle.setFont(new java.awt.Font("Verdana", 0, 11));\r
219       fontStyle.addItemListener(this);\r
220       label2.setAlignment(Label.RIGHT);\r
221       label2.setFont(new java.awt.Font("Verdana", 0, 11));\r
222       label2.setText("Size: ");\r
223       label3.setAlignment(Label.RIGHT);\r
224       label3.setFont(new java.awt.Font("Verdana", 0, 11));\r
225       label3.setText("Style: ");\r
226       fontName.setFont(new java.awt.Font("Verdana", 0, 11));\r
227       fontName.addItemListener(this);\r
228       ok.setFont(new java.awt.Font("Verdana", 0, 11));\r
229       ok.setLabel("OK");\r
230       ok.addActionListener(this);\r
231       cancel.setFont(new java.awt.Font("Verdana", 0, 11));\r
232       cancel.setLabel("Cancel");\r
233       cancel.addActionListener(this);\r
234       this.setBackground(Color.white);\r
235       panel1.setLayout(borderLayout1);\r
236       panel2.setLayout(borderLayout3);\r
237       panel3.setLayout(borderLayout2);\r
238       panel5.setBackground(Color.white);\r
239       panel4.setBackground(Color.white);\r
240       panel1.setBackground(Color.white);\r
241       panel2.setBackground(Color.white);\r
242       panel3.setBackground(Color.white);\r
243       panel1.add(label1, BorderLayout.WEST);\r
244       panel1.add(fontName, BorderLayout.CENTER);\r
245       panel5.add(panel1, null);\r
246       panel5.add(panel3, null);\r
247       panel5.add(panel2, null);\r
248       panel2.add(label3, BorderLayout.WEST);\r
249       panel2.add(fontStyle, BorderLayout.CENTER);\r
250       panel3.add(label2, BorderLayout.WEST);\r
251       panel3.add(fontSize, BorderLayout.CENTER);\r
252       this.add(panel4, BorderLayout.SOUTH);\r
253       panel4.add(ok, null);\r
254       panel4.add(cancel, null);\r
255       this.add(panel5, BorderLayout.CENTER);\r
256   }\r
257 \r
258 }\r