Package anglecommands

Source Code of anglecommands.AngleCommands

package anglecommands;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JLabel;

import lipstone.joshua.parser.Parser;
import lipstone.joshua.parser.Tokenizer;
import lipstone.joshua.parser.exceptions.ParserException;
import lipstone.joshua.parser.exceptions.PluginConflictException;
import lipstone.joshua.parser.plugin.ParserPlugin;
import lipstone.joshua.parser.plugin.helpdata.Command;
import lipstone.joshua.parser.plugin.settings.ParserSettingsComboBox;
import lipstone.joshua.parser.plugin.types.CommandPlugin;
import lipstone.joshua.parser.plugin.types.SettingsPlugin;
import lipstone.joshua.parser.util.AngleType;
import lipstone.joshua.parser.util.ConsCell;
import lipstone.joshua.parser.util.ConsType;

public class AngleCommands extends ParserPlugin implements CommandPlugin, SettingsPlugin {
 
  @Override
  public void loadCommands() throws PluginConflictException {
    addCommand(new Command("setAngle", "set the angle to Degrees, Radians, or Grads", this));
    ConsCell temp = getData("angle");
    AngleType angle = (temp == null) ? parser.getAngleType() : parser.getAngleType(temp.toString());
    parser.setAngleType(angle);
    addCommand(new Command("showAngle", "shows the active angle measurment system", this));
  }
 
  @Override
  public ConsCell runCommand(String command, ArrayList<ConsCell> arguments) throws ParserException {
    if (command.equals("setAngle") && arguments.size() == 1) {
      String arg = arguments.get(0).toString().trim();
      if (parser.getAngleType(arg) == null && arg.length() > 1) {
        if (arg.charAt(0) > 64 && arg.charAt(0) < 91)
          arg = ((char) (arg.charAt(0) + 32)) + arg.substring(1);
        else if (arg.charAt(0) > 96 && arg.charAt(0) < 123)
          arg = ((char) (arg.charAt(0) - 32)) + arg.substring(1);
        arguments.set(0, Tokenizer.tokenizeString(arg));
      }
      if (parser.getAngleType(arg) != null) {
        parser.setAngleType(parser.getAngleType(arg));
        saveData("angle", arguments.get(0));
        return new ConsCell("Set the angle type to " + arg, ConsType.IDENTIFIER);
      }
      else
        throw new ParserException(arguments.get(0) + " is not a valid angle type.  Valid angle types are: Degrees, Radians, Grads", this);
    }
    if (command.equals("showAngle") && arguments.size() == 0)
      return new ConsCell("The current angle type is " + parser.getAngleType() + ".", ConsType.IDENTIFIER);
    return null;
  }
 
  @Override
  public void unloadCommands() {/*Nothing to do here*/}
 
  @Override
  public void loadSettings() {
    getSettingsPanel().setName("Angles");
    getSettingsPanel().add(new JLabel("Angle Type: "));
    final ParserSettingsComboBox<AngleType> angleBox = new ParserSettingsComboBox<AngleType>("angle", this, false, parser.Degrees, parser.Radians, parser.Grads) {
      @Override
      public void onEnter() {
        super.onEnter();
        parser.setAngleType(parser.getAngleType(getValue().toString()));
      }
    };
    addSettingsItem(angleBox);
    parser.addPropertyListener(new PropertyChangeListener() {
     
      @Override
      public void propertyChange(PropertyChangeEvent evt) {
        if (((DefaultComboBoxModel<AngleType>) angleBox.getGUIItem().getModel()).getIndexOf((AngleType) evt.getNewValue()) == -1)
          ((DefaultComboBoxModel<AngleType>) angleBox.getGUIItem().getModel()).addElement((AngleType) evt.getNewValue());
      }
     
    }, Parser.AngleTypeAdded);
    parser.addPropertyListener(new PropertyChangeListener() {
     
      @Override
      public void propertyChange(PropertyChangeEvent evt) {
        ((DefaultComboBoxModel<AngleType>) angleBox.getGUIItem().getModel()).removeElement((AngleType) evt.getOldValue());
      }
     
    }, Parser.AngleTypeRemoved);
    parser.addPropertyListener(new PropertyChangeListener() {
     
      @Override
      public void propertyChange(PropertyChangeEvent evt) {
        angleBox.getGUIItem().setSelectedItem(evt.getNewValue());
      }
    }, parser.AngleTypeChanged);
  }
 
  @Override
  public void unloadSettings() {}
 
}
TOP

Related Classes of anglecommands.AngleCommands

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.