/*
* $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.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import VASSAL.build.Configurable;
/**
* A {@link Configurer} for configuring {@link Configurable} components
* (Is that as redundant as it sounds?)
* The invoking class must provide an array of Configurers,
* one for each attribute of the target Configurable object.
* It is usually easier for the target to implement AutoConfigurable
* and use the AutoConfigurer class.
*/
public class SimpleConfigurer extends Configurer
implements PropertyChangeListener {
private javax.swing.JPanel p;
private Configurer attConfig[];
private Configurable target;
public SimpleConfigurer(Configurable c, Configurer attConfigurers[]) {
super(null,c.getConfigureName());
attConfig = attConfigurers;
target = c;
setValue(target);
target.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
if (Configurable.NAME_PROPERTY.equals(evt.getPropertyName())) {
setName((String) evt.getNewValue());
}
}
});
}
public String getValueString() {
return target.getConfigureName();
}
public void setValue(String s) {
throw new UnsupportedOperationException(
"Can't set Configurable from String");
}
public Component getControls() {
if (p == null) {
p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
for (int i = 0; i < attConfig.length; ++i) {
p.add(attConfig[i].getControls());
// attConfig[i].addPropertyChangeListener(this);
}
}
return p;
}
public void propertyChange(final PropertyChangeEvent p1) {
for (int i = 0; i < attConfig.length; ++i) {
// System.err.println(attConfig[i].getName()+" = "+attConfig[i].getValue());
if (attConfig[i].getValue() == null) {
setValue((Object)null);
return;
}
setValue(target);
}
}
}