diff options
author | cletavernie | 2011-09-19 09:38:56 +0000 |
---|---|---|
committer | cletavernie | 2011-09-19 09:38:56 +0000 |
commit | bec1d1bd2c012db7be004c257ef720fcee54e482 (patch) | |
tree | 11fa2738758168391c9e07b1fc0e22faef357c06 | |
parent | cb2cf6fe58ff8bbfc8ec09680d8a3c69ada824bc (diff) | |
download | org.eclipse.papyrus-bec1d1bd2c012db7be004c257ef720fcee54e482.tar.gz org.eclipse.papyrus-bec1d1bd2c012db7be004c257ef720fcee54e482.tar.xz org.eclipse.papyrus-bec1d1bd2c012db7be004c257ef720fcee54e482.zip |
353595: [Property View] Inaccurate display with multiselection
https://bugs.eclipse.org/bugs/show_bug.cgi?id=353595
353547: [Property View] Add support for custom Label Provider in the property view header
https://bugs.eclipse.org/bugs/show_bug.cgi?id=353547
358077: [Property View - UML] The UML property view should be improved for usability concerns
https://bugs.eclipse.org/bugs/show_bug.cgi?id=358077
24 files changed, 484 insertions, 17 deletions
diff --git a/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/editor/preview/Preview.java b/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/editor/preview/Preview.java index 09e6d5f4682..b47b088291c 100644 --- a/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/editor/preview/Preview.java +++ b/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/editor/preview/Preview.java @@ -263,6 +263,7 @@ public class Preview extends ViewPart implements ISelectionChangedListener, IPar } catch (IOException ex) {
Activator.log.error(ex);
}
+
return null;
}
diff --git a/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/modelelement/CustomizationModelElement.java b/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/modelelement/CustomizationModelElement.java index c64e267e14e..96753adaef3 100644 --- a/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/modelelement/CustomizationModelElement.java +++ b/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/modelelement/CustomizationModelElement.java @@ -29,10 +29,14 @@ import org.eclipse.papyrus.properties.customization.providers.DataContextElement import org.eclipse.papyrus.properties.customization.providers.DependencyContentProvider;
import org.eclipse.papyrus.properties.customization.providers.EnvironmentContentProvider;
import org.eclipse.papyrus.properties.customization.providers.PropertyContentProvider;
+import org.eclipse.papyrus.properties.customization.providers.PropertyEditorTypeContentProvider;
import org.eclipse.papyrus.properties.customization.providers.TabContentProvider;
import org.eclipse.papyrus.properties.environment.EnvironmentPackage;
import org.eclipse.papyrus.properties.modelelement.AbstractModelElement;
+import org.eclipse.papyrus.properties.modelelement.DataSource;
import org.eclipse.papyrus.properties.modelelement.EMFModelElement;
+import org.eclipse.papyrus.properties.ui.PropertyEditor;
+import org.eclipse.papyrus.properties.ui.UiPackage;
import org.eclipse.papyrus.properties.util.EMFHelper;
import org.eclipse.papyrus.widgets.creation.ReferenceValueFactory;
import org.eclipse.papyrus.widgets.providers.EmptyContentProvider;
@@ -73,7 +77,6 @@ public class CustomizationModelElement extends AbstractModelElement { private static void initializeProviders() {
providers = new HashMap<EClassifier, IStaticContentProvider>();
providers.put(EnvironmentPackage.eINSTANCE.getCompositeWidgetType(), new EnvironmentContentProvider(EnvironmentPackage.eINSTANCE.getEnvironment_CompositeWidgetTypes()));
- providers.put(EnvironmentPackage.eINSTANCE.getPropertyEditorType(), new EnvironmentContentProvider(EnvironmentPackage.eINSTANCE.getEnvironment_PropertyEditorTypes()));
providers.put(EnvironmentPackage.eINSTANCE.getStandardWidgetType(), new EnvironmentContentProvider(EnvironmentPackage.eINSTANCE.getEnvironment_WidgetTypes()));
providers.put(EnvironmentPackage.eINSTANCE.getConstraintType(), new EnvironmentContentProvider(EnvironmentPackage.eINSTANCE.getEnvironment_ConstraintTypes()));
providers.put(EnvironmentPackage.eINSTANCE.getLayoutType(), new EnvironmentContentProvider(EnvironmentPackage.eINSTANCE.getEnvironment_LayoutTypes()));
@@ -111,6 +114,8 @@ public class CustomizationModelElement extends AbstractModelElement { return new DataContextElementContentProvider((DataContextElement)delegate.getSource());
} else if(classifier == ContextsPackage.eINSTANCE.getContext()) {
return new DependencyContentProvider((Context)delegate.getSource());
+ } else if(feature == UiPackage.eINSTANCE.getPropertyEditor_WidgetType()) {
+ return new PropertyEditorTypeContentProvider((PropertyEditor)delegate.getSource());
} else {
return delegate.getContentProvider(propertyPath);
}
@@ -164,6 +169,11 @@ public class CustomizationModelElement extends AbstractModelElement { }
@Override
+ public boolean getDirectCreation(String propertyPath) {
+ return delegate.getDirectCreation(propertyPath);
+ }
+
+ @Override
public boolean forceRefresh(String localPropertyPath) {
return false;
}
@@ -172,4 +182,15 @@ public class CustomizationModelElement extends AbstractModelElement { public Object getDefaultValue(String propertyPath) {
return delegate.getDefaultValue(propertyPath);
}
+
+ @Override
+ public void setDataSource(DataSource source) {
+ delegate.setDataSource(source);
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+ delegate.dispose();
+ }
}
diff --git a/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/providers/PropertyEditorTypeContentProvider.java b/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/providers/PropertyEditorTypeContentProvider.java new file mode 100644 index 00000000000..fe1786db371 --- /dev/null +++ b/plugins/configurationTK/org.eclipse.papyrus.properties.customization/src/org/eclipse/papyrus/properties/customization/providers/PropertyEditorTypeContentProvider.java @@ -0,0 +1,75 @@ +package org.eclipse.papyrus.properties.customization.providers;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.papyrus.properties.environment.EnvironmentPackage;
+import org.eclipse.papyrus.properties.environment.PropertyEditorType;
+import org.eclipse.papyrus.properties.environment.Type;
+import org.eclipse.papyrus.properties.ui.PropertyEditor;
+import org.eclipse.papyrus.properties.widgets.layout.PropertiesLayout;
+import org.eclipse.papyrus.widgets.editors.AbstractEditor;
+import org.eclipse.papyrus.widgets.editors.BooleanToggle;
+import org.eclipse.papyrus.widgets.editors.ICommitListener;
+import org.eclipse.papyrus.widgets.providers.IGraphicalContentProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+
+public class PropertyEditorTypeContentProvider extends EnvironmentContentProvider implements IGraphicalContentProvider, ICommitListener {
+
+ private PropertyEditor source;
+
+ private Viewer viewer;
+
+ private boolean filter = true;
+
+ private BooleanToggle filterButton;
+
+ public PropertyEditorTypeContentProvider(PropertyEditor source) {
+ super(EnvironmentPackage.eINSTANCE.getEnvironment_PropertyEditorTypes());
+ this.source = source;
+ }
+
+ @Override
+ public void createBefore(Composite parent) {
+ Composite self = new Composite(parent, SWT.NONE);
+ self.setLayout(new PropertiesLayout());
+
+ filterButton = new BooleanToggle(self);
+ filterButton.setText("Filter");
+ filterButton.setValue(this.filter);
+ filterButton.addCommitListener(this);
+ super.createBefore(self);
+ }
+
+ @Override
+ public Object[] getElements() {
+ Object[] elements = super.getElements();
+ if(!filter || source.getProperty() == null) {
+ return elements;
+ }
+
+ Type type = source.getProperty().getType();
+ boolean isPropertyMultiple = source.getProperty().getMultiplicity() != 1;
+ List<Object> filteredElements = new LinkedList<Object>();
+ for(Object element : elements) {
+ PropertyEditorType editorType = (PropertyEditorType)element;
+ boolean isElementMultiple = editorType.getMultiplicity() != 1;
+ if(editorType.getType() == type && isPropertyMultiple == isElementMultiple) {
+ filteredElements.add(element);
+ }
+ }
+
+ return filteredElements.toArray();
+ }
+
+ public void commit(AbstractEditor editor) {
+ filter = filterButton.getValue();
+ if(super.viewer != null) {
+ super.viewer.refresh();
+ }
+ }
+
+}
diff --git a/plugins/core/org.eclipse.papyrus.modelexplorer.widgets/src/org/eclipse/papyrus/modelexplorer/widgets/ModelContentProvider.java b/plugins/core/org.eclipse.papyrus.modelexplorer.widgets/src/org/eclipse/papyrus/modelexplorer/widgets/ModelContentProvider.java index 8d1a9dd0912..4c1338dbf5a 100644 --- a/plugins/core/org.eclipse.papyrus.modelexplorer.widgets/src/org/eclipse/papyrus/modelexplorer/widgets/ModelContentProvider.java +++ b/plugins/core/org.eclipse.papyrus.modelexplorer.widgets/src/org/eclipse/papyrus/modelexplorer/widgets/ModelContentProvider.java @@ -105,7 +105,7 @@ public class ModelContentProvider extends MoDiscoContentProvider implements ISta return treeElement;
}
}
- return null;
+ return selection;
}
/**
diff --git a/plugins/core/org.eclipse.papyrus.properties/model/Environment.xmi b/plugins/core/org.eclipse.papyrus.properties/model/Environment.xmi index 6567606c9e0..3083a59b680 100644 --- a/plugins/core/org.eclipse.papyrus.properties/model/Environment.xmi +++ b/plugins/core/org.eclipse.papyrus.properties/model/Environment.xmi @@ -6,6 +6,7 @@ <constraintTypes label="True Constraint" constraintClass="org.eclipse.papyrus.properties.constraints.TrueConstraint"/>
<constraintTypes label="EMF Query" constraintClass="org.eclipse.papyrus.properties.constraints.EMFQueryConstraint"/>
<constraintTypes label="Java Instance Of" constraintClass="org.eclipse.papyrus.properties.constraints.JavaInstanceOf"/>
+ <constraintTypes label="Java Query" constraintClass="org.eclipse.papyrus.properties.constraints.JavaQueryConstraint"/>
<widgetTypes label="Label" widgetClass="Label"/>
<widgetTypes label="Text" widgetClass="Text"/>
<propertyEditorTypes label="StringEditor" widgetClass="StringEditor" namespace="//@namespaces.3"/>
diff --git a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/catalog/PropertiesCatalog.java b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/catalog/PropertiesCatalog.java index 5d8875e91d8..7600e175228 100644 --- a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/catalog/PropertiesCatalog.java +++ b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/catalog/PropertiesCatalog.java @@ -40,6 +40,10 @@ public class PropertiesCatalog implements Factory { *
* @author Camille Letavernier
*/
+ //TODO : This class should encapsulate a resource, and not extend it
+ //Non-xmi resources which are relative to a XMI resource cannot be handled
+ //Typically, xwt files cannot be handled by an XMIResource
+ //Problem : local calls to getURIConverter will skip the encapsulation...
public class PropertiesXMIResource extends XMIResourceImpl {
/**
diff --git a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/catalog/PropertiesURIHandler.java b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/catalog/PropertiesURIHandler.java index 7bcecd9b64a..781f79bc0a1 100644 --- a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/catalog/PropertiesURIHandler.java +++ b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/catalog/PropertiesURIHandler.java @@ -122,6 +122,10 @@ public class PropertiesURIHandler implements URIHandler { * The URIHandler corresponding to the converted URI
*/
protected URIHandler getDelegateHandler(URI convertedURI) {
+ if(convertedURI == null) {
+ return null;
+ }
+
for(URIHandler handler : URIHandler.DEFAULT_HANDLERS) {
if(handler.canHandle(convertedURI)) {
return handler;
diff --git a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/constraints/JavaQuery.java b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/constraints/JavaQuery.java new file mode 100644 index 00000000000..7c26513db61 --- /dev/null +++ b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/constraints/JavaQuery.java @@ -0,0 +1,17 @@ +package org.eclipse.papyrus.properties.constraints;
+
+
+public interface JavaQuery {
+
+ public boolean match(Object selection);
+
+ public class FalseQuery implements JavaQuery {
+
+ public FalseQuery() {
+ }
+
+ public boolean match(Object selection) {
+ return false;
+ }
+ }
+}
diff --git a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/constraints/JavaQueryConstraint.java b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/constraints/JavaQueryConstraint.java new file mode 100644 index 00000000000..b243c04d6ac --- /dev/null +++ b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/constraints/JavaQueryConstraint.java @@ -0,0 +1,53 @@ +package org.eclipse.papyrus.properties.constraints;
+
+import org.eclipse.papyrus.properties.Activator;
+import org.eclipse.papyrus.properties.constraints.JavaQuery.FalseQuery;
+import org.eclipse.papyrus.properties.contexts.ConstraintDescriptor;
+
+/**
+ * This constraint allows to define a Java Query (without parameters) without
+ * defining it in an environment file.
+ *
+ * The constraint takes one parameter ("className"), which defines the
+ * qualified name of the Java class used to implement the constraint.
+ *
+ * The Java class must implement the {@link JavaQuery} interface
+ *
+ * @author Camille Letavernier
+ */
+public class JavaQueryConstraint extends AbstractConstraint {
+
+ public final static String QUERY_CLASS_NAME_PROPERTY = "className"; //$NON-NLS-1$
+
+ private JavaQuery query = new FalseQuery();
+
+ protected void setDescriptor(ConstraintDescriptor descriptor) {
+ String queryClassName = getValue(QUERY_CLASS_NAME_PROPERTY);
+ if(queryClassName != null) {
+ try {
+ Class<? extends JavaQuery> queryClass = Class.forName(queryClassName).asSubclass(JavaQuery.class);
+ query = queryClass.newInstance();
+ } catch (ClassNotFoundException ex) {
+ Activator.log.error(ex);
+ } catch (InstantiationException ex) {
+ Activator.log.error(ex);
+ } catch (IllegalAccessException ex) {
+ Activator.log.error(ex);
+ }
+ }
+ }
+
+ public boolean match(Object selection) {
+ return query.match(selection);
+ }
+
+ @Override
+ protected boolean equivalent(Constraint constraint) {
+ if(constraint instanceof JavaQueryConstraint) {
+ return ((JavaQueryConstraint)constraint).query.getClass().equals(query.getClass());
+ }
+ return false;
+ }
+
+
+}
diff --git a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/databinding/EMFObservableList.java b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/databinding/EMFObservableList.java index b86088a8faa..d3620ad01bb 100644 --- a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/databinding/EMFObservableList.java +++ b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/databinding/EMFObservableList.java @@ -1,6 +1,6 @@ /*****************************************************************************
* Copyright (c) 2010 CEA LIST.
- *
+ *
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
diff --git a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/modelelement/EMFModelElement.java b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/modelelement/EMFModelElement.java index b84e9979f10..486e96864a2 100644 --- a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/modelelement/EMFModelElement.java +++ b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/modelelement/EMFModelElement.java @@ -260,7 +260,7 @@ public class EMFModelElement extends AbstractModelElement { if(feature != null) {
if(feature instanceof EReference) {
EReference reference = (EReference)feature;
- if(reference.isContainer()) {
+ if(reference.isContainment()) {
return new EcorePropertyEditorFactory(reference);
}
}
diff --git a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/providers/SelectionLabelProvider.java b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/providers/SelectionLabelProvider.java index 12078af18bf..defaeaf282b 100644 --- a/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/providers/SelectionLabelProvider.java +++ b/plugins/core/org.eclipse.papyrus.properties/src/org/eclipse/papyrus/properties/providers/SelectionLabelProvider.java @@ -54,7 +54,7 @@ public class SelectionLabelProvider extends LabelProvider { final int priority = Integer.parseInt(e.getAttribute(PRIORITY_PROPERTY));
getLabelProviders(priority).add(provider);
} catch (Exception ex) {
- Activator.log.error(ex);
+ Activator.log.error("Cannot load the label provider : " + e.getAttribute(LABEL_PROVIDER_PROPERTY), ex);
}
}
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/databinding/TextObservableValue.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/databinding/TextObservableValue.java new file mode 100644 index 00000000000..20e8d37c669 --- /dev/null +++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/databinding/TextObservableValue.java @@ -0,0 +1,91 @@ +package org.eclipse.papyrus.widgets.databinding;
+
+import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.core.databinding.observable.value.ValueDiff;
+import org.eclipse.papyrus.widgets.providers.UnchangedObject;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+
+public class TextObservableValue extends AbstractObservableValue implements Listener {
+
+ private Text text;
+
+ private int eventType;
+
+ private Object currentValue;
+
+ protected AggregatedObservable modelProperty;
+
+ public TextObservableValue(Text text, IObservableValue modelProperty, int eventType) {
+ this.text = text;
+ this.eventType = eventType;
+ if(modelProperty instanceof AggregatedObservable) {
+ this.modelProperty = (AggregatedObservable)modelProperty;
+ }
+ this.text.addListener(eventType, this);
+ }
+
+ public TextObservableValue(Realm realm) {
+ super(realm);
+ }
+
+ public Object getValueType() {
+ return String.class;
+ }
+
+ @Override
+ protected Object doGetValue() {
+ if(UnchangedObject.instance.toString().equals(text.getText())) {
+ return null;
+ } else {
+ return text.getText();
+ }
+ }
+
+ @Override
+ protected void doSetValue(Object value){
+ if(modelProperty != null && modelProperty.hasDifferentValues()) {
+ this.text.setText(UnchangedObject.instance.toString());
+ this.currentValue = UnchangedObject.instance;
+ } else {
+ if(value instanceof String) {
+ this.text.setText((String)value);
+ this.currentValue = value;
+ } else if(value == null) {
+ this.text.setText(""); //$NON-NLS-1$
+ this.currentValue = null;
+ }
+ }
+ }
+
+ public void handleEvent(Event event) {
+
+ final Object oldValue = currentValue;
+ final Object newValue = getValue();
+ if(newValue == null) {
+ return;
+ }
+ currentValue = newValue;
+
+ if((eventType & event.type) != 0) {
+ fireValueChange(new ValueDiff() {
+
+ @Override
+ public Object getOldValue() {
+ return oldValue;
+ }
+
+ @Override
+ public Object getNewValue() {
+ return newValue;
+ }
+
+ });
+ }
+ }
+
+}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/BooleanToggle.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/BooleanToggle.java index fcbc32ed741..d675a25b164 100644 --- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/BooleanToggle.java +++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/BooleanToggle.java @@ -1,6 +1,6 @@ /*****************************************************************************
* Copyright (c) 2011 CEA LIST.
- *
+ *
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -13,6 +13,8 @@ package org.eclipse.papyrus.widgets.editors; import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
@@ -28,6 +30,16 @@ public class BooleanToggle extends AbstractValueEditor { toggleButton = factory.createButton(this, null, style | SWT.TOGGLE);
setWidgetObservable(WidgetProperties.selection().observe(toggleButton));
setCommitOnFocusLost(toggleButton);
+ toggleButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ commit();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ //Nothing
+ }
+ });
setText(text);
setImage(image);
@@ -50,17 +62,19 @@ public class BooleanToggle extends AbstractValueEditor { }
public void setText(String text) {
- if(text != null)
+ if(text != null) {
toggleButton.setText(text);
+ }
}
public void setImage(Image image) {
- if(image != null)
+ if(image != null) {
toggleButton.setImage(image);
+ }
}
@Override
- public Object getValue() {
+ public Boolean getValue() {
return toggleButton.getSelection();
}
@@ -85,4 +99,8 @@ public class BooleanToggle extends AbstractValueEditor { setLabelToolTipText(text);
}
+ public void setValue(boolean isActive) {
+ toggleButton.setSelection(isActive);
+ }
+
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringEditor.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringEditor.java index 9b8967bed67..152625d985a 100644 --- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringEditor.java +++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringEditor.java @@ -11,7 +11,8 @@ *****************************************************************************/
package org.eclipse.papyrus.widgets.editors;
-import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.papyrus.widgets.databinding.TextObservableValue;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
@@ -81,8 +82,6 @@ public class StringEditor extends AbstractValueEditor implements KeyListener { text.addKeyListener(this);
- setWidgetObservable(WidgetProperties.text(SWT.FocusOut).observe(text), true);
-
setCommitOnFocusLost(text);
}
@@ -130,6 +129,12 @@ public class StringEditor extends AbstractValueEditor implements KeyListener { }
}
+ @Override
+ public void setModelObservable(IObservableValue observable) {
+ setWidgetObservable(new TextObservableValue(text, observable, SWT.FocusOut), true);
+ super.setModelObservable(observable);
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/TreeSelectorDialog.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/TreeSelectorDialog.java index b493943d7d5..5bb5135cf70 100644 --- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/TreeSelectorDialog.java +++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/TreeSelectorDialog.java @@ -194,6 +194,8 @@ public class TreeSelectorDialog extends SelectionDialog implements ITreeSelector treeViewer.setSelection(new StructuredSelection(getAdaptedInitialSelection()));
+ getShell().setDefaultButton(null);
+ getButton(OK).setFocus();
getShell().setImage(Activator.getDefault().getImage("/icons/papyrus.png")); //$NON-NLS-1$
getShell().pack();
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/providers/AbstractFilteredContentProvider.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/providers/AbstractFilteredContentProvider.java index d7eef9f3ff1..f917bc53647 100644 --- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/providers/AbstractFilteredContentProvider.java +++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/providers/AbstractFilteredContentProvider.java @@ -42,7 +42,7 @@ import org.eclipse.swt.widgets.Composite; */
public abstract class AbstractFilteredContentProvider implements IGraphicalContentProvider {
- private StructuredViewer viewer;
+ protected StructuredViewer viewer;
private StringEditor filterPattern;
diff --git a/plugins/uml/org.eclipse.papyrus.properties.uml/build.properties b/plugins/uml/org.eclipse.papyrus.properties.uml/build.properties index a0301054543..bbebbf008d2 100644 --- a/plugins/uml/org.eclipse.papyrus.properties.uml/build.properties +++ b/plugins/uml/org.eclipse.papyrus.properties.uml/build.properties @@ -1,7 +1,7 @@ #
-#Mon Sep 12 09:30:08 CEST 2011
-bin.includes=META-INF/,.,plugin.xml,Model/,about.html,OSGI-INF/,plugin.properties,icons/,schema/
+#Fri Sep 16 11:50:01 CEST 2011
output..=bin/
+bin.includes=META-INF/,.,plugin.xml,Model/,about.html,OSGI-INF/,plugin.properties,icons/,schema/
src.includes=META-INF/,.,plugin.xml,Model/,about.html,OSGI-INF/,plugin.properties,icons/,schema/
source..=src/,src-gen/
bin..=bin/
diff --git a/plugins/uml/org.eclipse.papyrus.properties.uml/plugin.xml b/plugins/uml/org.eclipse.papyrus.properties.uml/plugin.xml index 7b8580457f0..ff37f736ded 100644 --- a/plugins/uml/org.eclipse.papyrus.properties.uml/plugin.xml +++ b/plugins/uml/org.eclipse.papyrus.properties.uml/plugin.xml @@ -50,4 +50,11 @@ file="Model/UML/uml.querySet">
</modelqueryset>
</extension>
+ <extension
+ point="org.eclipse.papyrus.properties.labelprovider">
+ <labelProvider
+ labelProvider="org.eclipse.papyrus.properties.uml.providers.UMLLabelProvider"
+ priority="50">
+ </labelProvider>
+ </extension>
</plugin>
diff --git a/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/databinding/ExtensionRequiredObservableValue.java b/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/databinding/ExtensionRequiredObservableValue.java new file mode 100644 index 00000000000..5c25e744b84 --- /dev/null +++ b/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/databinding/ExtensionRequiredObservableValue.java @@ -0,0 +1,80 @@ +package org.eclipse.papyrus.properties.uml.databinding;
+
+import org.eclipse.core.databinding.observable.ChangeEvent;
+import org.eclipse.core.databinding.observable.IChangeListener;
+import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
+import org.eclipse.core.databinding.observable.value.ValueDiff;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.papyrus.properties.uml.Activator;
+import org.eclipse.uml2.uml.Extension;
+
+
+public class ExtensionRequiredObservableValue extends AbstractObservableValue implements IChangeListener {
+
+ private Extension extension;
+
+ private MultiplicityObservableValue observable;
+
+ private boolean currentValue;
+
+ public ExtensionRequiredObservableValue(Extension extension, EditingDomain domain) {
+ this.extension = extension;
+ if(!this.extension.getOwnedEnds().isEmpty()) {
+ observable = new MultiplicityObservableValue(this.extension.getOwnedEnds().get(0), domain);
+ observable.addChangeListener(this);
+ }
+ currentValue = extension.isRequired();
+ }
+
+ public Object getValueType() {
+ return Boolean.class;
+ }
+
+ @Override
+ protected Boolean doGetValue() {
+ return extension.isRequired();
+ }
+
+ @Override
+ protected void doSetValue(Object value) {
+ if(!(value instanceof Boolean)) {
+ return;
+ }
+
+ Boolean required = (Boolean)value;
+
+ if(extension.getOwnedEnds().isEmpty()) {
+ Activator.log.warn("Unable to change the extension \"isRequired\" property");
+ }
+
+ observable.setValue(required ? MultiplicityObservableValue.ONE : MultiplicityObservableValue.OPTIONAL);
+ currentValue = required;
+ }
+
+ @Override
+ public void dispose() {
+ observable.removeChangeListener(this);
+ observable.dispose();
+ observable = null;
+ super.dispose();
+ }
+
+ public void handleChange(ChangeEvent event) {
+ final boolean oldValue = currentValue;
+ final boolean newValue = doGetValue();
+ currentValue = newValue;
+ fireValueChange(new ValueDiff() {
+
+ @Override
+ public Object getOldValue() {
+ return oldValue;
+ }
+
+ @Override
+ public Object getNewValue() {
+ return newValue;
+ }
+ });
+ }
+
+}
diff --git a/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/databinding/ProfileApplicationObservableList.java b/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/databinding/ProfileApplicationObservableList.java index b7e7a43b665..b38e2f3a50e 100644 --- a/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/databinding/ProfileApplicationObservableList.java +++ b/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/databinding/ProfileApplicationObservableList.java @@ -126,7 +126,7 @@ public class ProfileApplicationObservableList extends WritableList implements IC @Override
public void dispose() {
super.dispose();
- listener.dispose();
+ this.listener.dispose();
}
public void commit(AbstractEditor editor) {
diff --git a/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/modelelement/CustomImageModelElementFactory.java b/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/modelelement/CustomImageModelElementFactory.java index 1ac07d28b24..31f8c8e9471 100644 --- a/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/modelelement/CustomImageModelElementFactory.java +++ b/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/modelelement/CustomImageModelElementFactory.java @@ -13,11 +13,15 @@ package org.eclipse.papyrus.properties.uml.modelelement; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.papyrus.core.services.ServicesRegistry;
+import org.eclipse.papyrus.core.utils.EditorUtils;
import org.eclipse.papyrus.properties.Activator;
import org.eclipse.papyrus.properties.contexts.DataContextElement;
import org.eclipse.papyrus.properties.modelelement.ModelElement;
import org.eclipse.papyrus.properties.modelelement.ModelElementFactory;
import org.eclipse.papyrus.properties.uml.util.UMLUtil;
+import org.eclipse.papyrus.resource.ModelSet;
+import org.eclipse.papyrus.resource.ModelUtils;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Image;
@@ -38,6 +42,13 @@ public class CustomImageModelElementFactory implements ModelElementFactory { if(umlSource instanceof Image) {
EditingDomain domain = AdapterFactoryEditingDomain.getEditingDomainFor(umlSource);
+ //TODO : Find another way to find the EditingDomain, or a way to go
+ //without it
+ if(domain == null) {
+ ServicesRegistry registry = EditorUtils.getServiceRegistry();
+ ModelSet modelSet = ModelUtils.getModelSet(registry);
+ domain = AdapterFactoryEditingDomain.getEditingDomainFor(modelSet.getResources().get(0).getContents().get(0));
+ }
return new CustomImageModelElement((Image)umlSource, domain);
}
diff --git a/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/modelelement/UMLModelElement.java b/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/modelelement/UMLModelElement.java index 134d4f87ce5..9b0c00e75e5 100644 --- a/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/modelelement/UMLModelElement.java +++ b/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/modelelement/UMLModelElement.java @@ -39,6 +39,7 @@ import org.eclipse.papyrus.properties.providers.FeatureContentProvider; import org.eclipse.papyrus.properties.uml.creation.MessageValueSpecificationFactory;
import org.eclipse.papyrus.properties.uml.creation.OwnedRuleCreationFactory;
import org.eclipse.papyrus.properties.uml.creation.UMLPropertyEditorFactory;
+import org.eclipse.papyrus.properties.uml.databinding.ExtensionRequiredObservableValue;
import org.eclipse.papyrus.properties.uml.databinding.PapyrusObservableList;
import org.eclipse.papyrus.properties.uml.databinding.PapyrusObservableValue;
import org.eclipse.papyrus.properties.uml.databinding.SignatureObservableValue;
@@ -50,6 +51,7 @@ import org.eclipse.papyrus.umlutils.PackageUtil; import org.eclipse.papyrus.widgets.creation.ReferenceValueFactory;
import org.eclipse.papyrus.widgets.providers.IStaticContentProvider;
import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Extension;
import org.eclipse.uml2.uml.InstanceValue;
import org.eclipse.uml2.uml.Message;
import org.eclipse.uml2.uml.Package;
@@ -97,6 +99,10 @@ public class UMLModelElement extends EMFModelElement { return new SignatureObservableValue(source, domain);
}
+ if(feature == UMLPackage.eINSTANCE.getExtension_IsRequired()) {
+ return new ExtensionRequiredObservableValue((Extension)source, domain);
+ }
+
if(feature == null) {
return null;
}
@@ -116,6 +122,9 @@ public class UMLModelElement extends EMFModelElement { if(feature == UMLPackage.eINSTANCE.getMessage_Signature()) {
return true;
}
+ if(feature == UMLPackage.eINSTANCE.getExtension_IsRequired()) {
+ return true;
+ }
return super.isEditable(propertyPath);
}
diff --git a/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/providers/UMLLabelProvider.java b/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/providers/UMLLabelProvider.java index 36b78d113e4..084467e81c7 100644 --- a/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/providers/UMLLabelProvider.java +++ b/plugins/uml/org.eclipse.papyrus.properties.uml/src/org/eclipse/papyrus/properties/uml/providers/UMLLabelProvider.java @@ -11,13 +11,19 @@ *****************************************************************************/
package org.eclipse.papyrus.properties.uml.providers;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.facet.infra.browser.uicore.internal.model.ITreeElement;
+import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.papyrus.diagram.common.providers.EditorLabelProvider;
import org.eclipse.papyrus.modelexplorer.MoDiscoLabelProvider;
+import org.eclipse.papyrus.properties.providers.IFilteredLabelProvider;
import org.eclipse.papyrus.widgets.providers.IDetailLabelProvider;
import org.eclipse.swt.graphics.Image;
+import org.eclipse.uml2.uml.Element;
/**
* The Modisco customizable label provider doesn't handle standard EObjects,
@@ -28,7 +34,7 @@ import org.eclipse.swt.graphics.Image; *
* @author Camille Letavernier
*/
-public class UMLLabelProvider extends LabelProvider implements IDetailLabelProvider {
+public class UMLLabelProvider extends LabelProvider implements IDetailLabelProvider, IFilteredLabelProvider {
private ILabelProvider modiscoLabelProvider;
@@ -41,20 +47,50 @@ public class UMLLabelProvider extends LabelProvider implements IDetailLabelProvi */
public UMLLabelProvider() {
modiscoLabelProvider = new MoDiscoLabelProvider();
+ // modiscoLabelProvider = new CustomizableModelLabelProvider(Activator.getDefault().getCustomizationManager());
eObjectLabelProvider = new EditorLabelProvider();
}
@Override
public String getText(Object inputObject) {
+ inputObject = getInput(inputObject);
return getProviderFor(inputObject).getText(inputObject);
}
@Override
public Image getImage(Object inputObject) {
+ inputObject = getInput(inputObject);
return getProviderFor(inputObject).getImage(inputObject);
}
/**
+ * Returns the right object to be displayed : if the input is a selection,
+ * returns the selected element.
+ *
+ * @param inputObject
+ * @return
+ */
+ protected Object getInput(Object inputObject) {
+ if(inputObject instanceof IStructuredSelection) {
+ Object input = ((IStructuredSelection)inputObject).getFirstElement();
+ if(input instanceof EObject) {
+ return input;
+ }
+ if(input instanceof ITreeElement) {
+ return input;
+ }
+ if(input instanceof IAdaptable) {
+ EObject eObject = (EObject)((IAdaptable)input).getAdapter(EObject.class);
+ if(eObject != null) {
+ return eObject;
+ }
+ }
+ return input;
+ }
+ return inputObject;
+ }
+
+ /**
* @param inputObject
* @return the ILabelProvider for input object
*/
@@ -66,8 +102,40 @@ public class UMLLabelProvider extends LabelProvider implements IDetailLabelProvi return modiscoLabelProvider;
}
+ /**
+ * {@inheritDoc}
+ */
public String getDetail(Object object) {
return getText(object);
}
+ /**
+ * {@inheritDoc}
+ */
+ public boolean accept(IStructuredSelection selection) {
+ if(selection.isEmpty()) {
+ return false;
+ }
+ Object element = selection.getFirstElement();
+ EObject eObject = null;
+ if(element instanceof EObject) {
+ eObject = (EObject)element;
+ } else if(element instanceof IAdaptable) {
+ eObject = (EObject)((IAdaptable)element).getAdapter(EObject.class);
+ }
+
+ if(eObject == null) {
+ return false;
+ }
+
+ if(eObject instanceof Element) {
+ return true;
+ }
+ if(eObject instanceof Diagram) {
+ return true;
+ }
+
+ return false;
+ }
+
}
|