/*
* $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;
import VASSAL.build.module.documentation.HelpFile;
import VASSAL.configure.Configurer;
import VASSAL.i18n.Translatable;
/**
* An object that implements the Configurable interface can, in
* addition to being built from a configuration XML file, be
* manipulated by the user directly in the VASSAL module editor via
* the Configuration window.
*/
public interface Configurable extends Translatable {
public static final String NAME_PROPERTY = "name"; //$NON-NLS-1$
/**
* Remove this component from its parent
*/
public void removeFrom(Buildable parent);
/**
* Remove a child component
*/
public void remove(Buildable child);
/**
* The name of this Configurable Object
*/
public String getConfigureName();
/**
* @return a HelpFilte describing how to use and configure
* this component
*/
public HelpFile getHelpFile();
/**
* @return an array of Configurer objects representing
* the Configurable children of this Configurable object
*/
public Configurable[] getConfigureComponents();
/**
* Return a {@link Configurer} object which can be used to set the
* attributes of this object
*/
public Configurer getConfigurer();
/**
* Return a list of valid sub-component Classes. If a Class
* appears in this list, then instances of that class may be added
* to this component from the Configuration Window.
*/
public Class[] getAllowableConfigureComponents();
/**
* Add a PropertyChangeListener. A PropertyChangeEvent should be fired
* with property name {@link #NAME_PROPERTY} when the value returned from
* {@link #getConfigureName} has changed
*/
public void addPropertyChangeListener(java.beans.PropertyChangeListener l);
}