/** * 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(); }
/** * 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(); }
/** 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(); }
/** * 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(); }
/** * 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(); } }