package slogo.controller; public class SimulationController implements LogoViewAPI { public SimulationController(VBox root, Simulation simulation, Scene scene) public void toggleDarkLight() public void postMoveAbsoluteEvent(MoveAbsoluteEvent event, int animalId) public void postPreviewLineEvent(PreviewLineEvent event, int animalId) public void postPenConfigEvent(PenConfigEvent event, int animalId) public void postAddAnimalEvent(int id) public void postConsoleEvent(ConsoleOutputEvent log) public void postHistoryEvent(HistoryOutputEvent event) public void postSetAnimalImageEvent(String imagePath) public void postClearLinesEvent(int animalId) public void sendCommand(String command) public void loadCommand(String command) public void sendPreviewLineCommand(String command) public void sendSelectAnimal(int animalId) public void sendDeselectAnimal(int animalId) public void sendRemoveAnimal(int animalId) public void sendAddAnimal() public void accept(Integer integer) public Zoo getZoo() } package slogo.controller; public interface LogoViewAPI { void postMoveAbsoluteEvent(MoveAbsoluteEvent event, int animalId); void postPenConfigEvent(PenConfigEvent event, int animalId); void postAddAnimalEvent(int animalId); void postConsoleEvent(ConsoleOutputEvent event); void postHistoryEvent(HistoryOutputEvent event); void postClearLinesEvent(int animalId); void sendSelectAnimal(int animalId); void sendDeselectAnimal(int animalId); void sendRemoveAnimal(int animalId); } package slogo; public class Main extends Application { public void start(Stage stage) } package slogo.model.interpreter; public class Environment { public Environment() public void linkSimulation(LogoSimulation sim) public Token getLocalVariable(String name) public void addVariable(String name, Token val) public void createLocalScope() public void endLocalScope() public void sendMoveEvent(MoveRelativeEvent m) public void sendLookTowardsEvent(MoveAbsoluteEvent m) public void sendPenEvent(PenConfigEvent p) public void sendMoveAbsoluteEvent(MoveAbsoluteEvent m) public void sendAnimalEvent(AnimalEvent a) public void sendPrintEvent(String s) public AnimalPosQuery queryAnimalPos() public AnimalPosQuery queryAnimalPos(int id) public AnimalPenQuery queryAnimalPen() public AnimalPenQuery queryAnimalPen(int id) public AnimalViewQuery queryAnimalView() public AnimalViewQuery queryAnimalView(int id) public AnimalPosQuery getAnimalPos() public AnimalPosQuery getAnimalPos(int ID) public AnimalPenQuery getAnimalPen() public AnimalPenQuery getAnimalPen(int id) public AnimalViewQuery getAnimalView() public AnimalViewQuery getAnimalView(int id) public void postMoveEvent(MoveRelativeEvent event) public void postMoveAbsoluteEvent(MoveAbsoluteEvent event) public void postPenConfigEvent(PenConfigEvent event) public void postLookTowardsEvent(MoveAbsoluteEvent event) public void postAnimalEvent(AnimalEvent event) public void postPrint(String s) } package slogo.model.interpreter; public class Parser { public Parser(List tokens) public Parser(ExpressionToken expr) public List parse(Environment env) } package slogo.model.interpreter; public class Interpreter { public Interpreter() public void interpret(String input) public void loadCode(String input) public void step() public void link(LogoSimulation sim) } package slogo.model.interpreter.exceptions; public class CannotBeEvaluatedException extends RuntimeException{ public CannotBeEvaluatedException(String msg) } package slogo.model.interpreter.exceptions; public class IncorrectArgumentCountException extends RuntimeException{ public IncorrectArgumentCountException(String name, int actual, int expected) } package slogo.model.interpreter.exceptions; public class InvalidSyntaxException extends RuntimeException{ public InvalidSyntaxException(String val) } package slogo.model.interpreter.exceptions; public class TokenNotRecognizedException extends RuntimeException { public TokenNotRecognizedException(String val) } package slogo.model.interpreter.exceptions; public class IllegalTokenTypeException extends RuntimeException{ public IllegalTokenTypeException(Token val) public IllegalTokenTypeException(Token val, Token op) public IllegalTokenTypeException(String errorMsg) } package slogo.model.interpreter; public class Tokenizer { public Tokenizer() public Tokenizer(String patternLanguage) public String getSymbol (String text) throws IllegalArgumentException public List getTokens() public List tokenize (String program) public void setLanguage(String language) } package slogo.model.interpreter; public class Evaluator { public Evaluator(Environment env) public void load(List asts) public void evaluate() public Token step() } package slogo.model.interpreter.commands; public class Tangent extends OperatorToken { public Tangent() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class LessThan extends OperatorToken { public LessThan() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Quotient extends OperatorToken { public Quotient() public ValueToken evaluate(Environment env) } package slogo.model.interpreter.commands; public class Show extends OperatorToken { public Show() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Pi extends OperatorToken { public Pi() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Home extends OperatorToken { public Home() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class Heading extends OperatorToken { public Heading() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class Product extends OperatorToken { public Product() public ValueToken evaluate(Environment env) } package slogo.model.interpreter.commands; public class Remainder extends OperatorToken { public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Right extends OperatorToken { public Right() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Global extends OperatorToken { public Global() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Repeat extends OperatorToken { public Repeat() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class UserInstruction extends OperatorToken { public UserInstruction(String name, ExpressionToken argTokens, ExpressionToken exprs) public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class XCoordinate extends OperatorToken { public XCoordinate() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class SquareRoot extends OperatorToken { public SquareRoot() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class PenUp extends OperatorToken { public PenUp() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Difference extends OperatorToken { public Difference() public ValueToken evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class ArcTangent extends OperatorToken { public ArcTangent() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class SetTowards extends OperatorToken { public SetTowards() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class Sum extends OperatorToken { public Sum() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class YCoordinate extends OperatorToken { public YCoordinate() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class IsPenDown extends OperatorToken { public IsPenDown() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class SetHeading extends OperatorToken { public SetHeading() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class RandomRange extends OperatorToken { public RandomRange() public ValueToken evaluate(Environment env) } package slogo.model.interpreter.commands; public class MakeVariable extends OperatorToken { public MakeVariable() public ValueToken evaluate(Environment env) } package slogo.model.interpreter.commands; public class Cosine extends OperatorToken { public Cosine() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class Random extends OperatorToken { public Random() public ValueToken evaluate(Environment env) } package slogo.model.interpreter.commands; public class And extends OperatorToken { public And() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class NotEqual extends OperatorToken { public NotEqual() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Forward extends OperatorToken { public Forward() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class Left extends OperatorToken { public Left() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class GreaterEqual extends OperatorToken { public GreaterEqual() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class Sine extends OperatorToken { public Sine() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class SetPosition extends OperatorToken { public SetPosition() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class Power extends OperatorToken { public Power() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Minus extends OperatorToken { public Minus() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Not extends OperatorToken { public Not() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class DoTimes extends OperatorToken { public DoTimes() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class PenDown extends OperatorToken { public PenDown() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class GreaterThan extends OperatorToken { public GreaterThan() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class ShowTurtle extends OperatorToken { public ShowTurtle() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class IfElse extends OperatorToken { public IfElse() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class IsShowing extends OperatorToken { public IsShowing() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class LessEqual extends OperatorToken { public LessEqual() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class If extends OperatorToken { public If() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class Equal extends OperatorToken { public Equal() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class ClearScreen extends OperatorToken { public ClearScreen() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class NaturalLog extends OperatorToken { public NaturalLog() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class Backward extends OperatorToken { public Backward() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class Or extends OperatorToken { public Or() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class MakeUserInstruction extends OperatorToken { public MakeUserInstruction() public Token evaluate(Environment env) } package slogo.model.interpreter.commands; public class HideTurtle extends OperatorToken { public HideTurtle() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.commands; public class For extends OperatorToken { public For() public Token evaluate(Environment env) throws IllegalArgumentException } package slogo.model.interpreter.tokens; public class SetToken extends Token { public SetToken(OperatorToken head) public void passTokens(List tokens) public Token get(int i) public Token evaluate(Environment env) public String toString() } package slogo.model.interpreter.tokens; public class ValueToken extends Token { public ValueToken(T value) public Token evaluate(Environment env) public String toString() } package slogo.model.interpreter.tokens; public class VariableToken extends Token{ public VariableToken(String name) public Token evaluate(Environment env) public String toString() } package slogo.model.interpreter.tokens; public class ParenthesisToken extends Token implements OpenCloseToken{ public ParenthesisToken(String value) public Token evaluate(Environment env) public String toString() public boolean isOpen() } package slogo.model.interpreter.tokens; public class CommandToken extends Token{ public CommandToken(String name) public Token evaluate(Environment env) } package slogo.model.interpreter.tokens; abstract public class OperatorToken extends Token { public OperatorToken(String name) public OperatorToken(int numArguments, String name) public void passArguments(Token[] args) public int getNumArgs() public abstract Token evaluate(Environment env) throws IllegalArgumentException; protected void throwError(RuntimeException e) protected void checkArgumentWithSubtype(Token t, Class type, String subtype, String errorMsg) throws IllegalArgumentException protected void checkArgument(Token t, Class type, String errorMsg) throws IllegalArgumentException protected Token getArg(int index) public String toString() } package slogo.model.interpreter.tokens; public interface OpenCloseToken { public boolean isOpen(); } package slogo.model.interpreter.tokens; public class BracketToken extends Token implements OpenCloseToken{ public BracketToken(String name, String value) public Token evaluate(Environment env) public String toString() public boolean isOpen() } package slogo.model.interpreter.tokens; public class ExpressionToken extends Token implements Iterable{ public ExpressionToken() public void passTokens(List tokens) public void addToken(Token t) public int size() public Token get(int i) public Token evaluate(Environment env) public Iterator iterator() public String toString() } package slogo.model.interpreter.tokens; public class Token { public Token(String type) public Token(String type, String subtype) public Token(String type, String subtype, int line) public Token evaluate(Environment env) public String toString() } package slogo.model; public class Simulation implements LogoSimulation, LogoModelAPI{ public Simulation() public AnimalPosQuery getAnimalPos() public AnimalPosQuery getAnimalPos(int id) public AnimalPenQuery getAnimalPen() public AnimalPenQuery getAnimalPen(int id) public AnimalViewQuery getAnimalView() public AnimalViewQuery getAnimalView(int id) public void postMoveEvent(MoveRelativeEvent event) public void postMoveAbsoluteEvent(MoveAbsoluteEvent event) public void postPenConfigEvent(PenConfigEvent event) public void postLookTowardsEvent(MoveAbsoluteEvent event) public void postAnimalEvent(AnimalEvent event) public void postPrint(String s) public void postNewScript(SendCommandEvent event) public void postAddAnimalEvent(AddAnimalEvent event) public void postSelectAnimal(int animalId) public void deselectAnimal(int animalId) public void linkController(LogoViewAPI controller) } package slogo.model; public interface LogoModelAPI { void postNewScript(SendCommandEvent event); void postAddAnimalEvent(AddAnimalEvent event); void postSelectAnimal(int animalId); void deselectAnimal(int animalId); void linkController(LogoViewAPI controller); } package slogo.model; public class EmptyController implements LogoViewAPI { public void postMoveAbsoluteEvent(MoveAbsoluteEvent event, int animalId) public void postPenConfigEvent(PenConfigEvent event, int animalId) public void postAddAnimalEvent(int id) public void postConsoleEvent(ConsoleOutputEvent output) public void postHistoryEvent(HistoryOutputEvent output) public void postClearLinesEvent(int id) public void sendSelectAnimal(int animalId) public void sendDeselectAnimal(int animalId) public void sendRemoveAnimal(int animalId) } package slogo.model; public class ModelAnimal { public ModelAnimal() public ModelAnimal(int id) public void getPenConfigEvent(PenConfigEvent event) public void getMoveRelativeEvent(MoveRelativeEvent event) public void getMoveAbsoluteEvent(MoveAbsoluteEvent event) public void getLookTowardsEvent(MoveAbsoluteEvent event) public void getAnimalEvent(AnimalEvent event) public void setSelected(boolean selected) public AnimalPosQuery getPosQuery() public AnimalPenQuery getPenQuery() public AnimalViewQuery getViewQuery() public boolean isSelected() public boolean isShowing() } package slogo.model; public class XMLBuilder { } package slogo.model; public class XMLReader { public XMLReader(String path) public String getParam(String s) } package slogo.model; public interface LogoSimulation { * Gets the animal position query (position, rotation) for the first currently selected animal. AnimalPosQuery getAnimalPos(); * Gets the animal position query (position, rotation) for the animal with the given id. AnimalPosQuery getAnimalPos(int id); * Gets the animal pen query (pen up/down, pen color) for the first currently selected animal. AnimalPenQuery getAnimalPen(); * Gets the animal pen query (pen up/down, pen color) for the animal with the given id. AnimalPenQuery getAnimalPen(int id); * Gets the animal view query (visible, shape) for the first currently selected animal. AnimalViewQuery getAnimalView(); * Gets the animal view query (visible, shape) for the animal with the given id. AnimalViewQuery getAnimalView(int id); void postMoveEvent(MoveRelativeEvent event); void postMoveAbsoluteEvent(MoveAbsoluteEvent event); void postPenConfigEvent(PenConfigEvent event); void postLookTowardsEvent(MoveAbsoluteEvent event); * Called by the interpreter when an animal event (showing, color) is generated. void postAnimalEvent(AnimalEvent event); void postPrint(String s); } package slogo.view.tabs; public class HistoryTab extends Tab { public HistoryTab(SimulationController controller) public HistoryView getHistoryView() } package slogo.view.tabs; public class ConsoleTab extends Tab { public ConsoleTab() public ConsoleView getConsoleView() } package slogo.view.tabs; public class ZooTab extends Tab { public ZooTab(SimulationController controller) public void updateAnimalPos(int id, MoveAbsoluteEvent event) public void updatePen(int id, PenConfigEvent event) public void addAnimal(int id) public ZooTabView getZooView() } package slogo.view.subElements; public class ToolBarView extends HBox { public ToolBarView(int width, int height, SimulationController control) } package slogo.view.subElements; public class IDEView extends VBox { public IDEView(int width, int height, SimulationController control) public CommandInputView getCommandInputView() public Pane getPane() public Zoo getZoo() public void sendCommand() } package slogo.view.subElements; public class SlogoTabPane extends TabPane{ public SlogoTabPane(int width, int height, SimulationController controller) public ConsoleTab getConsoleTab() public HistoryTab getHistoryTab() public ZooTab getZooTab() } package slogo.view; public class UIContainer { public UIContainer(VBox root, SimulationController controller) public Zoo getZoo() public ZooTab getZooTabView() public CommandInputView getCommandInputView() public IDEView getIDEView() public SlogoTabPane getSlogoTabPane() } package slogo.view.subViews; public class LineView extends Line { public LineView(double startX, double startY, double endX, double endY) public LineView(LineView other) } package slogo.view.subViews; public class HistoryView extends ScrollPane { public HistoryView(SimulationController controller) public void addText(String text) } package slogo.view.subViews; public class Zoo { public Zoo(Pane pane, double paneSize) public void newAnimal(String imagePath, double xCoord, double yCoord, int animalID, Pane pane) public void deleteAnimal(int animalID, Pane pane) public void clear(Pane pane) public void moveAnimalAbsolute(int animalID, double xCoord, double yCoord, Pane pane) public void rotateAnimalAbsolute(int animalID, double angle) public void createPreviewLine(int animalID, double startXStandard, double startYStandard, double endXStandard, double endYStandard, Pane pane) public int size() public void configurePen(int animalID, PenConfiguration pen) public void setSelectedAnimalsImage(String imagePath) public void selectAnimal(int animalID) public void deselectAnimal(int animalID) public void clearLines(Pane pane, int animalID) public void setAnimalImages(ImageView imageView) } package slogo.view.subViews; public class ZooTabView extends ScrollPane { public ZooTabView(SimulationController controller) public void updateAnimal(int id, MoveAbsoluteEvent event) public void updatePen(int id, PenConfigEvent event) public void addAnimal(int id) public void removeAnimal(int id) public AnimalStats(int id) public void moveAbsolute(MoveAbsoluteEvent event) public void penConfig(PenConfigEvent event) } package slogo.view.subViews; public class PreviewLineView extends LineView{ public PreviewLineView(double startX, double startY, double endX, double endY) } package slogo.view.subViews; public class ConsoleView extends TextArea{ public ConsoleView(int width, int height) public void clearOutput() public void addText(String text) } package slogo.view.subViews; public class DropdownFactory { public DropdownFactory(SimulationController controller) public ComboBox createDefaultDropdown(String property) } package slogo.view.subViews; public class AnimalView extends ImageView { public AnimalView(String imagePath, double xStandard, double yStandard, double paneSize) public void setCoords(double xStandard, double yStandard) public void changeImage(String imagePath) public void rotateAbsolute(double angle) public void moveAbsolute(double xStandard, double yStandard, Pane pane) public void delete(Pane pane) public double convertToCanvasX(double x) public double convertToStandardX(double x) public void togglePenDown() public void setPenColor(Color color) public void setPenThickness(double thickness) public void configurePen(PenConfiguration pen) public void drawPreviewLine(double startXStandard, double startYStandard, double endXStandard, double endYStandard, Pane pane) public void clearLines(Pane pane) public void renderSelect() public void renderDeselect() public void previewLines() public void unHighlightLines() public void highlightLines() public void updateImage(ImageView imageView) } package slogo.view.subViews; public interface VoidNoInputFunction { void go(); public CommandInputView(VoidNoInputFunction sendCommandFunction) { super(); setOnKeyPressed(this::detectKeyDown); setOnKeyReleased(this::detectKeyUp); private void detectKeyDown(KeyEvent e){ if (e.getCode() == KeyCode.SHIFT) { else if (e.getCode().equals(KeyCode.ENTER)) { if (shiftPressed && enterPressed) { System.out.println("Shift + Enter pressed"); sendCommand.go(); private void detectKeyUp(KeyEvent e){ if (e.getCode() == KeyCode.SHIFT) { else if (e.getCode().equals(KeyCode.ENTER)) { public String popCommandInput() { String command = this.getText(); this.clear(); public void setCommandInput(String command) { this.setText(command); public void addCommandInput(String command) { this.setText(this.getText() + command + "\n"); } package slogo.view.subViews; public class CommandInputView extends TextArea{ public CommandInputView(VoidNoInputFunction sendCommandFunction) public String popCommandInput() public void setCommandInput(String command) public void addCommandInput(String command) } package slogo.view.subViews; public class ButtonFactory { public ButtonFactory(SimulationController controller) public Button createDefaultButton(String property) public Button createHistoryViewButton(String command) public Button createDarkLightButton(String command) public ToggleButton createSelectAnimalButton(int id) public Button createRemoveAnimalButton(int id) public Button createAddAnimalButton(String text) } package slogo.view.line; public class Line implements Iterable { public Line(Point a, Point b) public void addToLine(Point p) public void drawLine() public Point getStart() public Point getEnd() public void extendLine(int dx, int dy) public Iterator iterator() public void forEach(Consumer action) }