diff options
author | cletavernie | 2013-01-28 16:03:00 +0000 |
---|---|---|
committer | cletavernie | 2013-01-28 16:03:00 +0000 |
commit | a8713597304c425708605fa5cef9488de63ef233 (patch) | |
tree | b467003e8facc10ed284508e4394530344b5e9bf | |
parent | b2162c5359ad817bee60c241b34a1889b544e8fb (diff) | |
download | org.eclipse.papyrus-a8713597304c425708605fa5cef9488de63ef233.tar.gz org.eclipse.papyrus-a8713597304c425708605fa5cef9488de63ef233.tar.xz org.eclipse.papyrus-a8713597304c425708605fa5cef9488de63ef233.zip |
399269: [Properties view - OCL for Papyrus] necessary to delete the class constrainedElement to get the features in the panel tree options
https://bugs.eclipse.org/bugs/show_bug.cgi?id=399269
4 files changed, 73 insertions, 35 deletions
diff --git a/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/editors/MultipleValueEditor.java b/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/editors/MultipleValueEditor.java index a535735e2da..22312525cab 100644 --- a/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/editors/MultipleValueEditor.java +++ b/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/editors/MultipleValueEditor.java @@ -95,11 +95,6 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection protected Button edit;
/**
- * The Dialog displayed when adding new elements
- */
- protected MultipleValueSelectorDialog dialog;
-
- /**
* The element selector for this editor's dialog
*/
protected IElementSelector selector;
@@ -197,10 +192,6 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection createListControls();
this.selector = selector;
- dialog = createMultipleValueSelectorDialog(parent, selector, ordered, unique, label);
- if(label != null) {
- dialog.setTitle(label);
- }
setLabelProvider(new LabelProvider());
setUpperBound(upperBound);
@@ -236,7 +227,6 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection public void setSelector(IElementSelector selector) {
this.selector = selector;
- this.dialog.setSelector(selector);
}
protected void updateControls() {
@@ -319,7 +309,6 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection * The label provider for this editor
*/
public void setLabelProvider(ILabelProvider labelProvider) {
- dialog.setLabelProvider(labelProvider);
treeViewer.setLabelProvider(labelProvider);
}
@@ -339,7 +328,6 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection */
public void setOrdered(boolean ordered) {
this.ordered = ordered;
- this.dialog.setOrdered(ordered);
updateControls();
}
@@ -349,7 +337,6 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection */
public void setUnique(boolean unique) {
this.unique = unique;
- this.dialog.setUnique(unique);
updateControls();
}
@@ -425,6 +412,12 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection return;
}
+ String dialogLabel = label == null ? null : label.getText();
+ MultipleValueSelectorDialog dialog = createMultipleValueSelectorDialog(getParent(), selector, ordered, unique, dialogLabel);
+ dialog.setLabelProvider((ILabelProvider)treeViewer.getLabelProvider());
+ dialog.setFactory(referenceFactory);
+ dialog.setUpperBound(upperBound);
+
if(modelProperty != null) {
dialog.setInitialSelections(modelProperty.toArray());
} else {
@@ -545,7 +538,6 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection */
public void setFactory(ReferenceValueFactory factory) {
this.referenceFactory = factory;
- dialog.setFactory(factory);
updateControls();
}
@@ -615,7 +607,6 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection setLayout(new GridLayout(2, false));
}
super.setLabel(label);
- dialog.setTitle(label);
}
@Override
@@ -673,7 +664,6 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection */
public void setUpperBound(int upperBound) {
this.upperBound = upperBound;
- dialog.setUpperBound(upperBound);
}
public void updateBoutons() {
diff --git a/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/selectors/ReferenceSelector.java b/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/selectors/ReferenceSelector.java index dbf80f91fd1..58d6440e429 100644 --- a/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/selectors/ReferenceSelector.java +++ b/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/selectors/ReferenceSelector.java @@ -21,12 +21,14 @@ import java.util.Set; import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.papyrus.infra.widgets.editors.IElementSelectionListener;
import org.eclipse.papyrus.infra.widgets.editors.IElementSelector;
import org.eclipse.papyrus.infra.widgets.providers.EncapsulatedContentProvider;
import org.eclipse.papyrus.infra.widgets.providers.IStaticContentProvider;
+import org.eclipse.papyrus.infra.widgets.strategy.ProviderBasedBrowseStrategy;
+import org.eclipse.papyrus.infra.widgets.strategy.StrategyBasedContentProvider;
+import org.eclipse.papyrus.infra.widgets.strategy.TreeBrowseStrategy;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
@@ -216,7 +218,7 @@ public class ReferenceSelector implements IElementSelector { private void addSelectedElements(Object[] semanticElements) {
if(semanticElements.length > 0) {
selectedElements.addAll(Arrays.asList(semanticElements));
- fTree.getViewer().refresh();
+ refresh();
}
}
@@ -276,7 +278,7 @@ public class ReferenceSelector implements IElementSelector { public void setSelectedElements(Object[] semanticElements) {
selectedElements.clear();
selectedElements.addAll(Arrays.asList(semanticElements));
- fTree.getViewer().refresh();
+ refresh();
}
public void newObjectCreated(Object newObject) {
@@ -292,6 +294,7 @@ public class ReferenceSelector implements IElementSelector { * Refreshes this selector's {@link org.eclipse.swt.widgets.List}
*/
public void refresh() {
+ ((SelectionFilteredBrowseStrategy)contentProvider.getBrowseStrategy()).refresh();
fTree.getViewer().refresh();
}
@@ -315,7 +318,15 @@ public class ReferenceSelector implements IElementSelector { * @param staticContentProvider
*/
public void setContentProvider(IStaticContentProvider staticContentProvider) {
- this.contentProvider = new EncapsulatedContentProvider(staticContentProvider);
+
+ ITreeContentProvider provider = new EncapsulatedContentProvider(staticContentProvider);
+
+ TreeBrowseStrategy filteredBrowseStrategy = new SelectionFilteredBrowseStrategy(provider);
+
+ TreeBrowseStrategy revealBrowseStrategy = new ProviderBasedBrowseStrategy(provider);
+
+ this.contentProvider = new StrategyBasedContentProvider(filteredBrowseStrategy, revealBrowseStrategy);
+
if(fTree != null) {
fTree.getViewer().setContentProvider(contentProvider);
fTree.getViewer().setInput(""); //$NON-NLS-1$
@@ -323,6 +334,38 @@ public class ReferenceSelector implements IElementSelector { }
/**
+ * Strategy to hide tree elements which are already selected, when the selector is defined as unique
+ *
+ * @author Camille Letavernier
+ *
+ */
+ private class SelectionFilteredBrowseStrategy extends ProviderBasedBrowseStrategy {
+
+ public SelectionFilteredBrowseStrategy(ITreeContentProvider provider) {
+ super(provider);
+ }
+
+ @Override
+ public boolean isValidValue(Object element) {
+ if(!unique) {
+ return super.isValidValue(element);
+ }
+
+ if(!super.isValidValue(element)) {
+ return false;
+ }
+
+ return !selectedElements.contains(getAdaptedValue(element));
+ }
+
+ public void refresh() {
+ if(unique) {
+ clearCache();
+ }
+ }
+ }
+
+ /**
* {@inheritDoc}
*/
public void createControls(Composite parent) {
@@ -354,18 +397,18 @@ public class ReferenceSelector implements IElementSelector { // }
// });
- fTree.getViewer().addFilter(new ViewerFilter() {
-
- @Override
- public boolean select(Viewer viewer, Object parentElement, Object containerElement) {
- if(unique) {
- //TODO : check if the selected element has selectable children
- return !selectedElements.contains(contentProvider.getAdaptedValue(containerElement));
- } else {
- return true;
- }
- }
- });
+ // fTree.getViewer().addFilter(new ViewerFilter() {
+ //
+ // @Override
+ // public boolean select(Viewer viewer, Object parentElement, Object containerElement) {
+ // if(unique) {
+ // //TODO : check if the selected element has selectable children
+ // return !selectedElements.contains(contentProvider.getAdaptedValue(containerElement));
+ // } else {
+ // return true;
+ // }
+ // }
+ // });
//Adds double-click support
fTree.getViewer().getTree().addSelectionListener(new SelectionListener() {
diff --git a/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/strategy/TreeBrowseStrategy.java b/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/strategy/TreeBrowseStrategy.java index d49fca420be..33e7fc6e8a5 100644 --- a/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/strategy/TreeBrowseStrategy.java +++ b/plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/strategy/TreeBrowseStrategy.java @@ -36,6 +36,4 @@ public interface TreeBrowseStrategy extends ITreeContentProvider, IRevealSemanti @Deprecated
public TreePath findPath(Object semanticElement, Object[] roots);
-
-
}
diff --git a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/modelelement/UMLModelElement.java b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/modelelement/UMLModelElement.java index 2e9c590c534..2f364994927 100644 --- a/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/modelelement/UMLModelElement.java +++ b/plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/modelelement/UMLModelElement.java @@ -49,6 +49,7 @@ import org.eclipse.papyrus.uml.tools.databinding.PapyrusObservableList; import org.eclipse.papyrus.uml.tools.databinding.PapyrusObservableValue;
import org.eclipse.papyrus.uml.tools.databinding.ProvidedInterfaceObservableList;
import org.eclipse.papyrus.uml.tools.databinding.RequiredInterfaceObservableList;
+import org.eclipse.papyrus.uml.tools.providers.ConstrainedElementContentProvider;
import org.eclipse.papyrus.uml.tools.providers.UMLContainerContentProvider;
import org.eclipse.papyrus.uml.tools.providers.UMLContentProvider;
import org.eclipse.papyrus.uml.tools.providers.UMLFilteredLabelProvider;
@@ -155,6 +156,12 @@ public class UMLModelElement extends EMFModelElement { return EmptyContentProvider.instance;
}
+ //Workaround: the standard ContentProvider does not correctly hide the selected elements in ReferenceSelector.
+ //With a ContainmentBasedBrowseStrategy, it works better (But we don't have the infinite tree in the selection dialog).
+ if(feature == UMLPackage.eINSTANCE.getConstraint_ConstrainedElement()) {
+ return new ConstrainedElementContentProvider(source, feature);
+ }
+
return new UMLContentProvider(source, feature);
}
|