240 lines
8.6 KiB
Java
240 lines
8.6 KiB
Java
/*
|
|
* Copyright (c) 2017, bandie
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright notice, this
|
|
* list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
package org.bandie.circleart;
|
|
|
|
import javafx.application.Application;
|
|
import javafx.event.ActionEvent;
|
|
import javafx.event.EventHandler;
|
|
import javafx.geometry.Insets;
|
|
import javafx.scene.Scene;
|
|
import javafx.scene.control.CheckBox;
|
|
import javafx.scene.control.Label;
|
|
import javafx.scene.control.RadioButton;
|
|
import javafx.scene.control.Slider;
|
|
import javafx.scene.control.TextField;
|
|
import javafx.scene.control.ToggleGroup;
|
|
import javafx.scene.input.KeyCode;
|
|
import javafx.scene.input.KeyEvent;
|
|
import javafx.scene.layout.BorderPane;
|
|
import javafx.scene.layout.GridPane;
|
|
import javafx.scene.paint.Color;
|
|
import javafx.stage.Stage;
|
|
|
|
/**
|
|
*
|
|
* @author bandie
|
|
*/
|
|
public class SettingsGUI extends Application {
|
|
|
|
public void start(Stage stage) {
|
|
|
|
//stage.initOwner(CircleArtGUI.STAGE);
|
|
GridPane gp = new GridPane();
|
|
BorderPane bp = new BorderPane();
|
|
gp.setMaxSize(640, 480);
|
|
|
|
//Circle Size
|
|
Label lSize = new Label(CircleArt.MSGS.getString("SETTINGS_CIRC_SIZE"));
|
|
lSize.setStyle("-fx-font-weight: bold");
|
|
Label lSizePX = new Label("px");
|
|
Slider sSize = new Slider();
|
|
TextField tfSize = new TextField(Integer.toString(CircleArtGUI.P.getSizeMode()));
|
|
tfSize.setPrefColumnCount(2);
|
|
tfSize.textProperty().addListener((ov, t, t1) -> {
|
|
try {
|
|
CircleArtGUI.P.setSizeMode(Integer.parseInt(ov.getValue()));
|
|
sSize.setValue(Integer.parseInt(ov.getValue()));
|
|
} catch (NumberFormatException e) {
|
|
|
|
}
|
|
});
|
|
sSize.setMax(600);
|
|
sSize.setMin(0);
|
|
sSize.setShowTickLabels(true);
|
|
sSize.setShowTickMarks(true);
|
|
sSize.setMajorTickUnit(200);
|
|
sSize.setMinorTickCount(100);
|
|
sSize.setValue(CircleArtGUI.P.getSizeMode());
|
|
sSize.valueProperty().addListener(cl -> {
|
|
CircleArtGUI.P.setSizeMode((int) sSize.getValue());
|
|
tfSize.setText(Integer.toString(CircleArtGUI.P.getSizeMode()));
|
|
});
|
|
|
|
//Circle sin rythm
|
|
Label lDistance = new Label(CircleArt.MSGS.getString("SETTINGS_DIST"));
|
|
lDistance.setStyle("-fx-font-weight: bold");
|
|
Label lDistancePX = new Label("px");
|
|
Slider sDistance = new Slider();
|
|
TextField tfDistance = new TextField(Integer.toString(CircleArtGUI.P.getDistance()));
|
|
tfDistance.setPrefColumnCount(2);
|
|
tfDistance.textProperty().addListener((ov, t, t1) -> {
|
|
try {
|
|
CircleArtGUI.P.setDistance(Integer.parseInt(ov.getValue()));
|
|
sDistance.setValue(Integer.parseInt(ov.getValue()));
|
|
} catch (NumberFormatException e) {
|
|
|
|
}
|
|
});
|
|
sDistance.setMax(600);
|
|
sDistance.setMin(0);
|
|
sDistance.setShowTickLabels(true);
|
|
sDistance.setShowTickMarks(true);
|
|
sDistance.setMajorTickUnit(200);
|
|
sDistance.setMinorTickCount(100);
|
|
sDistance.setValue(CircleArtGUI.P.getDistance());
|
|
sDistance.valueProperty().addListener(cl -> {
|
|
CircleArtGUI.P.setDistance((int) sDistance.getValue());
|
|
tfDistance.setText(Integer.toString(CircleArtGUI.P.getDistance()));
|
|
});
|
|
|
|
//Y-Switch
|
|
Label lDir=new Label(CircleArt.MSGS.getString("SETTINGS_DIR"));
|
|
lDir.setStyle("-fx-font-weight: bold");
|
|
CheckBox cbY = new CheckBox(CircleArt.MSGS.getString("SETTINGS_Y"));
|
|
cbY.setSelected(CircleArtGUI.P.isIsUsingY());
|
|
cbY.setOnAction(eh -> {
|
|
CircleArtGUI.P.setIsUsingY(cbY.isSelected());
|
|
});
|
|
|
|
//COLORS
|
|
Label lColor = new Label(CircleArt.MSGS.getString("SETTINGS_COLOR"));
|
|
lColor.setStyle("-fx-font-weight: bold");
|
|
Label lRed = new Label(CircleArt.MSGS.getString("RED"));
|
|
lRed.setTextFill(Color.DARKRED);
|
|
Label lGreen = new Label(CircleArt.MSGS.getString("GREEN"));
|
|
lGreen.setTextFill(Color.DARKGREEN);
|
|
Label lBlue = new Label(CircleArt.MSGS.getString("BLUE"));
|
|
lBlue.setTextFill(Color.DARKBLUE);
|
|
int[] cm = CircleArtGUI.P.getColorMode();
|
|
//Red
|
|
ToggleGroup red = new ToggleGroup();
|
|
RadioButton[] r = new RadioButton[3];
|
|
r[0] = new RadioButton("(x+y) mod 256");
|
|
r[1] = new RadioButton("|x-y| mod 256");
|
|
r[2] = new RadioButton("x*y mod 256");
|
|
r[cm[0]].setSelected(true);
|
|
for (int i = 0; i < 3; i++) {
|
|
r[i].setToggleGroup(red);
|
|
}
|
|
r[0].setOnAction(eh -> {
|
|
CircleArtGUI.P.setColorMode(Pen.RGB.RED, 0);
|
|
});
|
|
r[1].setOnAction(eh -> {
|
|
CircleArtGUI.P.setColorMode(Pen.RGB.RED, 1);
|
|
});
|
|
r[2].setOnAction(eh -> {
|
|
CircleArtGUI.P.setColorMode(Pen.RGB.RED, 2);
|
|
});
|
|
//Green
|
|
ToggleGroup green = new ToggleGroup();
|
|
RadioButton[] g = new RadioButton[3];
|
|
g[0] = new RadioButton("(x+y) mod 256");
|
|
g[1] = new RadioButton("|x-y| mod 256");
|
|
g[2] = new RadioButton("x*y mod 256");
|
|
g[cm[1]].setSelected(true);
|
|
for (int i = 0; i < 3; i++) {
|
|
g[i].setToggleGroup(green);
|
|
}
|
|
g[0].setOnAction(eh -> {
|
|
CircleArtGUI.P.setColorMode(Pen.RGB.GREEN, 0);
|
|
});
|
|
g[1].setOnAction(eh -> {
|
|
CircleArtGUI.P.setColorMode(Pen.RGB.GREEN, 1);
|
|
});
|
|
g[2].setOnAction(eh -> {
|
|
CircleArtGUI.P.setColorMode(Pen.RGB.GREEN, 2);
|
|
});
|
|
//Blue
|
|
ToggleGroup blue = new ToggleGroup();
|
|
RadioButton[] b = new RadioButton[3];
|
|
b[0] = new RadioButton("(x+y) mod 256");
|
|
b[1] = new RadioButton("|x-y| mod 256");
|
|
b[2] = new RadioButton("x*y mod 256");
|
|
b[cm[2]].setSelected(true);
|
|
for (int i = 0; i < 3; i++) {
|
|
b[i].setToggleGroup(blue);
|
|
}
|
|
b[0].setOnAction(eh -> {
|
|
CircleArtGUI.P.setColorMode(Pen.RGB.BLUE, 0);
|
|
});
|
|
b[1].setOnAction(eh -> {
|
|
CircleArtGUI.P.setColorMode(Pen.RGB.BLUE, 1);
|
|
});
|
|
b[2].setOnAction(eh -> {
|
|
CircleArtGUI.P.setColorMode(Pen.RGB.BLUE, 2);
|
|
});
|
|
|
|
gp.setMinSize(320, 160);
|
|
gp.setVgap(10);
|
|
gp.setHgap(10);
|
|
|
|
//Size
|
|
gp.add(lSize, 0, 0);
|
|
gp.add(sSize, 0, 1);
|
|
gp.add(tfSize, 1, 1);
|
|
gp.add(lSizePX, 2, 1);
|
|
//Distance
|
|
gp.add(lDistance, 0, 2);
|
|
gp.add(sDistance, 0, 3);
|
|
gp.add(tfDistance, 1, 3);
|
|
gp.add(lDistancePX, 2, 3);
|
|
//Y-Switch
|
|
gp.add(lDir, 0, 4);
|
|
gp.add(cbY, 0, 5);
|
|
//RGB
|
|
gp.add(lColor, 0, 6);
|
|
gp.add(lRed, 0, 7);
|
|
gp.add(r[0], 0, 8);
|
|
gp.add(r[1], 1, 8);
|
|
gp.add(r[2], 2, 8);
|
|
gp.add(lGreen, 0, 9);
|
|
gp.add(g[0], 0, 10);
|
|
gp.add(g[1], 1, 10);
|
|
gp.add(g[2], 2, 10);
|
|
gp.add(lBlue, 0, 11);
|
|
gp.add(b[0], 0, 12);
|
|
gp.add(b[1], 1, 12);
|
|
gp.add(b[2], 2, 12);
|
|
|
|
bp.setCenter(gp);
|
|
bp.setPadding(new Insets(10));
|
|
|
|
Scene settings = new Scene(bp);
|
|
|
|
settings.addEventHandler(KeyEvent.KEY_PRESSED, eh -> {
|
|
if (eh.getCode() == KeyCode.ESCAPE) {
|
|
stage.close();
|
|
}
|
|
});
|
|
|
|
stage.setScene(settings);
|
|
stage.setTitle(CircleArt.MSGS.getString("SETTINGS_TITLE"));
|
|
stage.show();
|
|
|
|
}
|
|
|
|
}
|