diff options
4 files changed, 94 insertions, 66 deletions
| diff --git a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java index c4bcdbb..8f2df76 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java @@ -160,9 +160,7 @@ public class DiffEditor extends Page      @Override      public void onView() { -        if (diff.notes.list.isEmpty()) { -            validNotes.setInvalid("This difficulty does not contain any notes!"); -        } +        update();      }      @Override @@ -174,4 +172,12 @@ public class DiffEditor extends Page              e.printStackTrace(); //TODO          }      } + +    private void update() { +        if (diff.notes.list.isEmpty()) { +            validNotes.setInvalid("This difficulty does not contain any notes!"); +        } else { +            validNotes.setValid(); +        } +    }  }
\ No newline at end of file diff --git a/src/main/java/net/sowgro/npehero/editor/DiffList.java b/src/main/java/net/sowgro/npehero/editor/DiffList.java index ab28af9..3a94d0f 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffList.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffList.java @@ -25,28 +25,29 @@ public class DiffList extends Page      private final Button error;      private final HBox content = new HBox();      private final Level level; +    private final TableView<Difficulty> diffsTable;      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<>(); +        diffsTable = new TableView<>();          TableColumn<Difficulty,String> titleCol = new TableColumn<>("Name");          TableColumn<Difficulty,String> validCol = new TableColumn<>("Valid?"); -        titleCol.prefWidthProperty().bind(diffs.widthProperty().multiply(0.5)); -        validCol.prefWidthProperty().bind(diffs.widthProperty().multiply(0.4)); +        titleCol.prefWidthProperty().bind(diffsTable.widthProperty().multiply(0.5)); +        validCol.prefWidthProperty().bind(diffsTable.widthProperty().multiply(0.4)); -        diffs.getColumns().add(titleCol); -        diffs.getColumns().add(validCol); +        diffsTable.getColumns().add(titleCol); +        diffsTable.getColumns().add(validCol);          titleCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().title));          validCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().isValid() ? "Yes" : "No")); -        diffs.setItems(level.difficulties.list); +        diffsTable.setItems(level.difficulties.list); -        diffs.setRowFactory( _ -> { +        diffsTable.setRowFactory(_ -> {              TableRow<Difficulty> row = new TableRow<>();              row.setOnMouseClicked(event -> {                  if (event.getClickCount() == 2 && (! row.isEmpty()) ) { @@ -57,35 +58,36 @@ public class DiffList extends Page              return row ;          }); -        diffs.setPrefWidth(400); +        diffsTable.setPrefWidth(400);          error = new Button();          error.getStyleClass().add("red");          error.setOnAction(_ -> { +            Sound.playSfx(Sound.FORWARD);              // TODO              Driver.setMenu(new ErrorList(level.difficulties.problems, this));          }); -        refresh(); +        update();          Button edit = new Button("Edit");          edit.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD); -            Driver.setMenu(new DiffEditor(diffs.getSelectionModel().getSelectedItem(), this)); +            Driver.setMenu(new DiffEditor(diffsTable.getSelectionModel().getSelectedItem(), this));          });          edit.setDisable(true); -        edit.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull()); +        edit.disableProperty().bind(diffsTable.getSelectionModel().selectedItemProperty().isNull());          Button remove = new Button("Delete");          remove.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD);              try { -                level.difficulties.remove(diffs.getSelectionModel().getSelectedItem()); +                level.difficulties.remove(diffsTable.getSelectionModel().getSelectedItem());              } catch (IOException ex) {                  Driver.setMenu(new ErrorDisplay("Failed to remove difficulty", ex, this));              }          });          remove.setDisable(true); -        remove.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull()); +        remove.disableProperty().bind(diffsTable.getSelectionModel().selectedItemProperty().isNull());          Button refresh = new Button("Refresh");          refresh.setOnAction(_ -> { @@ -95,18 +97,16 @@ public class DiffList extends Page              } catch (IOException ex) {                  // TODO              } -//            diffs.setItems(level.difficulties.list.sorted()); -            diffs.refresh(); -            refresh(); +            update();          }); -        ToggleButton create = new ToggleButton("Create"); +        Button create = new Button("Create");          Button moveUp = new Button("Move Up"); -        moveUp.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull()); +        moveUp.disableProperty().bind(diffsTable.getSelectionModel().selectedItemProperty().isNull());          moveUp.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD); -            Difficulty diff = diffs.getSelectionModel().selectedItemProperty().get(); +            Difficulty diff = diffsTable.getSelectionModel().selectedItemProperty().get();              ObservableList<Difficulty> diffList = level.difficulties.list;              int oldIndex = diffList.indexOf(diff);              if (oldIndex <= 0) { @@ -121,10 +121,10 @@ public class DiffList extends Page          });          Button moveDown = new Button("Move Down"); -        moveDown.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull()); +        moveDown.disableProperty().bind(diffsTable.getSelectionModel().selectedItemProperty().isNull());          moveDown.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD); -            Difficulty diff = diffs.getSelectionModel().selectedItemProperty().get(); +            Difficulty diff = diffsTable.getSelectionModel().selectedItemProperty().get();              ObservableList<Difficulty> diffList = level.difficulties.list;              int oldIndex = diffList.indexOf(diff);              if (oldIndex >= diffList.size()-1) { @@ -147,10 +147,10 @@ public class DiffList extends Page          bp.setBottom(error);          HBox main = new HBox(); -        main.getChildren().addAll(diffs, bp); +        main.getChildren().addAll(diffsTable, bp);          main.setSpacing(10);          main.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.67)); -        diffs.prefHeightProperty().bind(main.heightProperty()); +        diffsTable.prefHeightProperty().bind(main.heightProperty());          Button exit = new Button();          exit.setText("Back"); @@ -189,7 +189,13 @@ public class DiffList extends Page          return content;      } -    public void refresh() { +    @Override +    public void onView() { +        update(); +    } + +    public void update() { +        diffsTable.refresh();          error.setText("Failed to load " + level.difficulties.problems.size() + " difficulty(s)");          if (level.difficulties.problems.isEmpty()) {              error.setVisible(false); diff --git a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java index 1f30006..f255705 100755 --- a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java @@ -32,7 +32,6 @@ public class LevelEditor extends Page          }      } -      public LevelEditor(Level level, Page prev) {          this.level = level; @@ -67,21 +66,21 @@ public class LevelEditor extends Page          Node songFile = createFileImportBox(                  Level.SONG_FILE, -                level.song, +                () -> level.song,                  "Audio Files (*.wav, *.mp3, *.aac)",                  new String[]{"*.wav", "*.mp3", "*.aac"}          );          Node previewImage = createFileImportBox(                  Level.PREVIEW_FILE, -                level.preview, +                () -> level.preview,                  "Image Files (*.png, *.jpg, *.gif)",                  new String[]{"*.png", "*.jpg", "*.gif"}          );          Node backgroundImage = createFileImportBox(                  Level.BACKGROUND_FILE, -                level.background, +                () -> level.background,                  "Image Files (*.png, *.jpg, *.gif)",                  new String[]{"*.png", "*.jpg", "*.gif"}          ); @@ -167,18 +166,7 @@ public class LevelEditor extends Page      @Override      public void onView() { -        // validate -        if (level.difficulties.getValidList().isEmpty()) { -            diffsInvalid.setInvalid("This level contains no valid difficulties!"); -        } else { -            diffsInvalid.setValid(); -        } - -        if (level.song == null) { -            songValid.setInvalid("Missing song file!"); -        } else { -            songValid.setValid(); -        } +        update();      }      @Override @@ -198,7 +186,25 @@ public class LevelEditor extends Page          }      } -    private Node createFileImportBox(String filename, Object dest, String extDesc, String[] extensions) { +    private void update() { +        if (level.difficulties.getValidList().isEmpty()) { +            diffsInvalid.setInvalid("This level contains no valid difficulties!"); +        } else { +            diffsInvalid.setValid(); +        } + +        if (level.song == null) { +            songValid.setInvalid("Missing song file!"); +        } else { +            songValid.setValid(); +        } +    } + +    interface Callback { +        Object get(); +    } + +    private Node createFileImportBox(String filename, Callback destField, String extDesc, String[] extensions) {          FileChooser fileChooser = new FileChooser();          fileChooser.getExtensionFilters().add(new ExtensionFilter(extDesc, extensions));          Button importButton = new Button("Import"); @@ -214,7 +220,8 @@ public class LevelEditor extends Page              } catch (IOException e) {                  e.printStackTrace(); // TODO              } -            removeButton.setDisable(dest == null); +            removeButton.setDisable(destField.get() == null); +            update();          });          removeButton.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD); @@ -223,9 +230,10 @@ public class LevelEditor extends Page              } catch (IOException e) {                  e.printStackTrace(); // TODO              } -            removeButton.setDisable(dest == null); +            removeButton.setDisable(destField.get() == null); +            update();          }); -        removeButton.setDisable(dest == null); +        removeButton.setDisable(destField.get() == null);          var b1 = new HBox(importButton, removeButton);          b1.setSpacing(10); diff --git a/src/main/java/net/sowgro/npehero/editor/LevelList.java b/src/main/java/net/sowgro/npehero/editor/LevelList.java index 22144a4..843b87d 100755 --- a/src/main/java/net/sowgro/npehero/editor/LevelList.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelList.java @@ -23,23 +23,24 @@ public class LevelList extends Page      private final HBox content = new HBox();      private final Button error; +    private final TableView<Level> levelsTable;      public LevelList()      {          //sets up table view: requires special getters, setters and constructors to work -        TableView<Level> levels = new TableView<>(); +        levelsTable = new TableView<>();          TableColumn<Level,String> titleCol = new TableColumn<>("Title");          TableColumn<Level,String> artistCol = new TableColumn<>("Artist");          TableColumn<Level,String> validCol = new TableColumn<>("Valid?"); -        titleCol.prefWidthProperty().bind(levels.widthProperty().multiply(0.4)); -        artistCol.prefWidthProperty().bind(levels.widthProperty().multiply(0.4)); -        validCol.prefWidthProperty().bind(levels.widthProperty().multiply(0.15)); +        titleCol.prefWidthProperty().bind(levelsTable.widthProperty().multiply(0.4)); +        artistCol.prefWidthProperty().bind(levelsTable.widthProperty().multiply(0.4)); +        validCol.prefWidthProperty().bind(levelsTable.widthProperty().multiply(0.15)); -        levels.getColumns().add(titleCol); -        levels.getColumns().add(artistCol); -        levels.getColumns().add(validCol); +        levelsTable.getColumns().add(titleCol); +        levelsTable.getColumns().add(artistCol); +        levelsTable.getColumns().add(validCol);          titleCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().title));          artistCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().artist)); @@ -52,9 +53,9 @@ public class LevelList extends Page              }          }); -        levels.setItems(Levels.list); +        levelsTable.setItems(Levels.list); -        levels.setRowFactory( _ -> { +        levelsTable.setRowFactory(_ -> {              TableRow<Level> row = new TableRow<>();              row.setOnMouseClicked(event -> {                  if (event.getClickCount() == 2 && (! row.isEmpty()) ) { @@ -64,36 +65,37 @@ public class LevelList extends Page              });              return row ;          }); -        levels.setPrefWidth(600); -        levels.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75)); +        levelsTable.setPrefWidth(600); +        levelsTable.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.75));          error = new Button();          error.getStyleClass().add("red");          error.setOnAction(_ -> { +            Sound.playSfx(Sound.FORWARD);              // TODO              Driver.setMenu(new ErrorList(Levels.problems, this));          }); -        refresh(); +        update();          Button edit = new Button("Edit");          edit.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD); -            Driver.setMenu(new LevelEditor(levels.getSelectionModel().getSelectedItem(), this)); +            Driver.setMenu(new LevelEditor(levelsTable.getSelectionModel().getSelectedItem(), this));          });          edit.setDisable(true); -        edit.disableProperty().bind(levels.getSelectionModel().selectedItemProperty().isNull()); +        edit.disableProperty().bind(levelsTable.getSelectionModel().selectedItemProperty().isNull());          Button remove = new Button("Delete");          remove.setOnAction(_ -> {              Sound.playSfx(Sound.FORWARD);              try { -                Levels.remove(levels.getSelectionModel().getSelectedItem()); +                Levels.remove(levelsTable.getSelectionModel().getSelectedItem());              } catch (IOException ex) {                  Driver.setMenu(new ErrorDisplay("Failed to remove this level", ex, this));              }          });          remove.setDisable(true); -        remove.disableProperty().bind(levels.getSelectionModel().selectedItemProperty().isNull()); +        remove.disableProperty().bind(levelsTable.getSelectionModel().selectedItemProperty().isNull());          Button refresh = new Button("Refresh");          refresh.setOnAction(_ -> { @@ -103,7 +105,7 @@ public class LevelList extends Page              } catch (IOException ex) {                  Driver.setMenu(new ErrorDisplay("Failed to load levels: Level folder is missing", ex, this));              } -            levels.setItems(Levels.list); +            update();          });          Button create = new Button("Create"); @@ -127,7 +129,7 @@ public class LevelList extends Page          bp.setBottom(error);          HBox main = new HBox(); -        main.getChildren().addAll(levels, bp); +        main.getChildren().addAll(levelsTable, bp);          main.setSpacing(10);          Button exit = new Button(); @@ -167,7 +169,13 @@ public class LevelList extends Page          return content;      } -    public void refresh() { +    @Override +    public void onView() { +        update(); +    } + +    public void update() { +        levelsTable.refresh();          error.setText(Levels.problems.size() + " Failed");          if (Levels.problems.isEmpty()) {              error.setVisible(false); | 
