diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2024-07-29 00:30:28 -0400 | 
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2024-07-29 00:30:28 -0400 | 
| commit | f3a037701799169066c6cb12b3c7023029b8b281 (patch) | |
| tree | 6e9bb0839152dc52faab8d3a927d077b864a85de /src/main | |
| parent | 0ce09f72f4af26412356b9699d402b52dbcfc94f (diff) | |
| download | NPEhero-f3a037701799169066c6cb12b3c7023029b8b281.tar.gz NPEhero-f3a037701799169066c6cb12b3c7023029b8b281.tar.bz2 NPEhero-f3a037701799169066c6cb12b3c7023029b8b281.zip | |
Show level and difficulty loading errors in the gui
Diffstat (limited to 'src/main')
9 files changed, 179 insertions, 12 deletions
| diff --git a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java index 0eb4968..7671bc6 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java @@ -39,6 +39,7 @@ public class DiffEditor extends Page          Button editNotes = new Button("Edit notes");          editNotes.setOnAction(_ -> { +            Sound.playSfx(Sound.FORWARD);              if (diff.level.song == null) {                  Driver.setMenu(new ErrorDisplay("You must import a song file before editing the notes!", this));                  return; @@ -55,15 +56,19 @@ public class DiffEditor extends Page          });          Button oldEditNotes = new Button("Edit notes (legacy)"); -        oldEditNotes.setOnAction(_ -> Driver.setMenu(new ErrorDisplay( +        oldEditNotes.setOnAction(_ -> { +            Sound.playSfx(Sound.FORWARD); +            Driver.setMenu(new ErrorDisplay(                  "Warning: \nThe legacy editor will overwrite all existing notes!",                  this,                  new NotesEditor(diff, this)) -        )); +            ); +        });          Label scoresLable = new Label("Scores");          Button editScores = new Button("Clear leaderboard");          editScores.setOnAction(_ -> { +            Sound.playSfx(Sound.FORWARD);              diff.leaderboard.entries.clear();              try {                  diff.leaderboard.save(); @@ -75,6 +80,7 @@ public class DiffEditor extends Page          Button playLevel = new Button("Play level");          playLevel.setOnAction(_ -> { +            Sound.playSfx(Sound.FORWARD);              if (diff.isValid() && diff.level.isValid()) {                  Driver.setMenu(new LevelSurround(diff.level, diff, this));              } @@ -85,6 +91,7 @@ public class DiffEditor extends Page          Button save = new Button("Save");          save.setOnAction(_ -> { //assigns text fields to values +            Sound.playSfx(Sound.FORWARD);              diff.title = title.getText();  //            diff.bpm = Double.parseDouble(bpm.getText());  //            diff.numBeats = Integer.parseInt(numBeats.getText()); diff --git a/src/main/java/net/sowgro/npehero/editor/DiffList.java b/src/main/java/net/sowgro/npehero/editor/DiffList.java index 9e2df9b..f3769ab 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffList.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffList.java @@ -8,11 +8,14 @@ import javafx.scene.control.*;  import javafx.scene.layout.HBox;  import javafx.scene.layout.Pane;  import javafx.scene.layout.VBox; +import javafx.scene.paint.Color;  import net.sowgro.npehero.Driver; +import net.sowgro.npehero.gui.MainMenu;  import net.sowgro.npehero.levelapi.Difficulty;  import net.sowgro.npehero.levelapi.Level;  import net.sowgro.npehero.main.Page;  import net.sowgro.npehero.main.Sound; +import net.sowgro.npehero.main.ValidIndicator;  import java.io.IOException;  import java.nio.file.FileAlreadyExistsException; @@ -20,10 +23,14 @@ import java.util.Collections;  public class DiffList extends Page  { +    private final Label error; +    private final HBox errorBox;      private HBox content = new HBox(); +    private Level level;      public DiffList(Level level, Page prev)      { +        this.level = level;          //sets up table view: requires special getters, setters and constructors to work          TableView<Difficulty> diffs = new TableView<>(); @@ -59,13 +66,28 @@ public class DiffList extends Page          diffs.setPrefWidth(400);          diffs.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.67)); +        error = new Label(); +        errorBox = new HBox(error); +        errorBox.setSpacing(10); +        errorBox.setPadding(new Insets(10)); +        errorBox.getStyleClass().addAll("box", "red"); +        errorBox.setOnMouseClicked(_ -> { +            // TODO +            Driver.setMenu(new ErrorList(level.difficulties.problems, this)); +        }); +        refresh(); +          Button edit = new Button("Edit"); -        edit.setOnAction(e -> Driver.setMenu(new DiffEditor(diffs.getSelectionModel().getSelectedItem(), this))); +        edit.setOnAction(e -> { +            Sound.playSfx(Sound.FORWARD); +            Driver.setMenu(new DiffEditor(diffs.getSelectionModel().getSelectedItem(), this)); +        });          edit.setDisable(true);          edit.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull());          Button remove = new Button("Delete");          remove.setOnAction(e -> { +            Sound.playSfx(Sound.FORWARD);              try {                  level.difficulties.remove(diffs.getSelectionModel().getSelectedItem());              } catch (IOException ex) { @@ -78,6 +100,7 @@ public class DiffList extends Page          Button refresh = new Button("Refresh");          refresh.setOnAction(e -> { +            Sound.playSfx(Sound.FORWARD);              try {                  level.difficulties.read();              } catch (IOException ex) { @@ -85,6 +108,7 @@ public class DiffList extends Page              }  //            diffs.setItems(level.difficulties.list.sorted());              diffs.refresh(); +            refresh();          });          ToggleButton create = new ToggleButton("Create"); @@ -92,6 +116,7 @@ public class DiffList extends Page          Button moveUp = new Button("Move Up");          moveUp.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull());          moveUp.setOnAction(_ -> { +            Sound.playSfx(Sound.FORWARD);              Difficulty diff = diffs.getSelectionModel().selectedItemProperty().get();              ObservableList<Difficulty> diffList = level.difficulties.list;              int oldIndex = diffList.indexOf(diff); @@ -110,6 +135,7 @@ public class DiffList extends Page          Button moveDown = new Button("Move Down");          moveDown.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull());          moveDown.setOnAction(_ -> { +            Sound.playSfx(Sound.FORWARD);              Difficulty diff = diffs.getSelectionModel().selectedItemProperty().get();              ObservableList<Difficulty> diffList = level.difficulties.list;              int oldIndex = diffList.indexOf(diff); @@ -142,7 +168,7 @@ public class DiffList extends Page          Pane sidebar = new Pane();          HBox main = new HBox(); -        main.getChildren().addAll(diffs,buttons, sidebar); +        main.getChildren().addAll(new VBox(diffs, errorBox),buttons, sidebar);          main.setSpacing(10);          Button exit = new Button(); @@ -153,6 +179,7 @@ public class DiffList extends Page          });          create.setOnAction(_ -> { +            Sound.playSfx(Sound.FORWARD);              if (create.isSelected()) {                  sidebar.getChildren().add(newLevelBox);              } @@ -162,6 +189,7 @@ public class DiffList extends Page          });          newLevelButton.setOnAction(_ -> { +            Sound.playSfx(Sound.FORWARD);              try {                  level.difficulties.add(newLevelEntry.getText());              } catch (FileAlreadyExistsException e) { @@ -189,4 +217,15 @@ public class DiffList extends Page      public Pane getContent() {          return content;      } + +    public void refresh() { +        error.setText("Failed to load " + level.difficulties.problems.size() + " difficulty(s)"); +        if (level.difficulties.problems.isEmpty()) { +            errorBox.setVisible(false); +            errorBox.setManaged(false); +        } else { +            errorBox.setVisible(true); +            errorBox.setManaged(true); +        } +    }  }
\ No newline at end of file diff --git a/src/main/java/net/sowgro/npehero/editor/ErrorList.java b/src/main/java/net/sowgro/npehero/editor/ErrorList.java new file mode 100644 index 0000000..92a9455 --- /dev/null +++ b/src/main/java/net/sowgro/npehero/editor/ErrorList.java @@ -0,0 +1,70 @@ +package net.sowgro.npehero.editor; + +import javafx.event.EventHandler; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.*; +import javafx.scene.input.KeyEvent; +import javafx.scene.layout.*; +import net.sowgro.npehero.Driver; +import net.sowgro.npehero.gui.SettingsEditor; +import net.sowgro.npehero.main.Control; +import net.sowgro.npehero.main.Page; +import net.sowgro.npehero.main.Sound; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +public class ErrorList extends Page { + +    private HBox content = new HBox(); + +    public ErrorList(Map<String, Exception> list, Page prev) { + +        GridPane controls = new GridPane(); +        ScrollPane scrollPane = new ScrollPane(controls); +        scrollPane.getStyleClass().remove("scroll-pane"); +        scrollPane.getStyleClass().add("box"); +        scrollPane.setPadding(new Insets(10)); +        controls.setPadding(new Insets(10)); +        controls.setVgap(20); +        controls.setHgap(40); + +        scrollPane.setPrefWidth(700); +        scrollPane.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75)); + +        Button exit = new Button(); +        exit.setText("Back"); +        exit.setOnAction(e -> { +            Sound.playSfx(Sound.BACKWARD); +            Driver.setMenu(prev); +        }); + +        VBox centerBox = new VBox(); +        centerBox.getChildren().addAll(scrollPane, exit); +        centerBox.setSpacing(10); +        centerBox.setAlignment(Pos.CENTER); + +        content.getChildren().add(centerBox); +        content.setAlignment(Pos.CENTER); + +        int i = 0; +        for (Map.Entry<String, Exception> error : list.entrySet()) { +            // label +            Label label = new Label(error.getKey()); +            controls.add(label, 0, i); + +            // reset button +            Button resetButton = new Button("View Error"); +            resetButton.setOnAction(_ -> Driver.setMenu(new ErrorDisplay("E: \n"+error.getValue(), this))); +            controls.add(resetButton, 1, i); +            i++; +        } +    } + +    @Override +    public Pane 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 86c65b5..596f433 100755 --- a/src/main/java/net/sowgro/npehero/editor/LevelList.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelList.java @@ -22,6 +22,9 @@ public class LevelList extends Page  {      private HBox content = new HBox(); +    private final Label error; +    private final HBox errorBox; +      public LevelList()      {          //sets up table view: requires special getters, setters and constructors to work @@ -61,6 +64,18 @@ public class LevelList extends Page          levels.setPrefWidth(600);          levels.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75)); +        error = new Label(); +        errorBox = new HBox(error); +        errorBox.setSpacing(10); +        errorBox.setPadding(new Insets(10)); +        errorBox.getStyleClass().addAll("box", "red"); +        errorBox.setOnMouseClicked(_ -> { +            // TODO +            Driver.setMenu(new ErrorList(Levels.problems, this)); +        }); +        refresh(); + +          Button edit = new Button("Edit");          edit.setOnAction(e -> Driver.setMenu(new LevelEditor(levels.getSelectionModel().getSelectedItem(), this)));          edit.setDisable(true); @@ -108,7 +123,7 @@ public class LevelList extends Page          Pane sidebar = new Pane();          HBox main = new HBox(); -        main.getChildren().addAll(levels,buttons,sidebar); +        main.getChildren().addAll(new VBox(levels, errorBox),buttons,sidebar);          main.setSpacing(10);          Button exit = new Button(); @@ -156,4 +171,15 @@ public class LevelList extends Page      public Pane getContent() {          return content;      } + +    public void refresh() { +        error.setText("Failed to load " + Levels.problems.size() + " level(s)"); +        if (Levels.problems.isEmpty()) { +            errorBox.setVisible(false); +            errorBox.setManaged(false); +        } else { +            errorBox.setVisible(true); +            errorBox.setManaged(true); +        } +    }  }
\ No newline at end of file diff --git a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java index b6810d8..e3db0b1 100644 --- a/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java +++ b/src/main/java/net/sowgro/npehero/editor/NotesEditor2.java @@ -173,6 +173,12 @@ public class NotesEditor2 extends Page {                  throw new RuntimeException(e);              }              diff.endTime = newEndTime.get(); +            diff.bpm = 0.0; +            try { +                diff.readMetadata(); +            } catch (IOException e) { +                // TODO +            }              Sound.playSfx(Sound.BACKWARD);              Driver.setMenu(new DiffEditor(diff, prev.prev));          }); @@ -333,6 +339,15 @@ public class NotesEditor2 extends Page {                  newEndTime.set(tmp);              }          }); + +        activeNotes.addListener((_, _, _) -> { +            if (activeNotes.isEmpty()) { +                selectionLabel.setText("Selection"); +            } +            else { +                selectionLabel.setText("Selection (" + activeNotes.size() + ")"); +            } +        });      }      @Override diff --git a/src/main/java/net/sowgro/npehero/gui/LevelDetails.java b/src/main/java/net/sowgro/npehero/gui/LevelDetails.java index 55c45bd..1ab4ae4 100755 --- a/src/main/java/net/sowgro/npehero/gui/LevelDetails.java +++ b/src/main/java/net/sowgro/npehero/gui/LevelDetails.java @@ -35,6 +35,7 @@ public class LevelDetails extends VBox          rightBox.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75));          rightBox.setMinWidth(350);          rightBox.getStyleClass().add("box"); +        rightBox.setPadding(new Insets(5));          Button play = new Button();          play.setDisable(true); @@ -59,6 +60,7 @@ public class LevelDetails extends VBox          else          {              VBox details = new VBox(); +            details.setPadding(new Insets(5));              ScrollPane detailsScroll = new ScrollPane(details);              detailsScroll.prefHeightProperty().bind(rightBox.prefHeightProperty()); diff --git a/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java b/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java index cffd95e..ea17e21 100644 --- a/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java +++ b/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java @@ -51,7 +51,7 @@ public class Difficulties {                      Difficulty diff = new Difficulty(cur, level);                      list.add(diff);                  } catch (IOException e) { -                    problems.put("", e); +                    problems.put(cur.getName(), e);                      e.printStackTrace();                  }              } diff --git a/src/main/java/net/sowgro/npehero/levelapi/Levels.java b/src/main/java/net/sowgro/npehero/levelapi/Levels.java index 84ffe51..f6251e9 100755 --- a/src/main/java/net/sowgro/npehero/levelapi/Levels.java +++ b/src/main/java/net/sowgro/npehero/levelapi/Levels.java @@ -40,7 +40,7 @@ public class Levels {                  Level level = new Level(file);                  list.add(level);              } catch (IOException e) { -                problems.put("", e); +                problems.put(file.getName(), e);                  e.printStackTrace();              }          } diff --git a/src/main/resources/net/sowgro/npehero/style.css b/src/main/resources/net/sowgro/npehero/style.css index 1637c4a..9549b43 100755 --- a/src/main/resources/net/sowgro/npehero/style.css +++ b/src/main/resources/net/sowgro/npehero/style.css @@ -11,7 +11,7 @@  }  /* buttons */ -Button, TextField, RadioButton, ToggleButton, ColorPicker { +.button, TextField, RadioButton, ToggleButton, ColorPicker {      -fx-background-color: rgba(0, 0, 0, 0.5);       -fx-text-fill: white;      -fx-border-color: transparent; @@ -22,22 +22,22 @@ Button, TextField, RadioButton, ToggleButton, ColorPicker {      /*-fx-font-weight: 800;*/  } -Button:hover, TextField:hover, RadioButton:hover, ToggleButton:hover, ColorPicker:hover { +.button:hover, TextField:hover, RadioButton:hover, ToggleButton:hover, ColorPicker:hover {      -fx-background-color: rgb(50, 50, 50, 0.5);  } -Button:focused, TextField:focused, RadioButton:focused, ToggleButton:focused, ColorPicker:focused { +.button:focused, TextField:focused, RadioButton:focused, ToggleButton:focused, ColorPicker:focused {      -fx-background-color: rgb(50, 50, 50, 0.5);      -fx-border-color: rgb(255, 255, 255);  } -Button:selected, TextField:selected, RadioButton:selected, ToggleButton:selected, ColorPicker:selected { +.button:selected, TextField:selected, RadioButton:selected, ToggleButton:selected, ColorPicker:selected {      -fx-background-color: rgb(255, 255, 255);      -fx-text-fill: rgb(0, 0, 0);  } -Button:pressed, TextField:pressed, RadioButton:pressed, ToggleButton:pressed, ColorPicker:pressed { +.button:pressed, TextField:pressed, RadioButton:pressed, ToggleButton:pressed, ColorPicker:pressed {      -fx-background-color: rgb(231, 231, 231);      -fx-border-color: transparent;      -fx-text-fill: rgb(0, 0, 0); @@ -260,3 +260,11 @@ CheckBox:selected > .box {      /* -fx-border-width: 20; */  } +.red Label { +    -fx-text-fill: red; +} + +.red:hover Label { +    -fx-underline: true; +} + | 
