X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fdialog%2FComponentSelectionDialog.java;h=cce00075faf8b1940ab2da5988f4dbbad5d92df3;hb=refs%2Fchanges%2F21%2F4121%2F1;hp=c0851fd25d19913b8ed4b114b34bfd8fc551633e;hpb=d515401dd50a89bb6f0f5c8d75e045a96db39f51;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..cce00075 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; @@ -131,6 +134,9 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange dialogSettings = settings.getSection(DIALOG); if (dialogSettings == null) dialogSettings = settings.addNewSection(DIALOG); + + if (component.getNext() != null && component.getPrevious() != null) + insertPosition = PositionType.PREVIOUS; } public void setLengthFactor(double lengthFactor) { @@ -216,7 +222,7 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange inlineViewer.setContentProvider(new ComponentContentProvider()); ExpandItem turnItem = new ExpandItem(expandBar, SWT.NONE); - turnItem.setText("Turn"); + turnItem.setText("Elbow"); turnViewer = new ListViewer(expandBar); turnViewer.setLabelProvider(new ComponentLabelProvider()); turnViewer.setContentProvider(new ComponentContentProvider()); @@ -264,6 +270,10 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange horizFillData.applyTo(buttonComposite); GridLayoutFactory.fillDefaults().numColumns(3).applyTo(buttonComposite); + startButton.setSelection(insertPosition == PositionType.PREVIOUS); + middleButton.setSelection(insertPosition == PositionType.SPLIT); + endButton.setSelection(insertPosition == PositionType.NEXT); + startButton.setEnabled(false); middleButton.setEnabled(false); endButton.setEnabled(false); @@ -287,7 +297,11 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange updateInsertPosition(PositionType.NEXT); } }); - endButton.setSelection(true); + + if (!hasInsertPosition()) { + label.setVisible(false); + buttonComposite.setVisible(false); + } label = new Label(composite, SWT.NONE); label.setText("Name"); @@ -310,8 +324,11 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange label.setText("Wall thickness"); thicknessText = new Text(composite, SWT.SINGLE | SWT.BORDER); label = new Label(composite, SWT.NONE); - label.setText("Turn radius"); + label.setText("Elbow 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 +424,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); @@ -417,12 +436,16 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange return composite; } + private boolean hasInsertPosition() { + return component.getNext() == null || component.getPrevious() == null; + } + private void updateInsertPosition(PositionType type) { if (insertPosition == type) return; - endButton.setSelection(type == PositionType.NEXT); - middleButton.setSelection(type == PositionType.SPLIT); startButton.setSelection(type == PositionType.PREVIOUS); + middleButton.setSelection(type == PositionType.SPLIT); + endButton.setSelection(type == PositionType.NEXT); insertPosition = type; } @@ -454,6 +477,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. @@ -461,7 +496,15 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange } else { lenghtAdjustable = ((selected.getType() == Type.INLINE) && (selected.isVariable() || selected.isModifiable())); - if (insertAdjustable) { + + if (!hasInsertPosition()) { + // We are inserting to a fully connected variable length component + // only allow insertion within the component + startButton.setEnabled(false); + middleButton.setEnabled(false); + endButton.setEnabled(false); + updateInsertPosition(PositionType.PREVIOUS); + } else if (insertAdjustable) { switch (selected.getType()) { case END: startButton.setEnabled(false); @@ -528,13 +571,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 +587,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 turn angle"; + } } else { // this should not happen, since end components should not have variable, or // modifiable flag. @@ -562,8 +609,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 +650,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); }