2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
3 * Copyright (C) 2014 The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
11 * Jalview is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty
13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
17 * The Jalview Authors are detailed in the 'AUTHORS' file.
19 package jalview.appletgui;
22 import java.awt.event.*;
24 public class FontChooser extends Panel implements ActionListener,
37 public FontChooser(TreePanel tp)
48 oldFont = tp.getTreeFont();
52 public FontChooser(AlignmentPanel ap)
63 oldFont = ap.av.getFont();
69 String fonts[] = Toolkit.getDefaultToolkit().getFontList();
70 for (int i = 0; i < fonts.length; i++)
72 fontName.addItem(fonts[i]);
75 for (int i = 1; i < 31; i++)
77 fontSize.addItem(i + "");
80 fontStyle.addItem("plain");
81 fontStyle.addItem("bold");
82 fontStyle.addItem("italic");
84 fontName.select(oldFont.getName());
85 fontSize.select(oldFont.getSize() + "");
86 fontStyle.select(oldFont.getStyle());
88 Frame frame = new Frame();
91 jalview.bin.JalviewLite.addFrame(frame, "Change Font", 440, 115);
96 public void actionPerformed(ActionEvent evt)
98 if (evt.getSource() == ok)
100 ok_actionPerformed();
102 else if (evt.getSource() == cancel)
104 cancel_actionPerformed();
108 public void itemStateChanged(ItemEvent evt)
110 if (evt.getSource() == fontName)
112 fontName_actionPerformed();
114 else if (evt.getSource() == fontSize)
116 fontSize_actionPerformed();
118 else if (evt.getSource() == fontStyle)
120 fontStyle_actionPerformed();
124 protected void ok_actionPerformed()
126 frame.setVisible(false);
129 if (ap.getOverviewPanel() != null)
131 ap.getOverviewPanel().updateOverviewImage();
137 protected void cancel_actionPerformed()
141 ap.av.setFont(oldFont);
142 ap.paintAlignment(true);
146 tp.setTreeFont(oldFont);
147 tp.treeCanvas.repaint();
150 fontName.select(oldFont.getName());
151 fontSize.select(oldFont.getSize() + "");
152 fontStyle.select(oldFont.getStyle());
154 frame.setVisible(false);
157 private Font lastSelected = null;
159 private int lastSelStyle = 0;
161 private int lastSelSize = 0;
168 if (lastSelected == null)
170 // initialise with original font
171 lastSelected = oldFont;
172 lastSelSize = oldFont.getSize();
173 lastSelStyle = oldFont.getStyle();
176 Font newFont = new Font(fontName.getSelectedItem().toString(),
177 fontStyle.getSelectedIndex(), Integer.parseInt(fontSize
178 .getSelectedItem().toString()));
179 FontMetrics fm = getGraphics().getFontMetrics(newFont);
180 double mw = fm.getStringBounds("M", getGraphics()).getWidth(), iw = fm
181 .getStringBounds("I", getGraphics()).getWidth();
182 if (mw < 1 || iw < 1)
185 fontName.select(lastSelected.getName());
186 fontStyle.select(lastSelStyle);
187 fontSize.select("" + lastSelSize);
188 JVDialog d = new JVDialog(this.frame, "Invalid Font", true, 350, 200);
189 Panel mp = new Panel();
190 d.cancel.setVisible(false);
191 mp.setLayout(new FlowLayout());
193 "Font doesn't have letters defined\nso cannot be used\nwith alignment data."));
200 tp.setTreeFont(newFont);
204 ap.av.setFont(newFont);
207 // remember last selected
208 lastSelected = newFont;
211 protected void fontName_actionPerformed()
220 protected void fontSize_actionPerformed()
229 protected void fontStyle_actionPerformed()
238 Label label1 = new Label();
240 protected Choice fontSize = new Choice();
242 protected Choice fontStyle = new Choice();
244 Label label2 = new Label();
246 Label label3 = new Label();
248 protected Choice fontName = new Choice();
250 Button ok = new Button();
252 Button cancel = new Button();
254 Panel panel1 = new Panel();
256 Panel panel2 = new Panel();
258 Panel panel3 = new Panel();
260 BorderLayout borderLayout1 = new BorderLayout();
262 BorderLayout borderLayout2 = new BorderLayout();
264 BorderLayout borderLayout3 = new BorderLayout();
266 Panel panel4 = new Panel();
268 Panel panel5 = new Panel();
270 BorderLayout borderLayout4 = new BorderLayout();
272 private void jbInit() throws Exception
274 label1.setFont(new java.awt.Font("Verdana", 0, 11));
275 label1.setAlignment(Label.RIGHT);
276 label1.setText("Font: ");
277 this.setLayout(borderLayout4);
278 fontSize.setFont(new java.awt.Font("Verdana", 0, 11));
279 fontSize.addItemListener(this);
280 fontStyle.setFont(new java.awt.Font("Verdana", 0, 11));
281 fontStyle.addItemListener(this);
282 label2.setAlignment(Label.RIGHT);
283 label2.setFont(new java.awt.Font("Verdana", 0, 11));
284 label2.setText("Size: ");
285 label3.setAlignment(Label.RIGHT);
286 label3.setFont(new java.awt.Font("Verdana", 0, 11));
287 label3.setText("Style: ");
288 fontName.setFont(new java.awt.Font("Verdana", 0, 11));
289 fontName.addItemListener(this);
290 ok.setFont(new java.awt.Font("Verdana", 0, 11));
292 ok.addActionListener(this);
293 cancel.setFont(new java.awt.Font("Verdana", 0, 11));
294 cancel.setLabel("Cancel");
295 cancel.addActionListener(this);
296 this.setBackground(Color.white);
297 panel1.setLayout(borderLayout1);
298 panel2.setLayout(borderLayout3);
299 panel3.setLayout(borderLayout2);
300 panel5.setBackground(Color.white);
301 panel4.setBackground(Color.white);
302 panel1.setBackground(Color.white);
303 panel2.setBackground(Color.white);
304 panel3.setBackground(Color.white);
305 panel1.add(label1, BorderLayout.WEST);
306 panel1.add(fontName, BorderLayout.CENTER);
307 panel5.add(panel1, null);
308 panel5.add(panel3, null);
309 panel5.add(panel2, null);
310 panel2.add(label3, BorderLayout.WEST);
311 panel2.add(fontStyle, BorderLayout.CENTER);
312 panel3.add(label2, BorderLayout.WEST);
313 panel3.add(fontSize, BorderLayout.CENTER);
314 this.add(panel4, BorderLayout.SOUTH);
315 panel4.add(ok, null);
316 panel4.add(cancel, null);
317 this.add(panel5, BorderLayout.CENTER);