Package org.newdawn.slick.tools.peditor

Source Code of org.newdawn.slick.tools.peditor.ControlPanel

package org.newdawn.slick.tools.peditor;

import java.util.HashMap;

import org.newdawn.slick.particles.ConfigurableEmitter;
import org.newdawn.slick.particles.ConfigurableEmitter.RandomValue;
import org.newdawn.slick.particles.ConfigurableEmitter.Range;
import org.newdawn.slick.particles.ConfigurableEmitter.SimpleValue;
import org.newdawn.slick.particles.ConfigurableEmitter.Value;

/**
* The common bits between all the different control panels. This gives a way to link controls
* to data elements within the emitter. Plumbing it this way saves the effort of writing
* bespoke code for each editor type/
*
* @author kevin
*/
public abstract class ControlPanel extends DefaultPanel implements InputPanelListener {
  /** A map from visual control to data element */
  protected HashMap controlToData = new HashMap();
  /** A map from name to visual control */
  protected HashMap named = new HashMap();
  /** The emitter being configured */
  protected ConfigurableEmitter emitter;
  /** The offset on the y axis for components */
  protected int yPos;
 
  /**
   * Create a new panel for controls
   */
  public ControlPanel() {
    setLayout(null);
  }
 
  /**
   * Add a configurable value to the mapping table
   *
   * @param name The name of the control
   * @param valuePanel The panel used to set the value in the emitter
   */
  protected void addValue(String name, ValuePanel valuePanel) {
    named.put(name, valuePanel);
   
    valuePanel.setBounds(0,10+yPos,280,63);
    valuePanel.addListener(this);
    add(valuePanel);
   
    yPos+=63;
  }
 
  /**
   * Add a configurable range panel to the mapping table
   *
   * @param name The name of the control
   * @param minMax The panel used to set the range in the emitter
   */
  protected void addMinMax(String name, MinMaxPanel minMax) {
    named.put(name, minMax);
   
    minMax.setBounds(0,10+yPos,280,minMax.getOffset());
    minMax.addListener(this);
    add(minMax);
   
    yPos+=minMax.getOffset();
  }

  /**
   * Set the emitter to be configured
   *
   * @param emitter The emitter to be configured
   */
  public final void setTarget(ConfigurableEmitter emitter) {
    this.emitter = emitter;
   
    linkEmitterToFields(emitter);
  }
 
  /**
   * Link the fields in the emitter to the panels on this control panel
   *
   * @param emitter The emitter to be configured
   */
  protected abstract void linkEmitterToFields(ConfigurableEmitter emitter);
 
  /**
   * Link a emitter configurable range to a named component
   *
   * @param range The configurable range from the emitter
   * @param name The name of the component to link to
   */
  protected void link(Range range, String name) {
    link(range, (MinMaxPanel) named.get(name));
  }

  /**
   * Link a emitter configurable value to a named component
   *
   * @param value The configurable value from the emitter
   * @param name The name of the component to link to
   */
  protected void link(Value value, String name) {
    link(value, (ValuePanel) named.get(name));
  }
 
  /**
   * Link a emitter configurable value to a value panel
   *
   * @param value The configurable value from the emitter
   * @param panel The component to link against
   */
  private void link(Value value, ValuePanel panel) {
    controlToData.put(panel, value);
   
    if( value instanceof SimpleValue )
      panel.setValue((int) ((SimpleValue)value).getValue( 0 ));
    else if( value instanceof RandomValue )
      panel.setValue((int) ((RandomValue)value).getValue());
  }

  /**
   * Link a emitter configurable range to a value panel
   *
   * @param range The configurable range from the emitter
   * @param panel The component to link against
   */
  private void link(Range range, MinMaxPanel panel) {
    controlToData.put(panel, range);
    panel.setMax((int) range.getMax());
    panel.setMin((int) range.getMin());
    panel.setEnabledValue(range.isEnabled());
  }
 
  /**
   * @see org.newdawn.slick.tools.peditor.InputPanelListener#minMaxUpdated(org.newdawn.slick.tools.peditor.MinMaxPanel)
   */
  public void minMaxUpdated(MinMaxPanel source) {
    if (emitter == null) {
      return;
    }
   
    Range range = (Range) controlToData.get(source);
    if (range != null) {
      range.setMax(source.getMax());
      range.setMin(source.getMin());
      range.setEnabled(source.getEnabled());
    } else {
      throw new RuntimeException("No data set specified for the GUI source");
    }
  }

  /**
   * @see org.newdawn.slick.tools.peditor.InputPanelListener#valueUpdated(org.newdawn.slick.tools.peditor.ValuePanel)
   */
  public void valueUpdated(ValuePanel source) {
    if (emitter == null) {
      return;
    }
   
    Value value = (Value) controlToData.get(source);
    if (value != null) {
      if( value instanceof SimpleValue)
        ((SimpleValue)value).setValue( source.getValue());
      else if( value instanceof RandomValue )
        ((RandomValue)value).setValue( source.getValue());
    } else {
      throw new RuntimeException("No data set specified for the GUI source");
    }
  }
}
TOP

Related Classes of org.newdawn.slick.tools.peditor.ControlPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.