From fb70a24c04a5beec6cc7ff9248ef8f5fd46fcc87 Mon Sep 17 00:00:00 2001 From: sowgro Date: Thu, 29 Aug 2024 21:51:14 -0400 Subject: Implement new create dialog --- README.md | 11 ++-- src/main/java/net/sowgro/npehero/Driver.java | 3 ++ .../java/net/sowgro/npehero/editor/DiffList.java | 47 +++++----------- .../net/sowgro/npehero/editor/FolderNameEntry.java | 62 ++++++++++++++++++++++ .../java/net/sowgro/npehero/editor/LevelList.java | 48 +++++------------ .../net/sowgro/npehero/levelapi/Difficulties.java | 3 +- .../net/sowgro/npehero/levelapi/Difficulty.java | 11 +++- .../java/net/sowgro/npehero/levelapi/Levels.java | 5 +- 8 files changed, 109 insertions(+), 81 deletions(-) create mode 100644 src/main/java/net/sowgro/npehero/editor/FolderNameEntry.java diff --git a/README.md b/README.md index accb8db..c6beccc 100755 --- a/README.md +++ b/README.md @@ -10,20 +10,15 @@ Goals: - [ ] Installer / Linux package Todo: +- [ ] Tweak design of songPlayer +- [ ] Redesign level editor menus - [ ] fix reliance on local font - -bugs to squash - - [ ] Improve errorList and controlEditor - [ ] Click sounds on all buttons in editor - [ ] Fix notesEditor note preview being too small with no notes - [ ] Properly center background image +- [ ] NotesEditor2: Clicking with the playhead requires pressing play first -features to add -- [ ] Tweak design of songPlayer - - [ ] Redesign level editor menus -- [ ] remove sidebar new dialog -- [ ] Make scaling of the center box consistent across pages # Installation Coming soon. diff --git a/src/main/java/net/sowgro/npehero/Driver.java b/src/main/java/net/sowgro/npehero/Driver.java index bddc3eb..5a2aa73 100755 --- a/src/main/java/net/sowgro/npehero/Driver.java +++ b/src/main/java/net/sowgro/npehero/Driver.java @@ -113,6 +113,9 @@ public class Driver extends Application } public static void setMenu(Page p) { + if (currentPage != null) { + currentPage.onLeave(); + } currentPage = p; Pane pane = currentPage.getContent(); pane.setOpacity(0.0); diff --git a/src/main/java/net/sowgro/npehero/editor/DiffList.java b/src/main/java/net/sowgro/npehero/editor/DiffList.java index b77af55..e435b22 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffList.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffList.java @@ -148,20 +148,8 @@ public class DiffList extends Page buttons.getChildren().addAll(create, edit, remove, moveUp, moveDown, refresh); buttons.setSpacing(10); - TextField newLevelEntry = new TextField(); - Button newLevelButton = new Button("add"); - - HBox newLevel = new HBox(newLevelEntry,newLevelButton); - Label newLevelLabel = new Label("Name of new difficulty"); - VBox newLevelBox = new VBox(newLevelLabel, newLevel); - newLevelBox.setSpacing(10); - newLevelBox.getStyleClass().add("box"); - newLevelBox.setPadding(new Insets(10)); - - Pane sidebar = new Pane(); - HBox main = new HBox(); - main.getChildren().addAll(new VBox(diffs, errorBox),buttons, sidebar); + main.getChildren().addAll(new VBox(diffs, errorBox),buttons); main.setSpacing(10); Button exit = new Button(); @@ -173,28 +161,17 @@ public class DiffList extends Page create.setOnAction(_ -> { Sound.playSfx(Sound.FORWARD); - if (create.isSelected()) { - sidebar.getChildren().add(newLevelBox); - } - else { - sidebar.getChildren().remove(newLevelBox); - } - }); - - newLevelButton.setOnAction(_ -> { - Sound.playSfx(Sound.FORWARD); - try { - level.difficulties.add(newLevelEntry.getText()); - } catch (FileAlreadyExistsException e) { - Driver.setMenu(new ErrorDisplay("Failed to add level\nA difficulty already exists with the folder name " + e.getFile(), this)); - } catch (IOException e) { - Driver.setMenu(new ErrorDisplay("Failed to add level\n"+e, this)); - e.printStackTrace(); - } - newLevelEntry.clear(); - refresh.fire(); - sidebar.getChildren().clear(); - create.setSelected(false); + FolderNameEntry.StringToVoidLambda next = (String name) -> { + try { + Difficulty d = level.difficulties.add(name); + Driver.setMenu(new DiffEditor(d, new DiffList(level, prev))); + } catch (FileAlreadyExistsException e) { + Driver.setMenu(new ErrorDisplay("Failed to add difficulty\nA difficulty already exists with the folder name " + e.getFile(), this)); + } catch (IOException e) { + Driver.setMenu(new ErrorDisplay("Failed to add difficulty\n" + e, this)); + } + }; + Driver.setMenu(new FolderNameEntry("difficulty", this, next)); }); VBox centerBox = new VBox(); diff --git a/src/main/java/net/sowgro/npehero/editor/FolderNameEntry.java b/src/main/java/net/sowgro/npehero/editor/FolderNameEntry.java new file mode 100644 index 0000000..f2245a8 --- /dev/null +++ b/src/main/java/net/sowgro/npehero/editor/FolderNameEntry.java @@ -0,0 +1,62 @@ +package net.sowgro.npehero.editor; + +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import net.sowgro.npehero.Driver; +import net.sowgro.npehero.main.Page; + +public class FolderNameEntry extends Page { + private final HBox content = new HBox(); + + public interface StringToVoidLambda { + void run(String name); + } + + public FolderNameEntry(String itemType, Page prev, StringToVoidLambda next) { + + Label newLevelLabel = new Label("Name of new "+itemType); + TextField newLevelEntry = new TextField(); + + Label folderName = new Label("Folder name"); + TextField folderNameEntry = new TextField(); + folderNameEntry.setEditable(false); + folderNameEntry.setDisable(true); + + newLevelEntry.setOnKeyTyped(_ -> { + folderNameEntry.setText(newLevelEntry.getText().toLowerCase().replaceAll("\\W+", "-")); + }); + + VBox newLevelBox = new VBox(newLevelLabel, newLevelEntry, folderName, folderNameEntry); + newLevelBox.setSpacing(10); + newLevelBox.getStyleClass().add("box"); + newLevelBox.setPadding(new Insets(10)); + newLevelBox.setPrefWidth(400); + + Button newLevelButton = new Button("Create"); + newLevelButton.setOnAction(_ -> next.run(newLevelEntry.getText())); + + Button cancel = new Button("Cancel"); + cancel.setOnAction(_ -> Driver.setMenu(prev)); + + HBox buttonBox = new HBox(cancel, newLevelButton); + buttonBox.setSpacing(10); + + VBox centerBox = new VBox(); + centerBox.getChildren().addAll(newLevelBox, buttonBox); + centerBox.setSpacing(10); + centerBox.setAlignment(Pos.CENTER); + + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } + + @Override + public HBox getContent() { + return content; + } +} diff --git a/src/main/java/net/sowgro/npehero/editor/LevelList.java b/src/main/java/net/sowgro/npehero/editor/LevelList.java index 7c499b7..e9d69af 100755 --- a/src/main/java/net/sowgro/npehero/editor/LevelList.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelList.java @@ -111,7 +111,7 @@ public class LevelList extends Page levels.setItems(Levels.list); }); - ToggleButton create = new ToggleButton("Create"); + Button create = new Button("Create"); Button viewFolder = new Button("Open Folder"); viewFolder.setOnAction(_ -> new Thread(() -> { @@ -126,20 +126,10 @@ public class LevelList extends Page buttons.getChildren().addAll(create, edit, remove, refresh, viewFolder); buttons.setSpacing(10); - TextField newLevelEntry = new TextField(); - Button newLevelButton = new Button("add"); - HBox newLevel = new HBox(newLevelEntry,newLevelButton); - Label newLevelLabel = new Label("Name of new level"); - VBox newLevelBox = new VBox(newLevelLabel, newLevel); - newLevelBox.setSpacing(10); - newLevelBox.getStyleClass().add("box"); - newLevelBox.setPadding(new Insets(10)); - - Pane sidebar = new Pane(); HBox main = new HBox(); - main.getChildren().addAll(new VBox(levels, errorBox),buttons,sidebar); + main.getChildren().addAll(new VBox(levels, errorBox),buttons); main.setSpacing(10); Button exit = new Button(); @@ -159,28 +149,18 @@ public class LevelList extends Page content.setAlignment(Pos.CENTER); create.setOnAction(_ -> { - if (create.isSelected()) { - sidebar.getChildren().add(newLevelBox); - } - else { - sidebar.getChildren().remove(newLevelBox); - } - }); - - newLevelButton.setOnAction(_ -> { - try { - Levels.add(newLevelEntry.getText()); - } catch (FileAlreadyExistsException e) { - Driver.setMenu(new ErrorDisplay("Failed to add level\nA level already exists with the folder name " + e.getFile(), this)); - e.printStackTrace(); - } catch (IOException e) { - Driver.setMenu(new ErrorDisplay("Failed to create this level\n"+e.toString(), this)); - e.printStackTrace(); - } - newLevelEntry.clear(); - refresh.fire(); - sidebar.getChildren().clear(); - create.setSelected(false); + Sound.playSfx(Sound.FORWARD); + FolderNameEntry.StringToVoidLambda next = (String name) -> { + try { + Level l = Levels.add(name); + Driver.setMenu(new LevelEditor(l, new LevelList())); + } catch (FileAlreadyExistsException e) { + Driver.setMenu(new ErrorDisplay("Failed to add level\nA level already exists with the folder name '" + e.getFile() + "'", this)); + } catch (IOException e) { + Driver.setMenu(new ErrorDisplay("Failed to create level\n"+e, this)); + } + }; + Driver.setMenu(new FolderNameEntry("level", this, next)); }); } diff --git a/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java b/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java index ea17e21..cfb3673 100644 --- a/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java +++ b/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java @@ -82,7 +82,7 @@ public class Difficulties { * @param text The name of the directory * @throws IOException If there is a problem adding the level */ - public void add(String text) throws IOException { + public Difficulty add(String text) throws IOException { File diffDir = new File(level.dir, text.toLowerCase().replaceAll("\\W+", "-")); if (diffDir.exists()) { throw new FileAlreadyExistsException(diffDir.getName()); @@ -92,6 +92,7 @@ public class Difficulties { temp.title = text; list.add(temp); list.sort(Comparator.naturalOrder()); + return temp; } else { throw new IOException(); diff --git a/src/main/java/net/sowgro/npehero/levelapi/Difficulty.java b/src/main/java/net/sowgro/npehero/levelapi/Difficulty.java index 2e99a7a..99fa285 100755 --- a/src/main/java/net/sowgro/npehero/levelapi/Difficulty.java +++ b/src/main/java/net/sowgro/npehero/levelapi/Difficulty.java @@ -5,6 +5,7 @@ import com.google.gson.GsonBuilder; import com.google.gson.ToNumberPolicy; import java.io.*; +import java.util.HashMap; import java.util.Map; /** @@ -50,6 +51,9 @@ public class Difficulty implements Comparable return; } Map data = jsonParser.fromJson(new FileReader(jsonFile), Map.class); + if (data == null) { + data = new HashMap<>(); + } title = (String) data.getOrDefault("title", title); bpm = (Double) data.getOrDefault("bpm", bpm); @@ -78,8 +82,13 @@ public class Difficulty implements Comparable * @throws IOException If there is a problem writing to the file */ public void writeMetadata() throws IOException { - jsonFile.createNewFile(); + if (!jsonFile.createNewFile()) { + throw new IOException("Could not create file " + jsonFile.getAbsolutePath()); + } Map data = jsonParser.fromJson(new FileReader(jsonFile), Map.class); // start with previous values + if (data == null) { + data = new HashMap<>(); + } data.put("title", title); data.put("endTime", endTime); data.put("priority", order); diff --git a/src/main/java/net/sowgro/npehero/levelapi/Levels.java b/src/main/java/net/sowgro/npehero/levelapi/Levels.java index c82c2fa..37878d8 100755 --- a/src/main/java/net/sowgro/npehero/levelapi/Levels.java +++ b/src/main/java/net/sowgro/npehero/levelapi/Levels.java @@ -39,7 +39,7 @@ public class Levels { try { Level level = new Level(file); list.add(level); - } catch (IOException e) { + } catch (Exception e) { problems.put(file.getName(), e); e.printStackTrace(); } @@ -52,7 +52,7 @@ public class Levels { * @param text: the name of the directory and default title * @throws IOException if there was an error adding the level */ - public static void add(String text) throws IOException { + public static Level add(String text) throws IOException { File levelDir = new File(dir, text.toLowerCase().replaceAll("\\W+", "-")); if (levelDir.exists()) { throw new FileAlreadyExistsException(levelDir.getName()); @@ -61,6 +61,7 @@ public class Levels { Level temp = new Level(levelDir); temp.title = text; list.add(temp); + return temp; } else { throw new IOException(); -- cgit v1.2.3