diff --git a/controlsfx-samples/src/main/resources/org/controlsfx/samples/validation.css b/controlsfx-samples/src/main/resources/org/controlsfx/samples/validation.css index 9eb7a4d60..6c3352cd9 100644 --- a/controlsfx-samples/src/main/resources/org/controlsfx/samples/validation.css +++ b/controlsfx-samples/src/main/resources/org/controlsfx/samples/validation.css @@ -4,4 +4,8 @@ .warning { -fx-effect: dropshadow(three-pass-box, gold, 14, 0, 0, 0); +} + +.info { + -fx-effect: dropshadow(three-pass-box, rgba(196, 208, 239, 0.7), 14, 0, 0, 0); } \ No newline at end of file diff --git a/controlsfx/src/main/java/org/controlsfx/validation/Severity.java b/controlsfx/src/main/java/org/controlsfx/validation/Severity.java index d28948f9e..677327807 100644 --- a/controlsfx/src/main/java/org/controlsfx/validation/Severity.java +++ b/controlsfx/src/main/java/org/controlsfx/validation/Severity.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014, 2018 ControlsFX + * Copyright (c) 2014, 2019 ControlsFX * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,6 +30,8 @@ * Defines severity of validation messages */ public enum Severity { + OK, + INFO, WARNING, ERROR } diff --git a/controlsfx/src/main/java/org/controlsfx/validation/ValidationMessage.java b/controlsfx/src/main/java/org/controlsfx/validation/ValidationMessage.java index 4b836d6db..7471566b9 100644 --- a/controlsfx/src/main/java/org/controlsfx/validation/ValidationMessage.java +++ b/controlsfx/src/main/java/org/controlsfx/validation/ValidationMessage.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014, 2015, ControlsFX + * Copyright (c) 2014, 2019, ControlsFX * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -84,6 +84,35 @@ public static ValidationMessage error( Control target, String text ) { public static ValidationMessage warning( Control target, String text ) { return new SimpleValidationMessage(target, text, Severity.WARNING); } + + /** + * Factory method to create a simple info message + * @param target message target + * @param text message text + * @return info message + */ + public static ValidationMessage info( Control target , String text ) { + return new SimpleValidationMessage(target, text, Severity.INFO); + } + + /** + * Factory method to create a simple ok message + * @param target message target + * @param text message text + * @return ok message + */ + public static ValidationMessage ok( Control target , String text ) { + return new SimpleValidationMessage(target, text, Severity.OK); + } + + /** + * Factory method to create a simple ok message + * @param target message target + * @return ok message + */ + public static ValidationMessage ok( Control target ) { + return new SimpleValidationMessage(target, "", Severity.OK); + } @Override default public int compareTo(ValidationMessage msg) { return msg == null || getTarget() != msg.getTarget() ? -1: getSeverity().compareTo(msg.getSeverity()); diff --git a/controlsfx/src/main/java/org/controlsfx/validation/decoration/GraphicValidationDecoration.java b/controlsfx/src/main/java/org/controlsfx/validation/decoration/GraphicValidationDecoration.java index febfbaa4c..44239a9f5 100644 --- a/controlsfx/src/main/java/org/controlsfx/validation/decoration/GraphicValidationDecoration.java +++ b/controlsfx/src/main/java/org/controlsfx/validation/decoration/GraphicValidationDecoration.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014, 2015, ControlsFX + * Copyright (c) 2014, 2019, ControlsFX * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -60,6 +60,7 @@ public class GraphicValidationDecoration extends AbstractValidationDecoration { private static final Image ERROR_IMAGE = new Image(GraphicValidationDecoration.class.getResource("/impl/org/controlsfx/control/validation/decoration-error.png").toExternalForm()); //$NON-NLS-1$ private static final Image WARNING_IMAGE = new Image(GraphicValidationDecoration.class.getResource("/impl/org/controlsfx/control/validation/decoration-warning.png").toExternalForm()); //$NON-NLS-1$ + private static final Image INFO_IMAGE = new Image(GraphicValidationDecoration.class.getResource("/impl/org/controlsfx/control/validation/decoration-info.png").toExternalForm()); //$NON-NLS-1$ private static final Image REQUIRED_IMAGE = new Image(GraphicValidationDecoration.class.getResource("/impl/org/controlsfx/control/validation/required-indicator.png").toExternalForm()); //$NON-NLS-1$ private static final String SHADOW_EFFECT = "-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.8), 10, 0, 0, 0);"; //$NON-NLS-1$ @@ -72,6 +73,9 @@ public class GraphicValidationDecoration extends AbstractValidationDecoration { private static final String WARNING_TOOLTIP_EFFECT = POPUP_SHADOW_EFFECT + TOOLTIP_COMMON_EFFECTS + "-fx-background-color: FFFFCC; -fx-text-fill: CC9900; -fx-border-color: CC9900;"; //$NON-NLS-1$ + private static final String INFO_TOOLTIP_EFFECT = POPUP_SHADOW_EFFECT + TOOLTIP_COMMON_EFFECTS + + "-fx-background-color: c4d0ef; -fx-text-fill: FFFFFF; -fx-border-color: a8c8ff;"; //$NON-NLS-1$ + /** * Creates default instance */ @@ -80,17 +84,25 @@ public GraphicValidationDecoration() { } // TODO write javadoc that users should override these methods to customise - // the error / warning / success nodes to use + // the error / warning / success nodes to use + /** + * @deprecated See {@link #getGraphicBySeverity(Severity)} method + */ + @Deprecated protected Node createErrorNode() { return new ImageView(ERROR_IMAGE); } + /** + * @deprecated See {@link #getGraphicBySeverity(Severity)} method + */ + @Deprecated protected Node createWarningNode() { return new ImageView(WARNING_IMAGE); } protected Node createDecorationNode(ValidationMessage message) { - Node graphic = Severity.ERROR == message.getSeverity() ? createErrorNode() : createWarningNode(); + Node graphic = getGraphicBySeverity(message.getSeverity()); graphic.setStyle(SHADOW_EFFECT); Label label = new Label(); label.setGraphic(graphic); @@ -99,14 +111,36 @@ protected Node createDecorationNode(ValidationMessage message) { return label; } + protected Node getGraphicBySeverity(Severity severity) { + switch (severity) { + case ERROR: + return createErrorNode(); + case WARNING: + return createWarningNode(); + default: + return new ImageView(INFO_IMAGE); + } + } + protected Tooltip createTooltip(ValidationMessage message) { Tooltip tooltip = new Tooltip(message.getText()); tooltip.setOpacity(.9); tooltip.setAutoFix(true); - tooltip.setStyle( Severity.ERROR == message.getSeverity()? ERROR_TOOLTIP_EFFECT: WARNING_TOOLTIP_EFFECT); + tooltip.setStyle(getStyleBySeverity(message.getSeverity())); return tooltip; } + protected String getStyleBySeverity(Severity severity) { + switch (severity) { + case ERROR: + return ERROR_TOOLTIP_EFFECT; + case WARNING: + return WARNING_TOOLTIP_EFFECT; + default: + return INFO_TOOLTIP_EFFECT; + } + } + /** * {@inheritDoc} */ diff --git a/controlsfx/src/main/java/org/controlsfx/validation/decoration/StyleClassValidationDecoration.java b/controlsfx/src/main/java/org/controlsfx/validation/decoration/StyleClassValidationDecoration.java index 01f0b81e2..cdc71ada3 100644 --- a/controlsfx/src/main/java/org/controlsfx/validation/decoration/StyleClassValidationDecoration.java +++ b/controlsfx/src/main/java/org/controlsfx/validation/decoration/StyleClassValidationDecoration.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2014, 2015, ControlsFX + * Copyright (c) 2014, 2019, ControlsFX * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -34,7 +34,6 @@ import org.controlsfx.control.decoration.Decoration; import org.controlsfx.control.decoration.StyleClassDecoration; -import org.controlsfx.validation.Severity; import org.controlsfx.validation.ValidationMessage; /** @@ -48,6 +47,8 @@ public class StyleClassValidationDecoration extends AbstractValidationDecoration private final String errorClass; private final String warningClass; + private final String infoClass; + private final String okClass; /** * Creates a default instance of a decorator @@ -62,15 +63,42 @@ public StyleClassValidationDecoration() { * @param warningClass class name for warning decoration */ public StyleClassValidationDecoration(String errorClass, String warningClass) { + this(errorClass, warningClass, null, null); + } + + /** + * Creates an instance of validator using custom class names + * @param errorClass class name for error decoration + * @param warningClass class name for warning decoration + * @param infoClass class name for info decoration + * @param okClass class name for ok decoration + */ + public StyleClassValidationDecoration(String errorClass, String warningClass, String infoClass, String okClass) { this.errorClass = errorClass != null? errorClass : "error"; //$NON-NLS-1$ this.warningClass = warningClass != null? warningClass : "warning"; //$NON-NLS-1$ + this.infoClass = infoClass != null? infoClass : "info"; //$NON-NLS-1$ + this.okClass = okClass != null? okClass : "ok"; //$NON-NLS-1$ } - - @Override - protected Collection createValidationDecorations(ValidationMessage message) { - return Arrays.asList(new StyleClassDecoration( Severity.ERROR == message.getSeverity()? errorClass:warningClass)); - } + @Override + protected Collection createValidationDecorations(ValidationMessage message) { + String validationClass = infoClass; + switch (message.getSeverity()) { + case ERROR: + validationClass = errorClass; + break; + case WARNING: + validationClass = warningClass; + break; + case OK: + validationClass = okClass; + break; + default: + validationClass = infoClass; + break; + } + return Arrays.asList(new StyleClassDecoration( validationClass )); + } @Override protected Collection createRequiredDecorations(Control target) { diff --git a/controlsfx/src/main/resources/impl/org/controlsfx/control/validation/decoration-info.png b/controlsfx/src/main/resources/impl/org/controlsfx/control/validation/decoration-info.png new file mode 100644 index 000000000..385a6eb65 Binary files /dev/null and b/controlsfx/src/main/resources/impl/org/controlsfx/control/validation/decoration-info.png differ