Improve new project input validation, close #89

This commit is contained in:
fgnm
2023-11-16 11:12:45 +01:00
parent 1d175a5a5b
commit f809e9cd1e
6 changed files with 50 additions and 24 deletions
@@ -1,9 +1,9 @@
package games.rednblack.editor.controller.commands;
import com.kotcrab.vis.ui.util.Validators;
import games.rednblack.editor.controller.SandboxCommand;
import games.rednblack.editor.renderer.components.TransformComponent;
import games.rednblack.editor.utils.runtime.SandboxComponentRetriever;
import games.rednblack.editor.view.ui.validator.FloatInputValidator;
import games.rednblack.h2d.common.command.TransformCommandBuilder;
import games.rednblack.h2d.common.view.ui.dialog.MultipleInputDialog;
import games.rednblack.h2d.common.view.ui.listener.MultipleInputDialogListener;
@@ -19,7 +19,7 @@ public class ChangeOriginPointPosition extends SandboxCommand {
int entity = notification.getBody();
TransformComponent transformComponent = SandboxComponentRetriever.get(entity, TransformComponent.class);
MultipleInputDialog dialog = new MultipleInputDialog("Origin Position", new String[]{"X : ", "Y : "}, false, new FloatInputValidator(), new MultipleInputDialogListener() {
MultipleInputDialog dialog = new MultipleInputDialog("Origin Position", new String[]{"X : ", "Y : "}, false, new Validators.FloatValidator(), new MultipleInputDialogListener() {
@Override
public void finished(String[] input) {
TransformCommandBuilder commandBuilder = new TransformCommandBuilder();
@@ -3,6 +3,7 @@ package games.rednblack.editor.controller.commands;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.IntSet;
import com.kotcrab.vis.ui.util.Validators;
import games.rednblack.editor.controller.SandboxCommand;
import games.rednblack.editor.controller.commands.component.UpdatePolygonVerticesCommand;
import games.rednblack.editor.renderer.components.shape.PolygonShapeComponent;
@@ -10,7 +11,6 @@ import games.rednblack.editor.renderer.utils.poly.PolygonRuntimeUtils;
import games.rednblack.editor.utils.poly.PolygonUtils;
import games.rednblack.editor.utils.runtime.SandboxComponentRetriever;
import games.rednblack.editor.view.ui.followers.PolygonFollower;
import games.rednblack.editor.view.ui.validator.FloatInputValidator;
import games.rednblack.h2d.common.MsgAPI;
import games.rednblack.h2d.common.view.ui.dialog.MultipleInputDialog;
import games.rednblack.h2d.common.view.ui.listener.MultipleInputDialogListener;
@@ -35,7 +35,7 @@ public class ChangePolygonVertexPositionCommand extends SandboxCommand {
Vector2 backup = points.get(anchor).cpy();
currentCommandPayload = UpdatePolygonVerticesCommand.payloadInitialState(follower.getEntity());
MultipleInputDialog dialog = new MultipleInputDialog("Vertex Position", new String[]{"X : ", "Y : "}, false, new FloatInputValidator(), new MultipleInputDialogListener() {
MultipleInputDialog dialog = new MultipleInputDialog("Vertex Position", new String[]{"X : ", "Y : "}, false, new Validators.FloatValidator(), new MultipleInputDialogListener() {
@Override
public void finished(String[] input) {
Array<Vector2> points = polygonShapeComponent.vertices;
@@ -30,6 +30,7 @@ import com.badlogic.gdx.utils.Align;
import com.kotcrab.vis.ui.util.Validators;
import com.kotcrab.vis.ui.widget.*;
import com.kotcrab.vis.ui.widget.file.FileChooser;
import games.rednblack.editor.view.ui.validator.GreaterThanIntegerValidator;
import games.rednblack.editor.view.ui.validator.StringNameValidator;
import games.rednblack.h2d.common.H2DDialog;
import games.rednblack.h2d.common.view.ui.StandardWidgetsFactory;
@@ -52,7 +53,7 @@ public class NewProjectDialog extends H2DDialog {
private VisValidatableTextField originHeightTextField;
private String defaultWorkspacePath;
private VisValidatableTextField pixelsPerWorldUnitField;
private VisLabel worldSizeLabel;
private final VisLabel worldSizeLabel;
NewProjectDialog() {
super("Create New Project");
@@ -119,7 +120,7 @@ public class NewProjectDialog extends H2DDialog {
dimensionsTable.add(originHeightTextField).width(45).height(21).left();
dimensionsTable.add("px").left();
dimensionsTable.row().padTop(10);
pixelsPerWorldUnitField = StandardWidgetsFactory.createValidableTextField(DEFAULT_PPWU, "light", new Validators.IntegerValidator(), digitsOnlyFilter);
pixelsPerWorldUnitField = StandardWidgetsFactory.createValidableTextField(DEFAULT_PPWU, "light", new GreaterThanIntegerValidator(1, true), digitsOnlyFilter);
pixelsPerWorldUnitField.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
@@ -166,8 +167,11 @@ public class NewProjectDialog extends H2DDialog {
int originH = NumberUtils.toInt(getOriginHeight());
int ppwu = NumberUtils.toInt(getPixelPerWorldUnit(), 1);
worldSizeLabel.setText(originW / ppwu + " x " + originH / ppwu);
if (ppwu < 1) {
worldSizeLabel.setText("World Unit cannot be < 1");
} else {
worldSizeLabel.setText(originW / ppwu + " x " + originH / ppwu);
}
}
private class BtnClickListener extends ClickListener {
@@ -1,15 +0,0 @@
package games.rednblack.editor.view.ui.validator;
import com.kotcrab.vis.ui.util.InputValidator;
public class FloatInputValidator implements InputValidator {
@Override
public boolean validateInput(String input) {
try {
Float.parseFloat(input);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
}
@@ -0,0 +1,37 @@
package games.rednblack.editor.view.ui.validator;
import com.kotcrab.vis.ui.util.InputValidator;
public class GreaterThanIntegerValidator implements InputValidator {
private int greaterThan;
private boolean useEquals;
public GreaterThanIntegerValidator (int greaterThan) {
this.greaterThan = greaterThan;
}
/** @param inputCanBeEqual if true &gt;= comparison will be used, if false &gt; will be used. */
public GreaterThanIntegerValidator (int greaterThan, boolean inputCanBeEqual) {
this.greaterThan = greaterThan;
this.useEquals = inputCanBeEqual;
}
@Override
public boolean validateInput (String input) {
try {
int value = Integer.parseInt(input);
return useEquals ? value >= greaterThan : value > greaterThan;
} catch (NumberFormatException ex) {
return false;
}
}
/*** @param useEquals if true &gt;= comparison will be used, if false &gt; will be used. */
public void setUseEquals (boolean useEquals) {
this.useEquals = useEquals;
}
public void setGreaterThan (int greaterThan) {
this.greaterThan = greaterThan;
}
}