From 462b5025e8912a6455a18bb64c6004fa371f1834 Mon Sep 17 00:00:00 2001 From: Trym Hamer Gudvangen <trym.gudvangen@gmail.com> Date: Sun, 21 May 2023 21:38:27 +0200 Subject: [PATCH] feat: start implementing saving of story --- .../paths/controller/NewStoryController.java | 6 +++ .../paths/view/views/CreatePlayerView.java | 7 ++- .../paths/view/views/LoadGameView.java | 2 +- .../paths/view/views/NewStoryView.java | 51 +++++++++++++++++-- 4 files changed, 57 insertions(+), 9 deletions(-) diff --git a/src/main/java/edu/ntnu/idatt2001/group_30/paths/controller/NewStoryController.java b/src/main/java/edu/ntnu/idatt2001/group_30/paths/controller/NewStoryController.java index 94c2c13..6ab5ce9 100644 --- a/src/main/java/edu/ntnu/idatt2001/group_30/paths/controller/NewStoryController.java +++ b/src/main/java/edu/ntnu/idatt2001/group_30/paths/controller/NewStoryController.java @@ -1,4 +1,10 @@ package edu.ntnu.idatt2001.group_30.paths.controller; +import edu.ntnu.idatt2001.group_30.paths.view.views.NewStoryView; + public class NewStoryController extends Controller{ + + public NewStoryController() { + super(NewStoryView.class); + } } diff --git a/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/CreatePlayerView.java b/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/CreatePlayerView.java index adde9df..553371f 100644 --- a/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/CreatePlayerView.java +++ b/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/CreatePlayerView.java @@ -19,7 +19,6 @@ import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.image.*; import javafx.scene.layout.BorderPane; -import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.text.Font; import javafx.scene.text.FontWeight; @@ -73,9 +72,9 @@ public class CreatePlayerView extends View<BorderPane> { VBox leftVBox = new VBox(statsButton, goalsButton); leftVBox.setSpacing(20); leftVBox.setPadding(new Insets(300, 20, 0, 20)); - HBox leftHBox = new HBox(leftVBox); - leftHBox.setAlignment(Pos.CENTER_LEFT); - getParentPane().setLeft(leftHBox); + leftVBox.setAlignment(Pos.CENTER); + getParentPane().setLeft(leftVBox); + getParentPane().getLeft().setTranslateY(-200); statsButton.setOnAction(e -> new StatsPopUp()); diff --git a/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/LoadGameView.java b/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/LoadGameView.java index 7e3bb4a..bb2b445 100644 --- a/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/LoadGameView.java +++ b/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/LoadGameView.java @@ -118,7 +118,7 @@ public class LoadGameView extends View<BorderPane> { Button xButton = createIconButton("/images/remove.png", 16, 16); HBox buttonIcons = new HBox(10, pencilButton, xButton); - buttonIcons.setAlignment(Pos.CENTER_LEFT); + buttonIcons.setAlignment(Pos.CENTER); VBox storyContainer = new VBox(storyVBox, buttonIcons); storyContainer.setAlignment(Pos.CENTER); diff --git a/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/NewStoryView.java b/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/NewStoryView.java index 5a34588..f7fabdf 100644 --- a/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/NewStoryView.java +++ b/src/main/java/edu/ntnu/idatt2001/group_30/paths/view/views/NewStoryView.java @@ -7,6 +7,8 @@ import edu.ntnu.idatt2001.group_30.paths.model.Story; import static edu.ntnu.idatt2001.group_30.paths.PathsSingleton.INSTANCE; +import edu.ntnu.idatt2001.group_30.paths.model.filehandling.StoryFileHandler; +import edu.ntnu.idatt2001.group_30.paths.view.components.pop_up.AlertDialog; import edu.ntnu.idatt2001.group_30.paths.view.components.pop_up.PassagePopUp; import edu.ntnu.idatt2001.group_30.paths.view.components.table.PassageTable; import edu.ntnu.idatt2001.group_30.paths.view.components.table.TableDisplay; @@ -22,10 +24,14 @@ import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.text.Text; +import javafx.stage.FileChooser; +import java.io.File; +import java.io.IOException; import java.net.URL; import java.util.stream.Collectors; +//TODO: Add message that first passage will be opening passage public class NewStoryView extends View<BorderPane> { @@ -50,13 +56,17 @@ public class NewStoryView extends View<BorderPane> { Text labelText = new Text("Story Title: "); TextField textField = new TextField(story == null ? "" : story.getTitle()); - textField.setPromptText("Enter the name of the story"); + textField.setPromptText("Enter story title"); + HBox titleBox = new HBox(labelText, textField); - titleBox.setAlignment(Pos.CENTER); - textField.setOnAction(event -> { + + textField.setOnKeyTyped(event -> { title = textField.getText(); }); + titleBox.setAlignment(Pos.CENTER); + + PassageTable<Passage> passageTable = new PassageTable<>(new TableDisplay.Builder<Passage>() .addColumn("Name of Passage", "title") @@ -82,7 +92,40 @@ public class NewStoryView extends View<BorderPane> { addPassageButton.setOnAction(event -> new PassagePopUp()); - VBox display = new VBox(titleText, titleBox, passageTable, addPassageButton); + Button saveButton = new Button("Save"); + saveButton.setOnAction(event -> { + try { + + //TODO: add this logic to the controller instead of here + //TODO: if everything goes right, give a little feedback and + // then take back to load with story selected + // Add passage with links + story = new Story(title, passages.isEmpty() ? null: passages.get(0)); + passages.forEach(story::addPassage); + INSTANCE.setStory(story); + + FileChooser fileChooser = new FileChooser(); + fileChooser.setInitialDirectory(new File("./src/main/resources/story-files")); + fileChooser.getExtensionFilters().add( + new FileChooser.ExtensionFilter("Paths files", "*.paths") + ); + File selectedFile = fileChooser.showSaveDialog(null); + + if (selectedFile != null) { + StoryFileHandler fileHandler = new StoryFileHandler(); + try { + fileHandler.createStoryFile(story, selectedFile); + } catch (IOException ex) { + ex.printStackTrace(); + AlertDialog.showWarning("An error occurred while saving the file."); + } + } + } catch (Exception ex) { + AlertDialog.showWarning(ex.getMessage()); + } + }); + + VBox display = new VBox(titleText, titleBox, passageTable, addPassageButton, saveButton); display.setAlignment(Pos.CENTER); display.setSpacing(10); display.setPrefWidth(500); -- GitLab