package net.sowgro.npehero.devmenu; import javafx.beans.property.ReadOnlyStringWrapper; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.*; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import net.sowgro.npehero.Driver; import net.sowgro.npehero.main.Difficulty; import net.sowgro.npehero.main.Level; import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; public class DiffList extends Page { private HBox content = new HBox(); public DiffList(Level level, Page prev) { //sets up table view: requires special getters, setters and constructors to work TableView diffs = new TableView<>(); TableColumn titleCol = new TableColumn<>("Name"); TableColumn validCol = new TableColumn<>("Valid?"); diffs.getColumns().add(titleCol); diffs.getColumns().add(validCol); titleCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().title)); validCol.setCellValueFactory(data -> { if (data.getValue().isValid) { return new ReadOnlyStringWrapper("Yes"); } else { return new ReadOnlyStringWrapper("No"); } }); diffs.setItems(level.difficulties.list); diffs.setRowFactory( _ -> { TableRow row = new TableRow<>(); row.setOnMouseClicked(event -> { if (event.getClickCount() == 2 && (! row.isEmpty()) ) { Difficulty rowData = row.getItem(); Driver.setMenu(new DiffEditor(rowData, this)); } }); return row ; }); diffs.setPrefWidth(400); diffs.prefHeightProperty().bind(content.prefHeightProperty().multiply(0.67)); Button edit = new Button("Edit"); edit.setOnAction(e -> 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 -> level.difficulties.remove(diffs.getSelectionModel().getSelectedItem())); remove.setDisable(true); remove.disableProperty().bind(diffs.getSelectionModel().selectedItemProperty().isNull()); Button refresh = new Button("Refresh"); refresh.setOnAction(e -> { level.readData(); diffs.setItems(level.difficulties.list); }); ToggleButton create = new ToggleButton("Create"); VBox buttons = new VBox(); buttons.getChildren().addAll(create, edit, remove, 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(diffs,buttons, sidebar); main.setSpacing(10); Button exit = new Button(); exit.setText("Back"); exit.setOnAction(e -> { Sound.playSfx(Sound.BACKWARD); Driver.setMenu(prev); }); create.setOnAction(_ -> { if (create.isSelected()) { sidebar.getChildren().add(newLevelBox); } else { sidebar.getChildren().remove(newLevelBox); } }); newLevelButton.setOnAction(_ -> { level.difficulties.add(newLevelEntry.getText()); newLevelEntry.clear(); refresh.fire(); sidebar.getChildren().clear(); create.setSelected(false); }); VBox centerBox = new VBox(); centerBox.getChildren().addAll(main, exit); centerBox.setSpacing(10); centerBox.setAlignment(Pos.CENTER); content.getChildren().add(centerBox); content.setAlignment(Pos.CENTER); } @Override public Pane getContent() { return content; } }