Beispiel #1
0
 /**
  * Erstellt einen neuen Zustand an der gegebenen Position.
  *
  * @param x x-Koordinate des Zustands
  * @param y y-Koordinate des Zustands
  */
 public void createState(int x, int y) {
   StateObject newState = new StateObject(false, false);
   newState.setCoordinates(x, y);
   getFsmProgram().addState(newState);
   this.modified();
   this.automataPanel.refresh();
 }
Beispiel #2
0
 /**
  * Löscht einen Zustand, sowie alle dazugehörigen Transitions.
  *
  * @param state Zustand der gelöscht werden soll.
  */
 public void deleteState(StateObject state) {
   this.getFsmProgram().removeState(state);
   for (StateObject transitionState : this.getFsmProgram().getAllStates()) {
     TransitionObject transition = transitionState.getTransitionWithToState(state);
     if (transition != null) {
       transitionState.removeChildFromParent(transition);
     }
   }
   this.modified();
   this.automataPanel.refresh();
 }
Beispiel #3
0
 /** Zoomt aus dem endlichen Automaten heraus. */
 public void zoomOut() {
   if (getFsmProgram().getAllStates().size() > 0) {
     getFsmProgram().getAllStates().get(0).setZoomFactor(false);
   }
   for (StateObject state : getFsmProgram().getAllStates()) {
     state.updateTextCoordinates();
   }
   for (CommentObject comment : getFsmProgram().getAllComments()) {
     comment.setTextCoordinates(comment.getName());
   }
   this.automataPanel.refresh();
 }
Beispiel #4
0
  /**
   * Ordnet den Graphen des endlichen Automaten an. Die Zustände werden dabei in einem Kreis
   * angeordnet.
   */
  public void layoutGraph() {
    double height = this.automataPanel.getHeight();
    double width = this.automataPanel.getWidth();
    double radius = 0;
    if (height < width) {
      radius = (height / 2) - 50;
    } else {
      radius = (width / 2) - 50;
    }
    double angle_step = 360.0 / getFsmProgram().getAllStates().size();
    double angle = 0;

    for (StateObject state : getFsmProgram().getAllStates()) {
      state.setCoordinates(xCoordinate(radius, width, angle), yCoordinate(radius, height, angle));
      angle += angle_step;
    }
    this.modified();
    this.automataPanel.refresh();
  }
Beispiel #5
0
 /**
  * Modifiziert einen Zustand.
  *
  * @param state Zustand, der modifiziert werden soll.
  * @param setInitial sagt aus, ob er initial sein soll.
  * @param setFinalNew sagt aus, ob er final oder nicht final gesetzt werden soll.
  * @param x neue x-Koordinate des Zustands.
  * @param y neue y-Koordinate des Zustands.
  */
 public void modifyState(
     StateObject state, boolean setInitial, boolean setFinalNew, int x, int y) {
   boolean hasChanged = false;
   if (state.isInitial() != true && setInitial) {
     state.setInitial(true);
     this.getFsmProgram().getStartState().setInitial(false);
     this.getFsmProgram().setStartState(state);
     hasChanged = true;
   }
   if (setFinalNew) {
     state.setFinal(!state.isFinal());
     hasChanged = true;
   }
   if (state.getXCoordinate() != x || state.getYCoordinate() != y) {
     state.setCoordinates(x, y);
     hasChanged = true;
   }
   if (hasChanged) {
     this.modified();
     this.automataPanel.refresh();
   }
 }