aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/sowgro/npehero/editor/LevelEditor.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/sowgro/npehero/editor/LevelEditor.java')
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/editor/LevelEditor.java227
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();
}