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