aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/sowgro/npehero/gui/ControlEditor.java
blob: 637a9d89ea33e49bdf54081067a4e922350431c9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package net.sowgro.npehero.gui;

import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane;
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.Control;
import net.sowgro.npehero.main.SoundController;
import org.w3c.dom.events.Event;

public class ControlEditor extends Pane {
    public ControlEditor() {

        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.setHgap(40);
        controls.setVgap(20);


        scrollPane.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.35));
        scrollPane.setMinWidth(400);
        scrollPane.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75));

        Button exit = new Button();
        exit.setText("Back");
        exit.setOnAction(e -> {
            SoundController.playSfx(SoundController.BACKWARD);
            Driver.setMenu(new Settings());
        });

        VBox centerBox = new VBox();
        centerBox.setAlignment(Pos.CENTER);
        centerBox.setSpacing(10);
        centerBox.getChildren().addAll(scrollPane,exit);
        centerBox.setMinWidth(400);

        HBox rootBox = new HBox();
        rootBox.prefWidthProperty().bind(super.prefWidthProperty());
        rootBox.prefHeightProperty().bind(super.prefHeightProperty());
        rootBox.getChildren().add(centerBox);
        rootBox.setAlignment(Pos.CENTER);

        ToggleGroup tg = new ToggleGroup();
        for (int i = 0; i < Control.values().length; i++) {
            Control control = Control.values()[i];


            // label
            Label label = new Label(control.label);
            controls.add(label, 0, i);

            // control button
            ToggleButton controlButton = new ToggleButton("<err>");
            controlButton.setText(keyToString(control.keyProperty.get()));
            control.keyProperty.addListener(_ -> {
                System.out.println(control.label + " set to " + control.keyProperty.get());
                System.out.println(controlButton.getText());
                controlButton.setText(keyToString(control.keyProperty.get()));
                net.sowgro.npehero.main.Control.writeToFile();
            });
            controlButton.setOnMouseClicked(_ -> {
                EventHandler<KeyEvent> keyListener = new EventHandler<>() {
                    @Override
                    public void handle(KeyEvent k) {
                        control.keyProperty.set(k.getCode());
                        rootBox.removeEventFilter(KeyEvent.KEY_PRESSED, this);
                        controlButton.setSelected(false);
                        k.consume();
                    }
                };
                if (controlButton.isSelected()) {
                    System.out.println("Event registered");
                    rootBox.addEventFilter(KeyEvent.KEY_PRESSED, keyListener);
                }
                else {
                    System.out.println("Event un-registered");
                    rootBox.removeEventFilter(KeyEvent.KEY_PRESSED, keyListener);
                }
            });
            tg.getToggles().add(controlButton);
            controls.add(controlButton, 1, i);

            // label button
            Button resetButton = new Button("Reset");
            resetButton.setOnMouseClicked(_ -> {
                control.keyProperty.set(control.defaultKey);
            });
            controls.add(resetButton, 2, i);

        }

        super.getChildren().add(rootBox);
    }

    public String keyToString(KeyCode key) {
        if (key == null) {
            return "<unset>";
        }
        else {
            return key.toString();
        }
    }
}