X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fdialog%2FComponentSelectionDialog.java;fp=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fdialog%2FComponentSelectionDialog.java;h=da764775d509a3b17185e8ca76fe401c51e640e4;hb=e30f145f533c87b5c784e44ee101cc7fbcd2538f;hp=c0851fd25d19913b8ed4b114b34bfd8fc551633e;hpb=bd522622ca0d62dff1b2025680b042e7ffebc279;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/dialog/ComponentSelectionDialog.java b/org.simantics.plant3d/src/org/simantics/plant3d/dialog/ComponentSelectionDialog.java index c0851fd2..da764775 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/dialog/ComponentSelectionDialog.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/dialog/ComponentSelectionDialog.java @@ -94,6 +94,9 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange private Text diameterText; private Text thicknessText; private Text turnRadiusText; + + // Validation message label + private Label validationLabel; // Position selection private Button startButton; @@ -312,6 +315,9 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange label = new Label(composite, SWT.NONE); label.setText("Turn radius"); turnRadiusText = new Text(composite, SWT.SINGLE | SWT.BORDER); + + validationLabel = new Label(composite, SWT.NONE); + validationLabel.setText(""); lengthText.setEnabled(false); angleText.setEnabled(false); @@ -407,6 +413,8 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange horizFillData.applyTo(diameterText); horizFillData.applyTo(thicknessText); horizFillData.applyTo(turnRadiusText); + + GridDataFactory.fillDefaults().span(2, 1).align(SWT.END, SWT.END).grab(true, false).applyTo(validationLabel); if (!allowed.contains(PositionType.NEXT) && !allowed.contains(PositionType.PREVIOUS)) { turnViewer.getList().setEnabled(false); @@ -454,6 +462,18 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange filterAllowed.clear(); Set filterAllowed = new HashSet(); boolean ok = true; + String msg = null; + + if (name.isEmpty() || usedNames.contains(name)) { + ok = false; + if (msg == null) { + if (name.isEmpty()) + msg = "Please provide a valid name"; + else + msg = "Name \"" + name + "\" is already in use"; + } + } + if (selected == null) { ok = false; } else if (selected.isCode()) {// TODO : instead of disabling the button, we should filter the content. @@ -528,13 +548,15 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange angleText.setEnabled(false); rotationAngleText.setEnabled(selected.isRotated()); ok = false; - + if (msg == null) msg = "Cannot split a straight pipe with a straight pipe"; } else { lengthText.setEnabled(true); angleText.setEnabled(false); rotationAngleText.setEnabled(selected.isRotated()); - if (length == null) + if (length == null || length <= 0.0) { ok = false; + if (msg == null) msg = "Please provide a valid length"; + } } } else if (selected.getType() == Type.TURN) { filterAllowed.add(PositionType.NEXT); @@ -542,8 +564,10 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange lengthText.setEnabled(false); angleText.setEnabled(true); rotationAngleText.setEnabled(true); - if (angle == null) + if (angle == null) { ok = false; + if (msg == null) msg = "Please provide a rotation angle"; + } } else { // this should not happen, since end components should not have variable, or // modifiable flag. @@ -562,8 +586,18 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange turnRadiusText.setEnabled(true); diameterText.setEnabled(true); thicknessText.setEnabled(true); - if (diameter == null || turnRadius == null || thickness == null) + if (diameter == null || diameter <= 0.0) { + ok = false; + if (msg == null) msg = "Please provide a valid diameter"; + } + if (turnRadius == null || diameter != null && turnRadius < diameter / 2) { ok = false; + if (msg == null) msg = "Please provide a valid turn radius"; + } + if (thickness == null || thickness < 0.0 || diameter != null && thickness >= diameter / 2) { + ok = false; + if (msg == null) msg = "Please provide a valid wall thickness"; + } } else { turnRadiusText.setEnabled(false); diameterText.setEnabled(false); @@ -593,8 +627,8 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange this.filterAllowed.add(t); } - if (name.isEmpty() || usedNames.contains(name)) - ok = false; + validationLabel.setText(msg != null ? msg : ""); + validationLabel.requestLayout(); getButton(OK).setEnabled(ok); }