diff --git a/src/main/java/DialogBox.java b/src/main/java/DialogBox.java new file mode 100644 index 0000000000..1fc8b12c39 --- /dev/null +++ b/src/main/java/DialogBox.java @@ -0,0 +1,61 @@ +package duke; + +import java.io.IOException; +import java.util.Collections; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.control.Label; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; + +/** + * An example of a custom control using FXML. + * This control represents a dialog box consisting of an ImageView to represent the speaker's face and a label + * containing text from the speaker. + */ +public class DialogBox extends HBox { + @FXML + private Label dialog; + @FXML + private ImageView displayPicture; + + private DialogBox(String text, Image img) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(MainWindow.class.getResource("/view/DialogBox.fxml")); + fxmlLoader.setController(this); + fxmlLoader.setRoot(this); + fxmlLoader.load(); + } catch (IOException e) { + e.printStackTrace(); + } + + dialog.setText(text); + displayPicture.setImage(img); + } + + /** + * Flips the dialog box such that the ImageView is on the left and text on the right. + */ + private void flip() { + ObservableList tmp = FXCollections.observableArrayList(this.getChildren()); + Collections.reverse(tmp); + getChildren().setAll(tmp); + setAlignment(Pos.TOP_LEFT); + } + + public static DialogBox getUserDialog(String text, Image img) { + return new DialogBox(text, img); + } + + public static DialogBox getDukeDialog(String text, Image img) { + var db = new DialogBox(text, img); + db.flip(); + return db; + } +} \ No newline at end of file diff --git a/src/main/java/Duke.java b/src/main/java/Duke.java index ed7e4c6078..d4e7c4786f 100644 --- a/src/main/java/Duke.java +++ b/src/main/java/Duke.java @@ -1,23 +1,88 @@ package duke; +import duke.exception.DukeException; +import duke.util.Parser; +import duke.util.Ui; +import duke.util.Storage; +import duke.task.TaskList; +import duke.command.Command; + /** * Application class for Duke. */ public class Duke { + private Storage storage; + private TaskList tasks; + private Ui ui; + + public Duke() { + this("data/duke.txt"); + } + + /** + * Constructor of Duke class. + * + * @param filePath Path to text file where save data is stored. + */ + public Duke(String filePath) { + this.ui = new Ui(); + this.storage = new Storage(filePath); + try { + this.tasks = this.storage.load(); + } catch (DukeException e) { + this.ui.showLoadingError(); + this.tasks = new TaskList(); + } + } + /** * Main method for Duke. * * @param args Arguments entered when main method is executed. */ public static void main(String[] args) { + Duke duke = new Duke("data/duke.txt"); + duke.run(); + } + + public String getResponse(String input) { + return this.step(input); + } + + /** + * Run method of Duke. + */ + public void run() { String logo = " ____ _ \n" + "| _ \\ _ _| | _____ \n" + "| | | | | | | |/ / _ \\\n" + "| |_| | |_| | < __/\n" + "|____/ \\__,_|_|\\_\\___|\n"; System.out.println("Hello from\n" + logo); + this.ui.showWelcome(); + + boolean isExit = false; + while (!isExit) { + try { + String fullCommand = ui.readCommand(); + Command c = Parser.parse(fullCommand); + c.execute(tasks, ui, storage); + storage.save(tasks); + isExit = c.isExit(); + } catch (DukeException e) { + ui.showError(e.getMessage()); + } + } + } - Main main = new Main("../../../data/duke.txt"); - main.run(); + public String step(String input) { + try { + Command c = Parser.parse(input); + c.execute(tasks, ui, storage); + this.storage.save(tasks); + } catch(DukeException e) { + this.ui.showError(e.getMessage()); + } + return this.ui.getOutput(); } } diff --git a/src/main/java/DukeLogic.java b/src/main/java/DukeLogic.java new file mode 100644 index 0000000000..aeaab83624 --- /dev/null +++ b/src/main/java/DukeLogic.java @@ -0,0 +1,67 @@ +package duke; + +import duke.exception.DukeException; +import duke.util.Parser; +import duke.util.Ui; +import duke.util.Storage; +import duke.task.TaskList; +import duke.command.Command; + +public class DukeLogic { + private Storage storage; + private TaskList tasks; + private Ui ui; + + /** + * Constructor of Duke class. + * + * @param filePath Path to text file where save data is stored. + */ + public DukeLogic(String filePath) { + this.ui = new Ui(); + this.storage = new Storage(filePath); + try { + this.tasks = this.storage.load(); + } catch (DukeException e) { + this.ui.showLoadingError(); + this.tasks = new TaskList(); + } + } + + /** + * Run method of Duke. + */ + public void run() { + String logo = " ____ _ \n" + + "| _ \\ _ _| | _____ \n" + + "| | | | | | | |/ / _ \\\n" + + "| |_| | |_| | < __/\n" + + "|____/ \\__,_|_|\\_\\___|\n"; + System.out.println("Hello from\n" + logo); + this.ui.showWelcome(); + + boolean isExit = false; + while (!isExit) { + try { + String fullCommand = ui.readCommand(); + Command c = Parser.parse(fullCommand); + c.execute(tasks, ui, storage); + storage.save(tasks); + isExit = c.isExit(); + } catch (DukeException e) { + ui.showError(e.getMessage()); + } + } + } + + public String step(String input) { + try { + Command c = Parser.parse(input); + c.execute(tasks, ui, storage); + this.storage.save(tasks); + } catch(DukeException e) { + ui.showError(e.getMessage()); + } + return this.ui.getOutput(); + } +} \ No newline at end of file diff --git a/src/main/java/Launcher.java b/src/main/java/Launcher.java new file mode 100644 index 0000000000..5483e63637 --- /dev/null +++ b/src/main/java/Launcher.java @@ -0,0 +1,12 @@ +package duke; + +import javafx.application.Application; + +/** + * A launcher class to workaround classpath issues. + */ +public class Launcher { + public static void main(String[] args) { + Application.launch(Main.class, args); + } +} \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index d99167a517..8ed3a0e35d 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,59 +1,32 @@ package duke; -import duke.DukeException; -import duke.Parser; -import duke.Ui; -import duke.Storage; -import duke.TaskList; -import duke.command.Command; -import java.util.Scanner; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.ArrayList; +import java.io.IOException; + +import duke.MainWindow; +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Scene; +import javafx.scene.layout.AnchorPane; +import javafx.stage.Stage; /** - * Main class of Duke. - * Contains run() method. + * A GUI for Duke using FXML. */ -public class Main { - private Storage storage; - private TaskList tasks; - private Ui ui; - - /** - * Constructor of Main class. - * - * @param filePath Path to text file where save data is stored. - */ - public Main(String filePath) { - ui = new Ui(); - storage = new Storage(filePath); - try { - tasks = storage.load(); - } catch (DukeException e) { - ui.showLoadingError(); - tasks = new TaskList(); - } - } +public class Main extends Application { - /** - * Run method of Duke. - */ - public void run() { - this.ui.showWelcome(); + private Duke duke = new Duke(); - boolean isExit = false; - while (!isExit) { - try { - String fullCommand = ui.readCommand(); - Command c = Parser.parse(fullCommand); - c.execute(tasks, ui, storage); - isExit = c.isExit(); - } catch (DukeException e) { - ui.showError(e.getMessage()); - } + @Override + public void start(Stage stage) { + try { + FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("/view/MainWindow.fxml")); + AnchorPane ap = fxmlLoader.load(); + Scene scene = new Scene(ap); + stage.setScene(scene); + fxmlLoader.getController().setDuke(duke); + stage.show(); + } catch (IOException e) { + e.printStackTrace(); } } } \ No newline at end of file diff --git a/src/main/java/MainWindow.java b/src/main/java/MainWindow.java new file mode 100644 index 0000000000..94f610adc5 --- /dev/null +++ b/src/main/java/MainWindow.java @@ -0,0 +1,51 @@ +package duke; + +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.VBox; +/** + * Controller for MainWindow. Provides the layout for the other controls. + */ +public class MainWindow extends AnchorPane { + @FXML + private ScrollPane scrollPane; + @FXML + private VBox dialogContainer; + @FXML + private TextField userInput; + @FXML + private Button sendButton; + + private Duke duke; + + private Image userImage = new Image(this.getClass().getResourceAsStream("/resources/DaUser.png")); + private Image dukeImage = new Image(this.getClass().getResourceAsStream("/resources/DaDuke.png")); + + @FXML + public void initialize() { + scrollPane.vvalueProperty().bind(dialogContainer.heightProperty()); + } + + public void setDuke(Duke d) { + duke = d; + } + + /** + * Creates two dialog boxes, one echoing user input and the other containing Duke's reply and then appends them to + * the dialog container. Clears the user input after processing. + */ + @FXML + private void handleUserInput() { + String input = userInput.getText(); + String response = duke.getResponse(input); + dialogContainer.getChildren().addAll( + DialogBox.getUserDialog(input, userImage), + DialogBox.getDukeDialog(response, dukeImage) + ); + userInput.clear(); + } +} \ No newline at end of file diff --git a/src/main/java/AddCommand.java b/src/main/java/command/AddCommand.java similarity index 91% rename from src/main/java/AddCommand.java rename to src/main/java/command/AddCommand.java index 007a56f8f1..91533794a3 100644 --- a/src/main/java/AddCommand.java +++ b/src/main/java/command/AddCommand.java @@ -1,10 +1,10 @@ package duke.command; -import duke.DukeException; -import duke.Parser; -import duke.Ui; -import duke.Storage; -import duke.TaskList; +import duke.exception.DukeException; +import duke.util.Parser; +import duke.util.Ui; +import duke.util.Storage; +import duke.task.TaskList; import duke.task.Task; /** diff --git a/src/main/java/Command.java b/src/main/java/command/Command.java similarity index 89% rename from src/main/java/Command.java rename to src/main/java/command/Command.java index 9a631e0401..8d5aa357c4 100644 --- a/src/main/java/Command.java +++ b/src/main/java/command/Command.java @@ -1,9 +1,9 @@ package duke.command; -import duke.TaskList; -import duke.Ui; -import duke.Storage; -import duke.DukeException; +import duke.task.TaskList; +import duke.util.Ui; +import duke.util.Storage; +import duke.exception.DukeException; /** * Abstract Command class that contains execute() for diff --git a/src/main/java/DeleteCommand.java b/src/main/java/command/DeleteCommand.java similarity index 92% rename from src/main/java/DeleteCommand.java rename to src/main/java/command/DeleteCommand.java index f092f56dbd..8b64cd95e5 100644 --- a/src/main/java/DeleteCommand.java +++ b/src/main/java/command/DeleteCommand.java @@ -1,10 +1,10 @@ package duke.command; -import duke.DukeException; -import duke.Parser; -import duke.Ui; -import duke.Storage; -import duke.TaskList; +import duke.exception.DukeException; +import duke.util.Parser; +import duke.util.Ui; +import duke.util.Storage; +import duke.task.TaskList; import duke.task.Task; /** diff --git a/src/main/java/DoneCommand.java b/src/main/java/command/DoneCommand.java similarity index 92% rename from src/main/java/DoneCommand.java rename to src/main/java/command/DoneCommand.java index 722b9090be..3cfef136f1 100644 --- a/src/main/java/DoneCommand.java +++ b/src/main/java/command/DoneCommand.java @@ -1,10 +1,10 @@ package duke.command; -import duke.DukeException; -import duke.Parser; -import duke.Ui; -import duke.Storage; -import duke.TaskList; +import duke.exception.DukeException; +import duke.util.Parser; +import duke.util.Ui; +import duke.util.Storage; +import duke.task.TaskList; import duke.task.Task; /** diff --git a/src/main/java/ExitCommand.java b/src/main/java/command/ExitCommand.java similarity index 94% rename from src/main/java/ExitCommand.java rename to src/main/java/command/ExitCommand.java index 4bda058632..bf8712bafb 100644 --- a/src/main/java/ExitCommand.java +++ b/src/main/java/command/ExitCommand.java @@ -1,8 +1,8 @@ package duke.command; -import duke.Ui; -import duke.Storage; -import duke.TaskList; +import duke.util.Ui; +import duke.util.Storage; +import duke.task.TaskList; /** * Command containing method for exiting program. diff --git a/src/main/java/FindCommand.java b/src/main/java/command/FindCommand.java similarity index 92% rename from src/main/java/FindCommand.java rename to src/main/java/command/FindCommand.java index b60a6f1b19..de85afba73 100644 --- a/src/main/java/FindCommand.java +++ b/src/main/java/command/FindCommand.java @@ -1,10 +1,10 @@ package duke.command; -import duke.DukeException; -import duke.Parser; -import duke.Ui; -import duke.Storage; -import duke.TaskList; +import duke.exception.DukeException; +import duke.util.Parser; +import duke.util.Ui; +import duke.util.Storage; +import duke.task.TaskList; import duke.task.Task; /** diff --git a/src/main/java/ListCommand.java b/src/main/java/command/ListCommand.java similarity index 94% rename from src/main/java/ListCommand.java rename to src/main/java/command/ListCommand.java index 020fd4e81e..a5a500f038 100644 --- a/src/main/java/ListCommand.java +++ b/src/main/java/command/ListCommand.java @@ -1,8 +1,8 @@ package duke.command; -import duke.Ui; -import duke.Storage; -import duke.TaskList; +import duke.util.Ui; +import duke.util.Storage; +import duke.task.TaskList; /** * Command containing method for listing Tasks in TaskList. diff --git a/src/main/java/data/duke.txt b/src/main/java/data/duke.txt new file mode 100644 index 0000000000..8f5b311d6e Binary files /dev/null and b/src/main/java/data/duke.txt differ diff --git a/src/main/java/duke/DialogBox.class b/src/main/java/duke/DialogBox.class new file mode 100644 index 0000000000..cf3119145a Binary files /dev/null and b/src/main/java/duke/DialogBox.class differ diff --git a/src/main/java/duke/Duke.class b/src/main/java/duke/Duke.class index e6d1e04582..d07e6146d6 100644 Binary files a/src/main/java/duke/Duke.class and b/src/main/java/duke/Duke.class differ diff --git a/src/main/java/duke/DukeException.class b/src/main/java/duke/DukeException.class deleted file mode 100644 index 2fc7a39c06..0000000000 Binary files a/src/main/java/duke/DukeException.class and /dev/null differ diff --git a/src/main/java/duke/DukeLogic.class b/src/main/java/duke/DukeLogic.class new file mode 100644 index 0000000000..2f7b350da5 Binary files /dev/null and b/src/main/java/duke/DukeLogic.class differ diff --git a/src/main/java/duke/Launcher.class b/src/main/java/duke/Launcher.class new file mode 100644 index 0000000000..72ecf69fdb Binary files /dev/null and b/src/main/java/duke/Launcher.class differ diff --git a/src/main/java/duke/Main.class b/src/main/java/duke/Main.class index 5801d5d62e..2d0b36aa38 100644 Binary files a/src/main/java/duke/Main.class and b/src/main/java/duke/Main.class differ diff --git a/src/main/java/duke/MainWindow.class b/src/main/java/duke/MainWindow.class new file mode 100644 index 0000000000..0b1722d2fe Binary files /dev/null and b/src/main/java/duke/MainWindow.class differ diff --git a/src/main/java/duke/Parser.class b/src/main/java/duke/Parser.class deleted file mode 100644 index f8239ddc8d..0000000000 Binary files a/src/main/java/duke/Parser.class and /dev/null differ diff --git a/src/main/java/duke/Ui.class b/src/main/java/duke/Ui.class deleted file mode 100644 index da44202073..0000000000 Binary files a/src/main/java/duke/Ui.class and /dev/null differ diff --git a/src/main/java/duke/command/AddCommand.class b/src/main/java/duke/command/AddCommand.class index 81e45b6b41..7973b4cdcd 100644 Binary files a/src/main/java/duke/command/AddCommand.class and b/src/main/java/duke/command/AddCommand.class differ diff --git a/src/main/java/duke/command/Command.class b/src/main/java/duke/command/Command.class index cdc2caefdd..61eccb1dc2 100644 Binary files a/src/main/java/duke/command/Command.class and b/src/main/java/duke/command/Command.class differ diff --git a/src/main/java/duke/command/DeleteCommand.class b/src/main/java/duke/command/DeleteCommand.class index 175bff6e33..71cf32e34a 100644 Binary files a/src/main/java/duke/command/DeleteCommand.class and b/src/main/java/duke/command/DeleteCommand.class differ diff --git a/src/main/java/duke/command/DoneCommand.class b/src/main/java/duke/command/DoneCommand.class index ccf61be833..2296ecbc43 100644 Binary files a/src/main/java/duke/command/DoneCommand.class and b/src/main/java/duke/command/DoneCommand.class differ diff --git a/src/main/java/duke/command/ExitCommand.class b/src/main/java/duke/command/ExitCommand.class index c974318209..667e8cc4ba 100644 Binary files a/src/main/java/duke/command/ExitCommand.class and b/src/main/java/duke/command/ExitCommand.class differ diff --git a/src/main/java/duke/command/FindCommand.class b/src/main/java/duke/command/FindCommand.class index 791301e8d1..1148b71e9f 100644 Binary files a/src/main/java/duke/command/FindCommand.class and b/src/main/java/duke/command/FindCommand.class differ diff --git a/src/main/java/duke/command/ListCommand.class b/src/main/java/duke/command/ListCommand.class index cee7c16ab2..da52629dc3 100644 Binary files a/src/main/java/duke/command/ListCommand.class and b/src/main/java/duke/command/ListCommand.class differ diff --git a/src/main/java/duke/exception/DukeException.class b/src/main/java/duke/exception/DukeException.class new file mode 100644 index 0000000000..98e508329b Binary files /dev/null and b/src/main/java/duke/exception/DukeException.class differ diff --git a/src/main/java/duke/TaskList.class b/src/main/java/duke/task/TaskList.class similarity index 91% rename from src/main/java/duke/TaskList.class rename to src/main/java/duke/task/TaskList.class index f1b1b4c32f..734713d3e8 100644 Binary files a/src/main/java/duke/TaskList.class and b/src/main/java/duke/task/TaskList.class differ diff --git a/src/main/java/duke/util/Parser.class b/src/main/java/duke/util/Parser.class new file mode 100644 index 0000000000..bccfa71e57 Binary files /dev/null and b/src/main/java/duke/util/Parser.class differ diff --git a/src/main/java/duke/Storage.class b/src/main/java/duke/util/Storage.class similarity index 58% rename from src/main/java/duke/Storage.class rename to src/main/java/duke/util/Storage.class index 60ddbe3a2c..78d564f963 100644 Binary files a/src/main/java/duke/Storage.class and b/src/main/java/duke/util/Storage.class differ diff --git a/src/main/java/duke/util/Ui.class b/src/main/java/duke/util/Ui.class new file mode 100644 index 0000000000..c4b4ba472a Binary files /dev/null and b/src/main/java/duke/util/Ui.class differ diff --git a/src/main/java/DukeException.java b/src/main/java/exception/DukeException.java similarity index 92% rename from src/main/java/DukeException.java rename to src/main/java/exception/DukeException.java index 347503193f..daa62a2058 100644 --- a/src/main/java/DukeException.java +++ b/src/main/java/exception/DukeException.java @@ -1,4 +1,4 @@ -package duke; +package duke.exception; /** * Exception class for Duke. diff --git a/src/main/java/resources/DaDuke.png b/src/main/java/resources/DaDuke.png new file mode 100644 index 0000000000..d893658717 Binary files /dev/null and b/src/main/java/resources/DaDuke.png differ diff --git a/src/main/java/resources/DaUser.png b/src/main/java/resources/DaUser.png new file mode 100644 index 0000000000..3c82f45461 Binary files /dev/null and b/src/main/java/resources/DaUser.png differ diff --git a/src/main/java/Deadline.java b/src/main/java/task/Deadline.java similarity index 100% rename from src/main/java/Deadline.java rename to src/main/java/task/Deadline.java diff --git a/src/main/java/Event.java b/src/main/java/task/Event.java similarity index 100% rename from src/main/java/Event.java rename to src/main/java/task/Event.java diff --git a/src/main/java/Task.java b/src/main/java/task/Task.java similarity index 100% rename from src/main/java/Task.java rename to src/main/java/task/Task.java diff --git a/src/main/java/TaskList.java b/src/main/java/task/TaskList.java similarity index 98% rename from src/main/java/TaskList.java rename to src/main/java/task/TaskList.java index 63d565ec89..b5a2b86af3 100644 --- a/src/main/java/TaskList.java +++ b/src/main/java/task/TaskList.java @@ -1,4 +1,4 @@ -package duke; +package duke.task; import duke.task.Task; import java.io.Serializable; diff --git a/src/main/java/Todo.java b/src/main/java/task/Todo.java similarity index 100% rename from src/main/java/Todo.java rename to src/main/java/task/Todo.java diff --git a/src/main/java/Parser.java b/src/main/java/util/Parser.java similarity index 77% rename from src/main/java/Parser.java rename to src/main/java/util/Parser.java index 2e00806377..990338c5b5 100644 --- a/src/main/java/Parser.java +++ b/src/main/java/util/Parser.java @@ -1,4 +1,4 @@ -package duke; +package duke.util; import duke.command.Command; import duke.command.AddCommand; @@ -11,8 +11,9 @@ import duke.task.Todo; import duke.task.Deadline; import duke.task.Event; -import duke.DukeException; +import duke.exception.DukeException; import java.util.HashMap; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @@ -116,34 +117,37 @@ public static Task parseTask(String input) throws DukeException { String type = words[0]; String info = input.substring((type + " ").length()); - switch (type) { - case "todo": - if (info.equals("")) { - throw new DukeException("☹ OOPS!!! The description of a todo cannot be empty."); - } - return new Todo(info); - case "deadline": - String[] args = info.split("/by"); - String description = args[0].trim(); - Date date; - try { - date = dateFormatter.parse(args[1].trim()); - } catch (Exception e) { - throw new DukeException("☹ OOPS!!! Incorrect date format."); - } - return new Deadline(description, date); - case "event": - args = info.split("/at"); - description = args[0].trim(); - try { - date = dateFormatter.parse(args[1].trim()); - } catch (Exception e) { - throw new DukeException("☹ OOPS!!! Incorrect date format."); + try { + switch (type) { + case "todo": + if (info.equals("")) { + throw new DukeException("☹ OOPS!!! The description of a todo cannot be empty."); + } + return new Todo(info); + case "deadline": + String[] args = info.split("/by"); + String description = args[0].trim(); + Date date; + try { + date = dateFormatter.parse(args[1].trim()); + } catch (ParseException e) { + throw new DukeException("☹ OOPS!!! Incorrect date format."); + } + return new Deadline(description, date); + case "event": + args = info.split("/at"); + description = args[0].trim(); + try { + date = dateFormatter.parse(args[1].trim()); + } catch (ParseException e) { + throw new DukeException("☹ OOPS!!! Incorrect date format."); + } + return new Event(description, date); } - return new Event(description, date); - default: + } catch (IndexOutOfBoundsException e) { throw new DukeException("Invalid task input."); } + throw new DukeException("Invalid task input."); } /** diff --git a/src/main/java/Storage.java b/src/main/java/util/Storage.java similarity index 94% rename from src/main/java/Storage.java rename to src/main/java/util/Storage.java index bb42cafd25..b99057110f 100644 --- a/src/main/java/Storage.java +++ b/src/main/java/util/Storage.java @@ -1,7 +1,7 @@ -package duke; +package duke.util; -import duke.TaskList; -import duke.DukeException; +import duke.task.TaskList; +import duke.exception.DukeException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; diff --git a/src/main/java/Ui.java b/src/main/java/util/Ui.java similarity index 91% rename from src/main/java/Ui.java rename to src/main/java/util/Ui.java index 770390eef6..c22ca0bea3 100644 --- a/src/main/java/Ui.java +++ b/src/main/java/util/Ui.java @@ -1,4 +1,4 @@ -package duke; +package duke.util; import java.util.Scanner; @@ -6,6 +6,8 @@ * Ui class that handles output of Duke to the console. */ public class Ui { + public String buffer; + String format(String output) { return " ____________________________________________________________\n" + indent(output) @@ -27,9 +29,14 @@ String indent(String output) { * Prints output of Duke. */ public void printResponse(String output) { + this.buffer = format(output); System.out.println(format(output)); } + public String getOutput() { + return this.buffer; + } + /** * Reads input of user from the console. * diff --git a/src/main/java/view/DialogBox.fxml b/src/main/java/view/DialogBox.fxml new file mode 100644 index 0000000000..e2b59b6e48 --- /dev/null +++ b/src/main/java/view/DialogBox.fxml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/view/MainWindow.fxml b/src/main/java/view/MainWindow.fxml new file mode 100644 index 0000000000..3add5bc787 --- /dev/null +++ b/src/main/java/view/MainWindow.fxml @@ -0,0 +1,19 @@ + + + + + + + + + + + +