/* * $Id$ * * Copyright (c) 2000-2003 by Rodney Kinney * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.configure; import java.awt.Dimension; import java.awt.Font; import java.awt.GraphicsEnvironment; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.BoxLayout; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import VASSAL.tools.ScrollPane; /** * A Configurer for {@link Font} values */ public class FontConfigurer extends Configurer { private JPanel p; private JComboBox size; private JComboBox family; private int[] sizes; public FontConfigurer(String key, String name) { this(key, name, new Font("SansSerif", Font.PLAIN, 12)); } public FontConfigurer(String key, String name, Font val) { this(key, name, val, new int[]{9, 10, 11, 12, 15, 18}); } public FontConfigurer(String key, String name, Font val, int[] sizes) { super(key, name, val); this.sizes = sizes; } public String getValueString() { return encode((Font) value); } public void setValue(String s) { setValue(decode(s)); } public java.awt.Component getControls() { if (p == null) { p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); p.add(new JLabel(name)); family = new JComboBox(); String[] s = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); for (int i = 0; i < s.length; ++i) { family.addItem(s[i]); } family.setSelectedItem(value == null ? "SansSerif" : ((Font) value).getFamily()); family.setMaximumSize(new Dimension(family.getMaximumSize().width,family.getPreferredSize().height)); p.add(family); size = new JComboBox(); for (int i = 0; i < sizes.length; ++i) { size.addItem(sizes[i] + ""); } size.setSelectedItem(value == null ? sizes[sizes.length / 2] + "" : ((Font) value).getSize() + ""); size.setMaximumSize(new Dimension(size.getMaximumSize().width,size.getPreferredSize().height)); p.add(size); ItemListener l = new ItemListener() { public void itemStateChanged(ItemEvent evt) { setValue(new Font((String) family.getSelectedItem(), Font.PLAIN, Integer.parseInt((String) size.getSelectedItem()))); } }; size.addItemListener(l); family.addItemListener(l); } return p; } public static Font decode(String s) { int i = s.indexOf(','); return new Font(s.substring(0, i), Font.PLAIN, Integer.parseInt(s.substring(i + 1))); } public static String encode(Font f) { return f.getName() + "," + f.getSize(); } public static void main(String args[]) { final JFrame f = new JFrame(); f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS)); FontConfigurer c = new FontConfigurer("a", "Font: ", null, new int[]{4, 5, 6, 13}); f.add(c.getControls()); final JTextArea tf = new JTextArea(); tf.setText("The quick brown fox jumps over the lazy dog."); f.add(new ScrollPane(tf)); c.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { Font font = (Font) evt.getNewValue(); FontConfigurer fc = new FontConfigurer(null, null, font); fc.setValue(fc.getValueString()); font = (Font) fc.getValue(); tf.setFont(font); f.pack(); } }); f.pack(); f.setVisible(true); } }