/*
* $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.build.module.gamepieceimage;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import VASSAL.configure.Configurer;
import VASSAL.tools.SequenceEncoder;
public class FontStyleConfigurer extends Configurer {
protected JPanel p;
protected JPanel fontPanel;
protected JComboBox fonts;
public FontStyleConfigurer(String key, String name) {
super(key, name);
}
public FontStyleConfigurer(String key, String name, FontStyle fontStyle) {
this(key, name);
setValue(fontStyle);
}
public FontStyleConfigurer(String key, String name, String styleName) {
this(key, name, FontManager.getFontManager().getFontStyle(styleName));
}
public String getValueString() {
return "";
}
public Font getValueFont() {
return ((FontStyle) value).getFont();
}
public FontStyle getValueFontStyle() {
return (FontStyle) value;
}
public java.awt.Component getControls() {
if (p == null) {
p = new JPanel();
fontPanel = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
Box box = Box.createHorizontalBox();
box.add(new JLabel(name));
box.add(fontPanel);
p.add(box);
}
buildFonts();
return p;
}
protected void buildFonts() {
if (fontPanel == null) {
return;
}
if (fonts != null) {
fontPanel.remove(fonts);
}
fonts = new JComboBox();
String[] s = FontManager.getFontManager().getFontNames();
for (int i = 0; i < s.length; i++) {
fonts.addItem(s[i]);
}
fonts.setSelectedItem(value == null ? "Default" : ((FontStyle) value).getConfigureName()); //$NON-NLS-1$
fontPanel.add(fonts);
ItemListener l = new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
updateValue();
}
};
fonts.addItemListener(l);
}
protected void updateValue() {
setValue(FontManager.getFontManager().getFontStyle((String) fonts.getSelectedItem()));
}
public void setValue(String s) {
setValue(FontManager.getFontManager().getFontStyle(s));
buildFonts();
}
public static FontStyle decode(String s) {
SequenceEncoder.Decoder sd = new SequenceEncoder.Decoder(s, '|');
return new FontStyle(sd.nextToken("Default"), FontConfigurer.decode(sd.nextToken(""))); //$NON-NLS-1$ //$NON-NLS-2$
}
public static String encode(FontStyle f) {
SequenceEncoder se = new SequenceEncoder(f.getConfigureName(), '|');
se.append(FontConfigurer.encode(f.getFont()));
return se.getValue();
}
}