X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fdialog%2FComponentSelectionDialog.java;h=fc3f0cefc587f16e785a8973bfd2bd0fbc84e931;hb=refs%2Fchanges%2F25%2F4125%2F1;hp=fb5060922a7aaf24678c692686bee4fca59e001e;hpb=d10785f0cc103f8eb9e7b21893da8fe5c4d99ec6;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 fb506092..fc3f0cef 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/dialog/ComponentSelectionDialog.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/dialog/ComponentSelectionDialog.java @@ -134,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) { @@ -212,39 +215,21 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange ExpandBar expandBar = new ExpandBar(composite, SWT.V_SCROLL); - ExpandItem inlineItem = new ExpandItem(expandBar, SWT.NONE); - inlineItem.setText("Inline"); - inlineViewer = new ListViewer(expandBar); - inlineViewer.setLabelProvider(new ComponentLabelProvider()); - inlineViewer.setContentProvider(new ComponentContentProvider()); - - ExpandItem turnItem = new ExpandItem(expandBar, SWT.NONE); - turnItem.setText("Turn"); - turnViewer = new ListViewer(expandBar); - turnViewer.setLabelProvider(new ComponentLabelProvider()); - turnViewer.setContentProvider(new ComponentContentProvider()); - - ExpandItem endItem = new ExpandItem(expandBar, SWT.NONE); - endItem.setText("End"); - endViewer = new ListViewer(expandBar); - endViewer.setLabelProvider(new ComponentLabelProvider()); - endViewer.setContentProvider(new ComponentContentProvider()); - - inlineItem.setControl(inlineViewer.getList()); - turnItem.setControl(turnViewer.getList()); - endItem.setControl(endViewer.getList()); - - inlineViewer.setInput(inlines); - turnViewer.setInput(turns); - endViewer.setInput(ends); - - inlineItem.setHeight(inlineViewer.getList().computeSize(SWT.DEFAULT, SWT.DEFAULT).y); - turnItem.setHeight(turnViewer.getList().computeSize(SWT.DEFAULT, SWT.DEFAULT).y); - endItem.setHeight(endViewer.getList().computeSize(SWT.DEFAULT, SWT.DEFAULT).y); + if (!inlines.isEmpty()) { + inlineViewer = createItemList(expandBar, inlines, "Inline"); + } - inlineViewer.addSelectionChangedListener(this); - turnViewer.addSelectionChangedListener(this); - endViewer.addSelectionChangedListener(this); + // Only allow elbows and ends to be added to open ends of the pipelines + boolean isOpen = component.getNext() == null || component.getPrevious() == null; + if (isOpen) { + if (!turns.isEmpty()) { + turnViewer = createItemList(expandBar, turns, "Elbow"); + } + + if (!ends.isEmpty()) { + turnViewer = createItemList(expandBar, ends, "End"); + } + } GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).span(2, 1).applyTo(expandBar); GridDataFactory.fillDefaults().grab(true, true).minSize(500, 500).hint(500, 500).applyTo(composite); @@ -267,6 +252,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); @@ -290,7 +279,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"); @@ -313,7 +306,7 @@ 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); @@ -425,12 +418,30 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange return composite; } + private ListViewer createItemList(ExpandBar expandBar, List items, String name) { + ExpandItem expandItem = new ExpandItem(expandBar, SWT.NONE); + expandItem.setText(name); + ListViewer viewer = new ListViewer(expandBar); + viewer.setLabelProvider(new ComponentLabelProvider()); + viewer.setContentProvider(new ComponentContentProvider()); + + expandItem.setControl(viewer.getList()); + viewer.setInput(items); + expandItem.setHeight(viewer.getList().computeSize(SWT.DEFAULT, SWT.DEFAULT).y); + viewer.addSelectionChangedListener(this); + return viewer; + } + + 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; } @@ -440,15 +451,15 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange Item i = (Item) sel.getFirstElement(); if (i != null) { selected = i; - if (event.getSource() == inlineViewer) { - turnViewer.setSelection(new StructuredSelection()); - endViewer.setSelection(new StructuredSelection()); - } else if (event.getSource() == turnViewer) { - inlineViewer.setSelection(new StructuredSelection()); - endViewer.setSelection(new StructuredSelection()); - } else if (event.getSource() == endViewer) { - inlineViewer.setSelection(new StructuredSelection()); - turnViewer.setSelection(new StructuredSelection()); + if (inlineViewer != null && event.getSource() == inlineViewer) { + clearSelection(turnViewer); + clearSelection(endViewer); + } else if (turnViewer != null && event.getSource() == turnViewer) { + clearSelection(inlineViewer); + clearSelection(endViewer); + } else if (endViewer != null && event.getSource() == endViewer) { + clearSelection(inlineViewer); + clearSelection(turnViewer); } name = generateUniqueName(selected.getName()); @@ -458,6 +469,11 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange } } + private void clearSelection(ListViewer possibleListViewer) { + if (possibleListViewer != null) + possibleListViewer.setSelection(new StructuredSelection()); + } + private void validate() { filterAllowed.clear(); Set filterAllowed = new HashSet(); @@ -481,7 +497,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);