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