diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2024-08-29 21:51:14 -0400 | 
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2024-08-29 21:51:14 -0400 | 
| commit | fb70a24c04a5beec6cc7ff9248ef8f5fd46fcc87 (patch) | |
| tree | 8f9610d0da1301d6b5e82903418aaf0459cf8666 /src/main | |
| parent | 7a3aa914a7a64952dd0e134cd998d0cf0e445b4f (diff) | |
| download | NPEhero-fb70a24c04a5beec6cc7ff9248ef8f5fd46fcc87.tar.gz NPEhero-fb70a24c04a5beec6cc7ff9248ef8f5fd46fcc87.tar.bz2 NPEhero-fb70a24c04a5beec6cc7ff9248ef8f5fd46fcc87.zip | |
Implement new create dialog
Diffstat (limited to 'src/main')
7 files changed, 106 insertions, 73 deletions
| 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<Difficulty>              return;          }          Map<String, Object> 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<Difficulty>       * @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<String, Object> 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(); | 
