diff options
Diffstat (limited to 'src/main/java/net/sowgro/npehero/editor/LevelEditor.java')
-rwxr-xr-x | src/main/java/net/sowgro/npehero/editor/LevelEditor.java | 227 |
1 files changed, 149 insertions, 78 deletions
diff --git a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java index 8e49180..a39911e 100755 --- a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java @@ -4,10 +4,10 @@ import java.io.File; import java.io.IOException; import javafx.beans.property.ReadOnlyStringWrapper; +import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.*; import javafx.scene.layout.*; -import javafx.scene.text.Text; import javafx.stage.FileChooser; import javafx.stage.FileChooser.ExtensionFilter; import net.sowgro.npehero.Driver; @@ -17,84 +17,146 @@ import net.sowgro.npehero.main.*; public class LevelEditor extends Page { + private final ValidIndicator songValid = new ValidIndicator(); private final ValidIndicator diffsInvalid = new ValidIndicator(); + private final TextField titleEntry; + private final TextField artistEntry; + private final TextField descEntry; + private final ColorPicker[] colorsPickers; + private final TableView<Difficulty> diffList; Level level; private HBox content = new HBox(); - private File selectedSong = null; - private File selectedPreview = null; - private File selectedBackground = null; - public LevelEditor(Level level, Page prev) { this.level = level; - Text folderNameLabel = new Text("Folder name"); + Label folderNameLabel = new Label("Folder name"); TextField folderName = new TextField(); if (level.dir != null) { folderName.setText(level.dir.getName()); folderName.setDisable(true); } - Text titleLabel = new Text("Title"); - TextField title = new TextField(level.title); - - Text artistLabel = new Text("Artist"); - TextField artist = new TextField(level.artist); + Label titleLabel = new Label("Title"); + titleEntry = new TextField(level.title); - Text descLabel = new Text("Description"); - TextField desc = new TextField(level.desc); + Label artistLabel = new Label("Artist"); + artistEntry = new TextField(level.artist); - Text colorsLabel = new Text("Colors"); + Label descLabel = new Label("Description"); + descEntry = new TextField(level.desc); - ColorPicker[] colorsPickers = new ColorPicker[] { + Label colorsLabel = new Label("Colors"); + colorsPickers = new ColorPicker[] { new ColorPicker(level.colors[0]), new ColorPicker(level.colors[1]), new ColorPicker(level.colors[2]), new ColorPicker(level.colors[3]), new ColorPicker(level.colors[4]) }; - for (ColorPicker cp : colorsPickers) { cp.getStyleClass().add("button"); + cp.setMinHeight(60); + cp.setMinWidth(60); } HBox colorPickerBox = new HBox(); colorPickerBox.getChildren().addAll(colorsPickers); + colorPickerBox.setSpacing(10); - HBox filesLabel = new HBox(new Text("Files"), songValid); - + Label backgroundLabel = new Label("Background Image"); FileChooser backgroundChooser = new FileChooser(); - backgroundChooser.getExtensionFilters().add(new ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif")); - Button backgroundButton = new Button("Background Image"); - backgroundButton.setOnAction(_ -> { + backgroundChooser.getExtensionFilters().add(new ExtensionFilter("Image Files (*.png, *.jpg, *.gif)", "*.png", "*.jpg", "*.gif")); + Button backgroundImport = new Button("Import"); + Button backgroundRemove = new Button("Remove"); + backgroundImport.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); + var f = backgroundChooser.showOpenDialog(Driver.primaryStage); + if (f == null) { + return; + } + try { + level.addFile(f, Level.BACKGROUND_FILE); + } catch (IOException e) { + // TODO + e.printStackTrace(); + } + backgroundRemove.setDisable(level.background == null); + }); + backgroundRemove.setOnAction(_ -> { Sound.playSfx(Sound.FORWARD); - selectedBackground = backgroundChooser.showOpenDialog(Driver.primaryStage); + try { + level.removeFile(Level.BACKGROUND_FILE); + } catch (IOException e) { + // TODO + e.printStackTrace(); + } + backgroundRemove.setDisable(level.background == null); }); + backgroundRemove.setDisable(level.background == null); + Label previewLabel = new Label("Preview Image"); FileChooser previewChooser = new FileChooser(); - previewChooser.getExtensionFilters().add(new ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif")); - Button previewButton = new Button("Preview Image"); - previewButton.setOnAction(_ -> { + previewChooser.getExtensionFilters().add(new ExtensionFilter("Image Files (*.png, *.jpg, *.gif)", "*.png", "*.jpg", "*.gif")); + Button previewImport = new Button("Import"); + Button previewRemove = new Button("Remove"); + previewImport.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); + var f = previewChooser.showOpenDialog(Driver.primaryStage); + if (f == null) { + return; + } + try { + level.addFile(f, Level.PREVIEW_FILE); + } catch (IOException e) { + e.printStackTrace(); // TODO + } + previewRemove.setDisable(level.preview == null); + }); + previewRemove.setOnAction(_ -> { Sound.playSfx(Sound.FORWARD); - selectedPreview = previewChooser.showOpenDialog(Driver.primaryStage); + try { + level.removeFile(Level.PREVIEW_FILE); + } catch (IOException e) { + e.printStackTrace(); // TODO + } + previewRemove.setDisable(level.preview == null); }); + previewRemove.setDisable(level.preview == null); + HBox songLabel = new HBox(new Label("Song File"), songValid); FileChooser songChooser = new FileChooser(); - songChooser.getExtensionFilters().add(new ExtensionFilter("Audio Files", "*.wav", "*.mp3", "*.aac")); - Button songButton = new Button("Song file"); - songButton.setOnAction(_ -> { + songChooser.getExtensionFilters().add(new ExtensionFilter("Audio Files (*.wav, *.mp3, *.aac)", "*.wav", "*.mp3", "*.aac")); + Button songImport = new Button("Import"); + Button songRemove = new Button("Remove"); + songImport.setOnAction(_ -> { Sound.playSfx(Sound.FORWARD); - selectedSong = songChooser.showOpenDialog(Driver.primaryStage); + var f = songChooser.showOpenDialog(Driver.primaryStage); + try { + level.addFile(f, Level.SONG_FILE); + } catch (IOException e) { + e.printStackTrace(); // TODO + } + songRemove.setDisable(level.song == null); }); + songRemove.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); + try { + level.removeFile(Level.SONG_FILE); + } catch (IOException e) { + e.printStackTrace(); // TODO + } + songRemove.setDisable(level.song == null); + }); + songRemove.setDisable(level.song == null); - - HBox diffLabel = new HBox(new Text("Difficulties"), diffsInvalid); + HBox diffLabel = new HBox(new Label("Difficulties"), diffsInvalid); diffLabel.setSpacing(5); - TableView<Difficulty> diffList = new TableView<>(); + diffList = new TableView<>(); TableColumn<Difficulty,String> diffCol = new TableColumn<>("Difficulty"); TableColumn<Difficulty,String> validCol = new TableColumn<>("Valid?"); @@ -109,7 +171,7 @@ public class LevelEditor extends Page validCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().isValid() ? "Yes" : "No")); diffList.setItems(level.difficulties.list); - diffList.setRowFactory( _ -> { + diffList.setRowFactory(_ -> { TableRow<Difficulty> row = new TableRow<>(); row.setOnMouseClicked(event -> { if (event.getClickCount() == 2 && (! row.isEmpty()) ) { @@ -128,54 +190,43 @@ public class LevelEditor extends Page diffList.setSelectionModel(null); - Button save = new Button("Save"); - save.setOnAction(e -> { //assigns fields to values - Sound.playSfx(Sound.FORWARD); - level.title = title.getText(); - level.artist = artist.getText(); - level.desc = desc.getText(); - level.colors[0] = colorsPickers[0].getValue(); - level.colors[1] = colorsPickers[1].getValue(); - level.colors[2] = colorsPickers[2].getValue(); - level.colors[3] = colorsPickers[3].getValue(); - level.colors[4] = colorsPickers[4].getValue(); - try { - if (selectedBackground != null && selectedBackground.exists()) { - level.addFile(selectedBackground, "background"); - } - if (selectedPreview != null && selectedPreview.exists()) { - level.addFile(selectedPreview, "preview"); - } - if (selectedSong != null) { - level.addFile(selectedSong, "song"); - } - } catch (Exception ex) { - // TODO - } - try { - level.writeMetadata(); - } catch (IOException ex) { - // TODO - } - validate(); - }); + var b1 = new HBox(songImport, songRemove); + b1.setSpacing(10); + var b2 = new HBox(previewImport, previewRemove); + b2.setSpacing(10); + var b3 = new HBox(backgroundImport, backgroundRemove); + b3.setSpacing(10); + VBox optionsBox = new VBox(folderNameLabel, folderName, titleLabel, titleEntry, artistLabel, artistEntry, descLabel, descEntry, + songLabel, b1, previewLabel, b2, backgroundLabel, b3, colorsLabel, colorPickerBox/*, new Separator(Orientation.HORIZONTAL), save*/); + optionsBox.setSpacing(10); +// left.setPrefWidth(300); + optionsBox.setPadding(new Insets(5)); + + ScrollPane leftScroll = new ScrollPane(optionsBox); + leftScroll.getStyleClass().remove("scroll-pane"); + leftScroll.getStyleClass().add("box"); + leftScroll.setPadding(new Insets(5)); + leftScroll.setFitToWidth(true); + leftScroll.setPrefWidth(500); + +// VBox center = new VBox(); +// center.setSpacing(10); +// center.setPrefWidth(300); + + VBox right = new VBox(diffLabel, diffList,newDiffs); + right.setSpacing(10); +// right.setPrefWidth(325); - VBox left = new VBox(filesLabel, songButton, previewButton, backgroundButton, colorsLabel, colorPickerBox); + Label optionsLable = new Label("Options"); + VBox left = new VBox(/*optionsLable, */leftScroll); left.setSpacing(10); - left.setPrefWidth(300); - - VBox center = new VBox(folderNameLabel,folderName,titleLabel,title,artistLabel,artist,descLabel,desc); - center.setSpacing(10); - center.setPrefWidth(300); - - VBox right = new VBox(diffLabel,diffList,newDiffs); - right.setSpacing(10); - center.setPrefWidth(300); HBox mainBox = new HBox(); - mainBox.getChildren().addAll(left, center, right); - mainBox.setSpacing(30); + mainBox.getChildren().addAll(left, right); + mainBox.setSpacing(10); + mainBox.prefHeightProperty().bind(content.heightProperty().multiply(0.75)); + mainBox.maxWidthProperty().bind(content.widthProperty().multiply(0.95)); Button exit = new Button(); exit.setText("Back"); @@ -184,7 +235,7 @@ public class LevelEditor extends Page Driver.setMenu(prev); }); - HBox bottom = new HBox(exit, save); + HBox bottom = new HBox(exit); bottom.setAlignment(Pos.CENTER); bottom.setSpacing(10); @@ -204,6 +255,26 @@ public class LevelEditor extends Page @Override public void onView() { + diffList.refresh(); + validate(); + } + + @Override + public void onLeave() { + Sound.playSfx(Sound.FORWARD); + level.title = titleEntry.getText(); + level.artist = artistEntry.getText(); + level.desc = descEntry.getText(); + level.colors[0] = colorsPickers[0].getValue(); + level.colors[1] = colorsPickers[1].getValue(); + level.colors[2] = colorsPickers[2].getValue(); + level.colors[3] = colorsPickers[3].getValue(); + level.colors[4] = colorsPickers[4].getValue(); + try { + level.writeMetadata(); + } catch (IOException ex) { + // TODO + } validate(); } |