Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcletavernie2013-01-28 16:03:00 +0000
committercletavernie2013-01-28 16:03:00 +0000
commita8713597304c425708605fa5cef9488de63ef233 (patch)
treeb467003e8facc10ed284508e4394530344b5e9bf
parentb2162c5359ad817bee60c241b34a1889b544e8fb (diff)
downloadorg.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
-rw-r--r--plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/editors/MultipleValueEditor.java22
-rw-r--r--plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/selectors/ReferenceSelector.java77
-rw-r--r--plugins/infra/widget/org.eclipse.papyrus.infra.widgets/src/org/eclipse/papyrus/infra/widgets/strategy/TreeBrowseStrategy.java2
-rw-r--r--plugins/uml/properties/org.eclipse.papyrus.uml.properties/src/org/eclipse/papyrus/uml/properties/modelelement/UMLModelElement.java7
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);
}

Back to the top