Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus')
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/Activator.java2
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/creation/ReferenceValueFactory.java3
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/creation/StringEditionFactory.java84
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/AbstractEditor.java22
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/IElementSelectionListener.java18
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/IElementSelector.java9
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/InputDialog.java185
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleStringEditor.java2
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleValueEditor.java81
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleValueSelectorDialog.java51
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/ReferenceDialog.java193
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/SelectionEditor.java2
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringEditor.java19
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringFileSelector.java175
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringLabel.java2
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/messages/Messages.java10
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/messages/messages.properties7
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/providers/CollectionContentProvider.java6
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/ReferenceSelector.java34
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/StandardSelector.java25
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/StringSelector.java34
-rw-r--r--plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/util/FileUtil.java74
22 files changed, 930 insertions, 108 deletions
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/Activator.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/Activator.java
index 505db2eee72..a4d8e916a65 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/Activator.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/Activator.java
@@ -98,7 +98,7 @@ public class Activator extends AbstractUIPlugin {
*/
public Image getImage(String pluginId, String path) {
final ImageRegistry registry = getImageRegistry();
- String key = pluginId + "/" + path;
+ String key = pluginId + "/" + path; //$NON-NLS-1$
Image image = registry.get(key);
if(image == null) {
registry.put(key, AbstractUIPlugin.imageDescriptorFromPlugin(pluginId, path));
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/creation/ReferenceValueFactory.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/creation/ReferenceValueFactory.java
index d82bc70d6f2..8d30f6d7f83 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/creation/ReferenceValueFactory.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/creation/ReferenceValueFactory.java
@@ -85,6 +85,7 @@ public interface ReferenceValueFactory {
* The widget calling the factory. May be used for example to retrieve the shell for opening a Dialog.
* @param object
* The object to edit
+ * @return the edited object, or null if the object has been edited "in place"
*/
- public void edit(Control widget, Object object);
+ public Object edit(Control widget, Object object);
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/creation/StringEditionFactory.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/creation/StringEditionFactory.java
new file mode 100644
index 00000000000..1064cdc824a
--- /dev/null
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/creation/StringEditionFactory.java
@@ -0,0 +1,84 @@
+/*****************************************************************************
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.widgets.creation;
+
+import java.util.Collection;
+
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.widgets.editors.InputDialog;
+import org.eclipse.papyrus.widgets.messages.Messages;
+import org.eclipse.swt.widgets.Control;
+
+
+public class StringEditionFactory implements ReferenceValueFactory {
+
+ private String title = Messages.StringEditionFactory_EnterANewValue;
+
+ private String label = Messages.StringEditionFactory_EnterANewValue;
+
+ private IInputValidator validator;
+
+ public StringEditionFactory() {
+ }
+
+ public StringEditionFactory(String title, String label) {
+ this.title = title;
+ this.label = label;
+ }
+
+ public StringEditionFactory(IInputValidator validator) {
+ this.validator = validator;
+ }
+
+ public StringEditionFactory(String title, String label, IInputValidator validator) {
+ this.title = title;
+ this.label = label;
+ this.validator = validator;
+ }
+
+ public boolean canCreateObject() {
+ return false;
+ }
+
+ public Object createObject(Control widget) {
+ return null;
+ }
+
+ public Collection<Object> validateObjects(Collection<Object> objectsToValidate) {
+ return objectsToValidate;
+ }
+
+ public boolean canEdit() {
+ return true;
+ }
+
+ public Object edit(Control widget, Object object) {
+ if(!(object instanceof String)) {
+ return object;
+ }
+
+ InputDialog dialog = new InputDialog(widget.getShell(), title, label, (String)object, validator);
+
+ int result = dialog.open();
+ if(result == Window.OK) {
+ String newValue = dialog.getText();
+ return newValue;
+ }
+
+ return object;
+ }
+
+ public void setValidator(IInputValidator validator) {
+ this.validator = validator;
+ }
+}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/AbstractEditor.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/AbstractEditor.java
index bcdeed5323f..2e008261989 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/AbstractEditor.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/AbstractEditor.java
@@ -44,6 +44,11 @@ public abstract class AbstractEditor extends Composite {
protected Label label;
/**
+ * The label value for this editor
+ */
+ protected String labelText;
+
+ /**
* The set of elements listening on changes from this editor
*/
protected Set<ICommitListener> commitListeners = new HashSet<ICommitListener>();
@@ -169,6 +174,8 @@ public abstract class AbstractEditor extends Composite {
* The new text for this editor's label
*/
public void setLabel(String label) {
+ this.labelText = label;
+
if(this.label != null) {
this.label.setText(label);
} else {
@@ -178,6 +185,21 @@ public abstract class AbstractEditor extends Composite {
}
/**
+ * Show or delete the Label Widget.
+ *
+ * @param displayLabel
+ */
+ public void setDisplayLabel(boolean displayLabel) {
+ if(displayLabel) {
+ setLabel(labelText);
+ } else {
+ if(this.label != null) {
+ this.label.dispose();
+ }
+ }
+ }
+
+ /**
* Adds a commit listener to this editor. A Commit event is
* fired when a modification occures on this editor.
*
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/IElementSelectionListener.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/IElementSelectionListener.java
new file mode 100644
index 00000000000..ac44710a12d
--- /dev/null
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/IElementSelectionListener.java
@@ -0,0 +1,18 @@
+/*****************************************************************************
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.widgets.editors;
+
+
+public interface IElementSelectionListener {
+
+ public void addElements(Object[] elements);
+}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/IElementSelector.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/IElementSelector.java
index b2d1107b39d..3503c05a8b2 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/IElementSelector.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/IElementSelector.java
@@ -63,4 +63,13 @@ public interface IElementSelector {
*/
public void clearTemporaryElements();
+ /**
+ * Adds a new listener to this selector.
+ * The selector can inform the listener that new elements have
+ * been selected
+ *
+ * @param listener
+ */
+ public void addElementSelectionListener(IElementSelectionListener listener);
+
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/InputDialog.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/InputDialog.java
new file mode 100644
index 00000000000..352c81b66cf
--- /dev/null
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/InputDialog.java
@@ -0,0 +1,185 @@
+/*****************************************************************************
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.widgets.editors;
+
+
+import java.util.Collections;
+
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.papyrus.widgets.Activator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+/**
+ * A Dialog used to input a String. The dialog uses a IInputValidator
+ * to check the string, and can display an error message.
+ *
+ * @author Camille Letavernier
+ */
+public class InputDialog extends SelectionDialog {
+
+ /**
+ * The initial value for the string
+ */
+ protected String initialValue;
+
+ /**
+ * The string validator
+ */
+ protected IInputValidator validator;
+
+ /**
+ * The label used to display the error message
+ */
+ protected Label errorLabel;
+
+ /**
+ * The label used to display the error icon
+ */
+ protected Label errorImage;
+
+ /**
+ * The text widget used to input a new string
+ */
+ protected Text input;
+
+ /**
+ * The dialog's title
+ */
+ protected String title;
+
+ /**
+ * The label describing the kind of text to input
+ */
+ protected String labelText;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param parentShell
+ * The shell in which the dialog will be opened
+ * @param title
+ * The dialog's title
+ * @param initialValue
+ * The dialog's initial value
+ * @param validator
+ * The validator used to check the input string
+ */
+ public InputDialog(Shell parentShell, String title, String label, String initialValue, IInputValidator validator) {
+ super(parentShell);
+ this.initialValue = initialValue;
+ this.validator = validator;
+ this.title = title;
+ this.labelText = label;
+ }
+
+ @Override
+ protected Composite getDialogArea() {
+ return (Composite)super.getDialogArea();
+ }
+
+ @Override
+ public void create() {
+ super.create();
+
+ ((GridLayout)getDialogArea().getLayout()).numColumns = 2;
+
+ errorImage = new Label(getDialogArea(), SWT.NONE);
+ errorImage.setImage(Activator.getDefault().getImage("/icons/error.gif")); //$NON-NLS-1$
+
+ errorLabel = new Label(getDialogArea(), SWT.NONE);
+ errorLabel.setVisible(false);
+
+ Label label = new Label(getDialogArea(), SWT.None);
+ if(labelText != null)
+ label.setText(labelText);
+ label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
+
+ input = new Text(getDialogArea(), SWT.BORDER);
+ input.setText(initialValue);
+ input.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
+
+ input.addKeyListener(new KeyListener() {
+
+ public void keyPressed(KeyEvent e) {
+ //Nothing
+ }
+
+ public void keyReleased(KeyEvent e) {
+ validate();
+ }
+
+ });
+
+ getShell().setImage(Activator.getDefault().getImage("/icons/papyrus.png")); //$NON-NLS-1$
+
+ if(title != null)
+ getShell().setText(title);
+
+ validate();
+ getShell().pack();
+ }
+
+ /**
+ * Validates the current string. If the string isn't valid,
+ * and error message will be displayed.
+ */
+ protected void validate() {
+ if(validator == null) {
+ errorLabel.setVisible(false);
+ errorImage.setVisible(false);
+ getOkButton().setEnabled(true);
+ return;
+ }
+
+ String errorMessage = validator.isValid(input.getText());
+ if(errorMessage == null) {
+ errorLabel.setVisible(false);
+ errorImage.setVisible(false);
+ getOkButton().setEnabled(true);
+ } else {
+ errorLabel.setText(errorMessage);
+ errorLabel.setVisible(true);
+ errorImage.setVisible(true);
+ getOkButton().setEnabled(false);
+ }
+
+ getDialogArea().layout(true);
+ }
+
+ @Override
+ protected void okPressed() {
+ setResult(Collections.singletonList(input.getText()));
+ super.okPressed();
+ }
+
+ /**
+ * @return the input text from this dialog, or null
+ * if the dialog has been canceled
+ */
+ public String getText() {
+ Object[] result = getResult();
+ if(result == null || result.length == 0)
+ return null;
+ return (String)result[0];
+ }
+
+}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleStringEditor.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleStringEditor.java
index d69ff39f7d2..737646587fc 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleStringEditor.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleStringEditor.java
@@ -11,6 +11,7 @@
*****************************************************************************/
package org.eclipse.papyrus.widgets.editors;
+import org.eclipse.papyrus.widgets.creation.StringEditionFactory;
import org.eclipse.papyrus.widgets.selectors.StringSelector;
import org.eclipse.swt.widgets.Composite;
@@ -35,6 +36,7 @@ public class MultipleStringEditor extends MultipleValueEditor {
*/
public MultipleStringEditor(Composite parent, int style) {
super(parent, style, new StringSelector());
+ setFactory(new StringEditionFactory());
}
/**
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleValueEditor.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleValueEditor.java
index a707e22c599..5ab92ef4b74 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleValueEditor.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleValueEditor.java
@@ -16,6 +16,7 @@ import java.util.LinkedList;
import org.eclipse.core.databinding.observable.ChangeEvent;
import org.eclipse.core.databinding.observable.IChangeListener;
+import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
@@ -31,6 +32,7 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
@@ -152,13 +154,15 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection
listData.minimumHeight = 80;
list.setLayoutData(listData);
+ list.addSelectionListener(this);
+
listViewer = new ListViewer(list);
- listViewer.setContentProvider(new CollectionContentProvider());
+ listViewer.setContentProvider(CollectionContentProvider.instance);
createListControls();
this.selector = selector;
- dialog = new MultipleValueSelectorDialog(parent.getShell(), selector, label, unique);
+ dialog = new MultipleValueSelectorDialog(parent.getShell(), selector, label, unique, ordered);
if(label != null)
dialog.setTitle(label);
@@ -169,7 +173,7 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection
updateControls();
}
- private void updateControls() {
+ protected void updateControls() {
add.setEnabled(!readOnly);
remove.setEnabled(!readOnly);
up.setEnabled(ordered && !readOnly);
@@ -275,30 +279,19 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection
* @param ordered
*/
protected void createListControls() {
- up = new Button(controlsSection, SWT.PUSH);
- up.setImage(Activator.getDefault().getImage("/icons/Up_12x12.gif")); //$NON-NLS-1$
- up.addSelectionListener(this);
- up.setToolTipText(Messages.MultipleValueEditor_MoveSelectedElementsUp);
-
- down = new Button(controlsSection, SWT.PUSH);
- down.setImage(Activator.getDefault().getImage("/icons/Down_12x12.gif")); //$NON-NLS-1$
- down.addSelectionListener(this);
- down.setToolTipText(Messages.MultipleValueEditor_MoveSelectedElementsDown);
-
- add = new Button(controlsSection, SWT.PUSH);
- add.setImage(Activator.getDefault().getImage("/icons/Add_12x12.gif")); //$NON-NLS-1$
- add.addSelectionListener(this);
- add.setToolTipText(Messages.MultipleValueEditor_AddElements);
-
- remove = new Button(controlsSection, SWT.PUSH);
- remove.setImage(Activator.getDefault().getImage("/icons/Delete_12x12.gif")); //$NON-NLS-1$
- remove.addSelectionListener(this);
- remove.setToolTipText(Messages.MultipleValueEditor_RemoveSelectedElements);
-
- edit = new Button(controlsSection, SWT.PUSH);
- edit.setImage(Activator.getDefault().getImage("/icons/Edit_12x12.gif")); //$NON-NLS-1$
- edit.addSelectionListener(this);
- edit.setToolTipText(Messages.MultipleValueEditor_EditSelectedValue);
+ up = createButton(Activator.getDefault().getImage("/icons/Up_12x12.gif"), Messages.MultipleValueEditor_MoveSelectedElementsUp); //$NON-NLS-1$
+ down = createButton(Activator.getDefault().getImage("/icons/Down_12x12.gif"), Messages.MultipleValueEditor_MoveSelectedElementsDown); //$NON-NLS-1$
+ add = createButton(Activator.getDefault().getImage("/icons/Add_12x12.gif"), Messages.MultipleValueEditor_AddElements); //$NON-NLS-1$
+ remove = createButton(Activator.getDefault().getImage("/icons/Delete_12x12.gif"), Messages.MultipleValueEditor_RemoveSelectedElements); //$NON-NLS-1$
+ edit = createButton(Activator.getDefault().getImage("/icons/Edit_12x12.gif"), Messages.MultipleValueEditor_EditSelectedValue); //$NON-NLS-1$
+ }
+
+ protected Button createButton(Image image, String toolTipText) {
+ Button button = new Button(controlsSection, SWT.PUSH);
+ button.setImage(image); //$NON-NLS-1$
+ button.addSelectionListener(this);
+ button.setToolTipText(toolTipText);
+ return button;
}
@Override
@@ -360,6 +353,12 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection
commit();
}
+ @Override
+ protected void commit() {
+ super.commit();
+ listViewer.refresh();
+ }
+
/**
* Handle remove Action
*/
@@ -422,7 +421,19 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection
return;
}
- referenceFactory.edit(this, selection.getFirstElement());
+ int index = listViewer.getList().getSelectionIndex();
+
+ Object currentValue = selection.getFirstElement();
+ Object newValue = referenceFactory.edit(this.edit, selection.getFirstElement());
+
+ if(newValue != currentValue && newValue != null) {
+ modelProperty.remove(index);
+ modelProperty.add(index, newValue);
+
+ //commit(); // The commit only occurs in the case where we modify the list (We don't commit direct edition on objects)
+ }
+
+ commit();
}
/**
@@ -442,7 +453,9 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection
* {@inheritDoc}
*/
public void widgetDefaultSelected(SelectionEvent e) {
- //Nothing
+ if(e.widget == list && edit.isEnabled()) {
+ editAction();
+ }
}
/**
@@ -456,13 +469,15 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection
/**
* Refreshes the viewer when a change occurs on the ObservableList
+ * TODO : Problem : a change occurring on an element of the list is not sent here
+ * TODO : When undoing a command, the change event is not received (Although it modifies the list itself)
*
* @see org.eclipse.core.databinding.observable.IChangeListener#handleChange(org.eclipse.core.databinding.observable.ChangeEvent)
*
* @param event
*/
public void handleChange(ChangeEvent event) {
- listViewer.refresh(true);
+ listViewer.refresh();
}
/**
@@ -508,4 +523,10 @@ public class MultipleValueEditor extends AbstractListEditor implements Selection
list.setToolTipText(text);
super.setLabelToolTipText(text);
}
+
+ @Override
+ public void setModelObservable(IObservableList modelProperty) {
+ super.setModelObservable(modelProperty);
+ updateControls();
+ }
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleValueSelectorDialog.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleValueSelectorDialog.java
index 68da2e45c89..60c2956afda 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleValueSelectorDialog.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/MultipleValueSelectorDialog.java
@@ -47,7 +47,7 @@ import org.eclipse.ui.dialogs.SelectionDialog;
* @author Camille Letavernier
*
*/
-public class MultipleValueSelectorDialog extends SelectionDialog implements SelectionListener {
+public class MultipleValueSelectorDialog extends SelectionDialog implements SelectionListener, IElementSelectionListener {
/**
* The object selector
@@ -158,7 +158,7 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
* The element selector used by this dialog
*/
public MultipleValueSelectorDialog(Shell parentShell, IElementSelector selector) {
- this(parentShell, selector, null, false);
+ this(parentShell, selector, null, false, false);
}
/**
@@ -172,7 +172,7 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
* The title of this dialog
*/
public MultipleValueSelectorDialog(Shell parentShell, IElementSelector selector, String title) {
- this(parentShell, selector, title, false);
+ this(parentShell, selector, title, false, false);
}
/**
@@ -187,7 +187,7 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
* True if the values returned by this dialog should be unique
*/
public MultipleValueSelectorDialog(Shell parentShell, IElementSelector selector, boolean unique) {
- this(parentShell, selector, null, unique);
+ this(parentShell, selector, null, unique, false);
}
/**
@@ -203,7 +203,7 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
* @param unique
* True if the values returned by this dialog should be unique
*/
- public MultipleValueSelectorDialog(Shell parentShell, IElementSelector selector, String title, boolean unique) {
+ public MultipleValueSelectorDialog(Shell parentShell, IElementSelector selector, String title, boolean unique, boolean ordered) {
super(parentShell);
Assert.isNotNull(selector, "The element selector should be defined"); //$NON-NLS-1$
this.selector = selector;
@@ -211,6 +211,9 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
setHelpAvailable(false);
setTitle(title);
this.unique = unique;
+ this.ordered = ordered;
+
+ selector.addElementSelectionListener(this);
}
/**
@@ -222,18 +225,24 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
Composite parent = getDialogArea();
GridLayout layout = (GridLayout)parent.getLayout();
- layout.numColumns = 4;
- layout.makeColumnsEqualWidth = false;
+ layout.numColumns = 2;
+ layout.makeColumnsEqualWidth = true;
- createSelectorSection(parent);
- createControlsSection(parent);
- createListSection(parent);
- createRightButtonsSection(parent);
+ Composite selectorPane = new Composite(parent, SWT.NONE);
+ selectorPane.setLayout(new GridLayout(2, false));
+ selectorPane.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- getShell().setSize(400, 300);
- getShell().layout();
+ Composite selectedPane = new Composite(parent, SWT.NONE);
+ selectedPane.setLayout(new GridLayout(2, false));
+ selectedPane.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- setResult(new LinkedList<Object>(allElements));
+ createSelectorSection(selectorPane);
+ createControlsSection(selectorPane);
+ createListSection(selectedPane);
+ createRightButtonsSection(selectedPane);
+
+ getShell().setSize(600, 400);
+ getShell().layout();
super.getShell().setImage(Activator.getDefault().getImage("/icons/papyrus.png")); //$NON-NLS-1$
@@ -305,7 +314,7 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
selectedElements.setLayoutData(data);
selectedElementsViewer = new ListViewer(selectedElements);
- selectedElementsViewer.setContentProvider(new CollectionContentProvider());
+ selectedElementsViewer.setContentProvider(CollectionContentProvider.instance);
if(labelProvider != null)
selectedElementsViewer.setLabelProvider(labelProvider);
@@ -468,7 +477,7 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
if(factory == null)
return;
- Object newObject = factory.createObject(getShell());
+ Object newObject = factory.createObject(this.create);
if(newObject == null)
return;
@@ -515,8 +524,6 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
selector.setSelectedElements(allElements.toArray());
selectedElementsViewer.setSelection(null);
selectedElementsViewer.refresh();
-
- setResult(new LinkedList<Object>(allElements));
}
/**
@@ -532,7 +539,6 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
protected void removeAllAction() {
allElements.clear();
selector.setSelectedElements(new Object[0]);
- setResult(new LinkedList<Object>());
selectedElementsViewer.setSelection(null);
selectedElementsViewer.refresh();
}
@@ -552,12 +558,10 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
* @param elements
* The elements to be added
*/
- private void addElements(Object[] elements) {
+ public void addElements(Object[] elements) {
if(elements != null) {
allElements.addAll(Arrays.asList(elements));
selectedElementsViewer.refresh();
-
- setResult(new LinkedList<Object>(allElements));
}
}
@@ -573,6 +577,9 @@ public class MultipleValueSelectorDialog extends SelectionDialog implements Sele
factory.validateObjects(objectsToValidate);
selector.clearTemporaryElements();
}
+
+ setResult(new LinkedList<Object>(allElements));
+
super.okPressed();
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/ReferenceDialog.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/ReferenceDialog.java
index e7664b5e726..b82579d0395 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/ReferenceDialog.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/ReferenceDialog.java
@@ -15,9 +15,11 @@ import java.util.Collections;
import org.eclipse.core.databinding.observable.ChangeEvent;
import org.eclipse.core.databinding.observable.IChangeListener;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.papyrus.widgets.Activator;
+import org.eclipse.papyrus.widgets.creation.ReferenceValueFactory;
import org.eclipse.papyrus.widgets.messages.Messages;
import org.eclipse.papyrus.widgets.providers.EncapsulatedContentProvider;
import org.eclipse.papyrus.widgets.providers.IStaticContentProvider;
@@ -28,9 +30,12 @@ import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Widget;
/**
* An editor representing a single reference as a Label
@@ -42,7 +47,7 @@ import org.eclipse.swt.widgets.Composite;
* @author Camille Letavernier
*
*/
-public class ReferenceDialog extends AbstractValueEditor implements IChangeListener, DisposeListener {
+public class ReferenceDialog extends AbstractValueEditor implements IChangeListener, DisposeListener, SelectionListener {
/**
* The CLabel displaying the current value
@@ -50,9 +55,19 @@ public class ReferenceDialog extends AbstractValueEditor implements IChangeListe
protected final CLabel currentValueLabel;
/**
- * The Button used to edit the current value
+ * The Button used to browse the available values
*/
- protected final Button openDialogButton;
+ protected final Button browseValuesButton;
+
+ /**
+ * The Button used to create a new instance
+ */
+ protected final Button createInstanceButton;
+
+ /**
+ * The Button used to edit the current object
+ */
+ protected final Button editInstanceButton;
/**
* The Button used to unset the current value
@@ -81,6 +96,11 @@ public class ReferenceDialog extends AbstractValueEditor implements IChangeListe
protected Object value;
/**
+ * The factory used to create or edit objects directly from this editor
+ */
+ protected ReferenceValueFactory valueFactory;
+
+ /**
*
* Constructs a new ReferenceDialog in the given parent Composite.
* The style will be applied to the CLabel displaying the current value.
@@ -91,56 +111,91 @@ public class ReferenceDialog extends AbstractValueEditor implements IChangeListe
public ReferenceDialog(Composite parent, int style) {
super(parent, style);
- ((GridLayout)getLayout()).numColumns = 4;
+ ((GridLayout)getLayout()).numColumns = 6;
currentValueLabel = factory.createCLabel(this, null, SWT.BORDER | style);
currentValueLabel.setLayoutData(getDefaultLayoutData());
dialog = new TreeSelectorDialog(parent.getShell());
- openDialogButton = factory.createButton(this, null, SWT.PUSH);
- openDialogButton.setImage(Activator.getDefault().getImage("/icons/browse_12x12.gif")); //$NON-NLS-1$
- openDialogButton.setToolTipText(Messages.ReferenceDialog_EditValue);
- openDialogButton.addSelectionListener(new SelectionListener() {
-
- public void widgetSelected(SelectionEvent e) {
- dialog.setInitialElementSelections(Collections.singletonList(getValue()));
- int result = dialog.open();
- if(result == Window.OK) {
- Object[] newValue = dialog.getResult();
- if(newValue.length == 0) {
- modelProperty.setValue(null);
- } else {
- modelProperty.setValue(newValue[0]);
- }
- updateLabel();
- }
- }
-
- public void widgetDefaultSelected(SelectionEvent e) {
- // Nothing
- }
-
- });
+ browseValuesButton = factory.createButton(this, null, SWT.PUSH);
+ browseValuesButton.setImage(Activator.getDefault().getImage("/icons/browse_12x12.gif")); //$NON-NLS-1$
+ browseValuesButton.setToolTipText(Messages.ReferenceDialog_EditValue);
+ browseValuesButton.addSelectionListener(this);
unsetButton = factory.createButton(this, null, SWT.PUSH);
unsetButton.setImage(Activator.getDefault().getImage("/icons/Delete_12x12.gif")); //$NON-NLS-1$
unsetButton.setToolTipText(Messages.ReferenceDialog_UnsetValue);
- unsetButton.addSelectionListener(new SelectionListener() {
-
- public void widgetSelected(SelectionEvent e) {
- if(modelProperty != null) {
- modelProperty.setValue(null);
- } else {
- handleChange(null);
- }
- }
+ unsetButton.addSelectionListener(this);
- public void widgetDefaultSelected(SelectionEvent e) {
- //Nothing
+ createInstanceButton = factory.createButton(this, null, SWT.PUSH);
+ createInstanceButton.setImage(Activator.getDefault().getImage("/icons/Add_12x12.gif")); //$NON-NLS-1$
+ createInstanceButton.setToolTipText(Messages.ReferenceDialog_CreateANewObject);
+ createInstanceButton.addSelectionListener(this);
+
+ editInstanceButton = factory.createButton(this, null, SWT.PUSH);
+ editInstanceButton.setImage(Activator.getDefault().getImage("/icons/Edit_12x12.gif")); //$NON-NLS-1$
+ editInstanceButton.setToolTipText(Messages.ReferenceDialog_EditTheCurrentValue);
+ editInstanceButton.addSelectionListener(this);
+
+ updateControls();
+ }
+
+ /**
+ * The action executed when the "browse" button is selected
+ * Choose a value from a selection of already created objects
+ */
+ protected void browseAction() {
+ dialog.setInitialElementSelections(Collections.singletonList(getValue()));
+ int result = dialog.open();
+ if(result == Window.OK) {
+ Object[] newValue = dialog.getResult();
+ if(newValue.length == 0) {
+ modelProperty.setValue(null);
+ } else {
+ modelProperty.setValue(newValue[0]);
}
+ updateLabel();
+ }
+ }
- });
+ /**
+ * The action executed when the "create" button is selected
+ * Create a new instance and assign it to this reference
+ */
+ protected void createAction() {
+ if(valueFactory != null && valueFactory.canCreateObject()) {
+ Object value = valueFactory.createObject(createInstanceButton);
+ if(value == null)
+ return;
+ valueFactory.validateObjects(Collections.singleton(value));
+ modelProperty.setValue(value);
+ }
+ }
+
+ /**
+ * The action executed when the "edit" button is selected
+ * Edits the object that is currently selected
+ */
+ protected void editAction() {
+ Object currentValue = modelProperty.getValue();
+ if(currentValue != null && valueFactory != null && valueFactory.canEdit()) {
+ Object newValue = valueFactory.edit(editInstanceButton, modelProperty.getValue());
+ if(newValue != currentValue)
+ modelProperty.setValue(value);
+ }
+ }
+
+ /**
+ * The action executed when the "unset" button is selected
+ * Sets the current reference to null
+ */
+ protected void unsetAction() {
+ if(modelProperty != null) {
+ modelProperty.setValue(null);
+ } else {
+ handleChange(null);
+ }
}
/**
@@ -227,7 +282,7 @@ public class ReferenceDialog extends AbstractValueEditor implements IChangeListe
@Override
public void setReadOnly(boolean readOnly) {
currentValueLabel.setEnabled(!readOnly);
- openDialogButton.setEnabled(!readOnly);
+ browseValuesButton.setEnabled(!readOnly);
unsetButton.setEnabled(!readOnly);
}
@@ -281,9 +336,65 @@ public class ReferenceDialog extends AbstractValueEditor implements IChangeListe
}
@Override
+ public void setModelObservable(IObservableValue modelProperty) {
+ super.setModelObservable(modelProperty);
+ updateControls();
+ }
+
+ @Override
public void setToolTipText(String text) {
super.setLabelToolTipText(text);
currentValueLabel.setToolTipText(text);
}
+ public void setValueFactory(ReferenceValueFactory factory) {
+ valueFactory = factory;
+ updateControls();
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ Widget widget = e.widget;
+ if(widget == browseValuesButton) {
+ browseAction();
+ } else if(widget == createInstanceButton) {
+ createAction();
+ } else if(widget == editInstanceButton) {
+ editAction();
+ } else if(widget == unsetButton) {
+ unsetAction();
+ }
+ updateControls();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ //Nothing
+ }
+
+ /**
+ * Updates the buttons' status
+ */
+ protected void updateControls() {
+ //Check if the edit & create buttons should be displayed
+ boolean exclude = valueFactory == null || !valueFactory.canCreateObject();
+ setExclusion(editInstanceButton, exclude);
+ setExclusion(createInstanceButton, exclude);
+
+ //If they are displayed, check if they should be enabled
+ if(!exclude) {
+ editInstanceButton.setEnabled(valueFactory != null && valueFactory.canEdit() && modelProperty != null && modelProperty.getValue() != null);
+ createInstanceButton.setEnabled(valueFactory != null && valueFactory.canCreateObject());
+ }
+ }
+
+ private void setExclusion(Control control, boolean exclude) {
+ if(control.getLayoutData() == null) {
+ GridData data = new GridData();
+ data.exclude = exclude;
+ control.setLayoutData(data);
+ } else {
+ GridData data = (GridData)control.getLayoutData();
+ data.exclude = exclude;
+ }
+ }
+
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/SelectionEditor.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/SelectionEditor.java
index 3272f8c2ced..0acd6c5c2b8 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/SelectionEditor.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/SelectionEditor.java
@@ -279,7 +279,7 @@ public class SelectionEditor extends Composite implements SelectionListener {
selectedElementsViewer = new ListViewer(selectedElements);
- selectedElementsViewer.setContentProvider(new CollectionContentProvider());
+ selectedElementsViewer.setContentProvider(CollectionContentProvider.instance);
if(labelProvider != null)
selectedElementsViewer.setLabelProvider(labelProvider);
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 9019a3583d6..3a260ee0726 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
@@ -65,15 +65,17 @@ public class StringEditor extends AbstractValueEditor implements KeyListener {
super(parent, label);
GridData data = getDefaultLayoutData();
- text = factory.createText(this, null, style);
- text.setLayoutData(data);
if((style & SWT.MULTI) != 0) {
data.heightHint = 55;
style = style | SWT.V_SCROLL;
- if(label != null) {
- super.label.setLayoutData(getLabelLayoutData());
- }
+ }
+
+ text = factory.createText(this, null, style);
+ text.setLayoutData(data);
+
+ if(label != null) {
+ super.label.setLayoutData(getLabelLayoutData());
}
//We listen on Carriage Return only if the editor isn't multiline
@@ -113,7 +115,7 @@ public class StringEditor extends AbstractValueEditor implements KeyListener {
*/
public void keyReleased(KeyEvent e) {
if((e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) && e.stateMask == SWT.NONE) {
- text.notifyListeners(SWT.FocusOut, new Event());
+ notifyChange();
}
}
@@ -143,6 +145,11 @@ public class StringEditor extends AbstractValueEditor implements KeyListener {
return !text.isEnabled();
}
+ protected void notifyChange() {
+ text.notifyListeners(SWT.FocusOut, new Event());
+ commit();
+ }
+
@Override
public void setToolTipText(String tooltip) {
text.setToolTipText(tooltip);
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringFileSelector.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringFileSelector.java
new file mode 100644
index 00000000000..c4d4ad70147
--- /dev/null
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringFileSelector.java
@@ -0,0 +1,175 @@
+/*****************************************************************************
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.widgets.editors;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.widgets.messages.Messages;
+import org.eclipse.papyrus.widgets.util.FileUtil;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.ui.dialogs.ResourceSelectionDialog;
+
+
+public class StringFileSelector extends StringEditor {
+
+ private Button browse;
+
+ private Button browseWorkspace;
+
+ private List<String> filterNames;
+
+ private List<String> filterExtensions;
+
+ public StringFileSelector(Composite parent, int style) {
+ super(parent, style);
+ ((GridLayout)getLayout()).numColumns = 5;
+
+ browse = factory.createButton(this, Messages.StringFileSelector_Browse, SWT.PUSH);
+ browse.setLayoutData(new GridData());
+ browseWorkspace = factory.createButton(this, Messages.StringFileSelector_BrowseWorkspace, SWT.PUSH);
+ browseWorkspace.setLayoutData(new GridData());
+
+ browse.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ File file = FileUtil.getFile(text.getText());
+
+ FileDialog dialog = new FileDialog(getShell());
+ dialog.setFileName(file.getAbsolutePath());
+ dialog.setFilterExtensions(filterExtensions.toArray(new String[filterExtensions.size()]));
+ dialog.setFilterNames(filterNames.toArray(new String[filterNames.size()]));
+ String result = dialog.open();
+ if(result == null) { //Cancel
+ return;
+ }
+ setResult(result);
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ //Nothing
+ }
+
+ });
+
+ filterNames = new LinkedList<String>();
+ filterExtensions = new LinkedList<String>();
+
+
+ browseWorkspace.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ IWorkspaceRoot workspace = ResourcesPlugin.getWorkspace().getRoot();
+ IFile currentFile = FileUtil.getIFile(text.getText());
+
+ ResourceSelectionDialog dialog = new ResourceSelectionDialog(getShell(), workspace, ""); //$NON-NLS-1$
+
+ if(currentFile != null && currentFile.exists()) {
+ dialog.setInitialSelections(new IFile[]{ currentFile });
+ }
+
+ int code = dialog.open();
+ if(code == Window.OK) {
+ Object[] result = dialog.getResult();
+ if(result.length > 0) {
+ Object file = result[0];
+ if(file instanceof IFile) {
+ setResult((IFile)file);
+ }
+ }
+ }
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ //Nothing
+ }
+
+ });
+ }
+
+ protected void setResult(IFile file) {
+ text.setText(file.getFullPath().toString());
+ notifyChange();
+ }
+
+ protected void setResult(File file) {
+ text.setText(file.getAbsolutePath());
+ notifyChange();
+ }
+
+ protected void setResult(String path) {
+ text.setText(path);
+ notifyChange();
+ }
+
+ public void setFilters(String[] filterExtensions, String[] filterNames) {
+ setFilterNames(filterNames);
+ setFilterExtensions(filterExtensions);
+ }
+
+ public void setFilterExtensions(String[] filterExtensions) {
+ this.filterExtensions = Arrays.asList(filterExtensions);
+ }
+
+ public void setFilterNames(String[] filterNames) {
+ this.filterNames = Arrays.asList(filterNames);
+ }
+
+ public void addFilteredExtension(String filteredExtension, String filterName) {
+ if(filteredExtension != null) {
+ if(filterName == null) {
+ filterName = filteredExtension;
+ }
+
+ filterExtensions.add(filteredExtension);
+ filterNames.add(filterName);
+ }
+ }
+
+ @Override
+ public Object getEditableType() {
+ return String.class;
+ }
+
+ @Override
+ public void setReadOnly(boolean readOnly) {
+ super.setReadOnly(readOnly);
+ browse.setEnabled(!readOnly);
+ browseWorkspace.setEnabled(!readOnly);
+ }
+
+ public void setAllowWorkspace(boolean allowWorkspace) {
+ //((GridData)browseWorkspace.getLayoutData()).exclude = !allowWorkspace;
+ browseWorkspace.setEnabled(allowWorkspace);
+ layout();
+ }
+
+ public void setAllowFileSystem(boolean allowFileSystem) {
+ //((GridData)browse.getLayoutData()).exclude = !allowFileSystem;
+ browse.setEnabled(allowFileSystem);
+ layout();
+ }
+
+}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringLabel.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringLabel.java
index 31e51388a5c..5c1aa42f9c6 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringLabel.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/editors/StringLabel.java
@@ -41,7 +41,7 @@ public class StringLabel extends AbstractValueEditor implements IChangeListener
*/
public StringLabel(Composite parent, int style) {
super(parent, style);
- valueLabel = factory.createCLabel(this, "", style);
+ valueLabel = factory.createCLabel(this, "", style); //$NON-NLS-1$
valueLabel.setLayoutData(getDefaultLayoutData());
labelProvider = new LabelProvider();
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/messages/Messages.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/messages/Messages.java
index 85259bc4ed2..918851714ce 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/messages/Messages.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/messages/Messages.java
@@ -51,6 +51,10 @@ public class Messages extends NLS {
/** The Multiple value selector dialog_ remove all elements. */
public static String MultipleValueSelectorDialog_RemoveAllElements;
+ public static String ReferenceDialog_CreateANewObject;
+
+ public static String ReferenceDialog_EditTheCurrentValue;
+
/** The Reference dialog_ edit value */
public static String ReferenceDialog_EditValue;
@@ -66,6 +70,12 @@ public class Messages extends NLS {
/** the Enum radio_ no value */
public static String EnumRadio_NoValue;
+ public static String StringEditionFactory_EnterANewValue;
+
+ public static String StringFileSelector_Browse;
+
+ public static String StringFileSelector_BrowseWorkspace;
+
static {
// initialize resource bundle
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/messages/messages.properties b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/messages/messages.properties
index 973772b5f2f..66b1dd3bf4f 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/messages/messages.properties
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/messages/messages.properties
@@ -8,8 +8,13 @@ MultipleValueSelectorDialog_AddSelectedElements=Add selected elements
MultipleValueSelectorDialog_RemoveAllElements=Remove all elements
MultipleValueSelectorDialog_CreateNewElement=Create a new element
MultipleValueSelectorDialog_DeleteNewElement=Deletes a newly created element
+ReferenceDialog_CreateANewObject=Create a new object
+ReferenceDialog_EditTheCurrentValue=Edit the current value
ReferenceDialog_EditValue=Edit the reference value
ReferenceDialog_SelectValue=Select the value for this reference
ReferenceDialog_Unset=<Unset>
ReferenceDialog_UnsetValue=Unset the reference value
-EnumRadio_NoValue=There is no value to select \ No newline at end of file
+EnumRadio_NoValue=There is no value to select
+StringEditionFactory_EnterANewValue=Enter the new value
+StringFileSelector_Browse=Browse
+StringFileSelector_BrowseWorkspace=Browse workspace
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/providers/CollectionContentProvider.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/providers/CollectionContentProvider.java
index 6e6202995fd..f00f0ac0f2b 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/providers/CollectionContentProvider.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/providers/CollectionContentProvider.java
@@ -24,6 +24,10 @@ import org.eclipse.jface.viewers.Viewer;
*/
public class CollectionContentProvider implements IStructuredContentProvider {
+ private CollectionContentProvider() {
+
+ }
+
/**
* {@inheritDoc}
*/
@@ -56,4 +60,6 @@ public class CollectionContentProvider implements IStructuredContentProvider {
return new Object[]{};
}
+
+ public static CollectionContentProvider instance = new CollectionContentProvider();
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/ReferenceSelector.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/ReferenceSelector.java
index fe6e53a40a2..8e88feffa34 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/ReferenceSelector.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/ReferenceSelector.java
@@ -21,10 +21,13 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.papyrus.widgets.editors.IElementSelectionListener;
import org.eclipse.papyrus.widgets.editors.IElementSelector;
import org.eclipse.papyrus.widgets.providers.EncapsulatedContentProvider;
import org.eclipse.papyrus.widgets.providers.IStaticContentProvider;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
@@ -71,6 +74,9 @@ public class ReferenceSelector implements IElementSelector {
*/
protected boolean multiSelection;
+
+ private Set<IElementSelectionListener> elementSelectionListeners = new HashSet<IElementSelectionListener>();
+
/**
* The set of selected elements. If the selector is marked as "unique",
* these elements will be filtered in the Tree.
@@ -201,7 +207,7 @@ public class ReferenceSelector implements IElementSelector {
this.contentProvider = new EncapsulatedContentProvider(staticContentProvider);
if(fTree != null) {
fTree.getViewer().setContentProvider(contentProvider);
- fTree.getViewer().setInput("");
+ fTree.getViewer().setInput(""); //$NON-NLS-1$
}
}
@@ -216,7 +222,7 @@ public class ReferenceSelector implements IElementSelector {
// filter.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
final PatternFilter filter = new PatternFilter();
- filter.setPattern("*");
+ filter.setPattern("*"); //$NON-NLS-1$
fTree = new FilteredTree(content, SWT.MULTI | SWT.BORDER, new PatternFilter(), true);
@@ -224,7 +230,7 @@ public class ReferenceSelector implements IElementSelector {
fTree.getViewer().getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
if(contentProvider != null) {
fTree.getViewer().setContentProvider(contentProvider);
- fTree.getViewer().setInput("");
+ fTree.getViewer().setInput(""); //$NON-NLS-1$
}
if(labelProvider != null) {
fTree.getViewer().setLabelProvider(labelProvider);
@@ -248,12 +254,34 @@ public class ReferenceSelector implements IElementSelector {
}
}
});
+
+ //Adds double-click support
+ fTree.getViewer().getTree().addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ // Nothing
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ if(!elementSelectionListeners.isEmpty()) {
+ Object[] selectedElements = getSelectedElements();
+ for(IElementSelectionListener listener : elementSelectionListeners) {
+ listener.addElements(selectedElements);
+ }
+ }
+ }
+
+ });
}
public void setUnique(boolean unique) {
this.unique = unique;
}
+ public void addElementSelectionListener(IElementSelectionListener listener) {
+ elementSelectionListeners.add(listener);
+ }
+
// /**
// * A Text field to let the user type its own filter
// *
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/StandardSelector.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/StandardSelector.java
index 2c36accdd80..359427ac86d 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/StandardSelector.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/StandardSelector.java
@@ -12,10 +12,15 @@
package org.eclipse.papyrus.widgets.selectors;
import java.lang.reflect.Constructor;
+import java.util.HashSet;
+import java.util.Set;
import org.eclipse.core.runtime.Assert;
import org.eclipse.papyrus.widgets.Activator;
+import org.eclipse.papyrus.widgets.editors.AbstractEditor;
import org.eclipse.papyrus.widgets.editors.AbstractValueEditor;
+import org.eclipse.papyrus.widgets.editors.ICommitListener;
+import org.eclipse.papyrus.widgets.editors.IElementSelectionListener;
import org.eclipse.papyrus.widgets.editors.IElementSelector;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
@@ -35,10 +40,12 @@ public class StandardSelector implements IElementSelector {
private Class<? extends AbstractValueEditor> editorClass;
/**
- * The AbstractValueEditor used by this selecotr
+ * The AbstractValueEditor used by this selector
*/
private AbstractValueEditor editor;
+ private Set<IElementSelectionListener> elementSelectionListeners = new HashSet<IElementSelectionListener>();
+
/**
* Instantiates this selector, using the specified editor class
*
@@ -85,6 +92,18 @@ public class StandardSelector implements IElementSelector {
try {
Constructor<? extends AbstractValueEditor> construct = editorClass.getDeclaredConstructor(Composite.class, Integer.TYPE);
editor = construct.newInstance(parent, SWT.BORDER);
+ editor.addCommitListener(new ICommitListener() {
+
+ public void commit(AbstractEditor editor) {
+ if(!elementSelectionListeners.isEmpty()) {
+ Object value = StandardSelector.this.editor.getValue();
+ for(IElementSelectionListener listener : elementSelectionListeners) {
+ listener.addElements(new Object[]{ value });
+ }
+ }
+ }
+
+ });
} catch (Exception ex) {
Activator.log.error(ex);
}
@@ -98,4 +117,8 @@ public class StandardSelector implements IElementSelector {
//Ignored
}
+ public void addElementSelectionListener(IElementSelectionListener listener) {
+ elementSelectionListeners.add(listener);
+ }
+
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/StringSelector.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/StringSelector.java
index 94b40eb000b..af98b04fba8 100644
--- a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/StringSelector.java
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/selectors/StringSelector.java
@@ -11,8 +11,14 @@
*****************************************************************************/
package org.eclipse.papyrus.widgets.selectors;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.papyrus.widgets.editors.IElementSelectionListener;
import org.eclipse.papyrus.widgets.editors.IElementSelector;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
@@ -37,6 +43,8 @@ public class StringSelector implements IElementSelector {
*/
protected boolean multiline;
+ protected Set<IElementSelectionListener> elementSelectionListeners = new HashSet<IElementSelectionListener>();
+
/**
* Constructs a single-line String Selector
*/
@@ -77,6 +85,28 @@ public class StringSelector implements IElementSelector {
*/
public void createControls(Composite parent) {
text = new Text(parent, (multiline ? SWT.MULTI : SWT.NONE) | SWT.BORDER);
+ if(!multiline) {
+ text.addKeyListener(new KeyListener() {
+
+ public void keyPressed(KeyEvent e) {
+ //Nothing
+ }
+
+ public void keyReleased(KeyEvent e) {
+ if((e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) && e.stateMask == SWT.NONE) {
+ if(!elementSelectionListeners.isEmpty()) {
+ Object[] result = getSelectedElements();
+ if(!result[0].equals("")) { //$NON-NLS-1$
+ for(IElementSelectionListener listener : elementSelectionListeners) {
+ listener.addElements(result);
+ }
+ }
+ }
+ }
+ }
+
+ });
+ }
}
/**
@@ -101,4 +131,8 @@ public class StringSelector implements IElementSelector {
public void clearTemporaryElements() {
//Ignored
}
+
+ public void addElementSelectionListener(IElementSelectionListener listener) {
+ elementSelectionListeners.add(listener);
+ }
}
diff --git a/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/util/FileUtil.java b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/util/FileUtil.java
new file mode 100644
index 00000000000..de096645357
--- /dev/null
+++ b/plugins/core/org.eclipse.papyrus.widgets/src/org/eclipse/papyrus/widgets/util/FileUtil.java
@@ -0,0 +1,74 @@
+/*****************************************************************************
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.widgets.util;
+
+import java.io.File;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.papyrus.widgets.Activator;
+
+
+public class FileUtil {
+
+ public static String getPath(IFile file, boolean absolute) {
+ if(absolute) {
+ return file.getLocation().toString();
+ }
+ return file.getFullPath().toString();
+ }
+
+ public static IFile getIFile(String location) {
+ //Search the file in the workspace
+ IWorkspaceRoot workspace = ResourcesPlugin.getWorkspace().getRoot();
+ IPath path = new Path(location);
+ IFile currentFile = null;
+ try {
+ currentFile = workspace.getFile(path);
+ } catch (IllegalArgumentException ex) {
+ //Ignore
+ }
+
+ //Then search it on the disk
+ if(currentFile == null || !currentFile.exists()) {
+ currentFile = workspace.getFileForLocation(path);
+ }
+
+ return currentFile;
+ }
+
+ public static File getFile(String location) {
+ IFile iFile = getIFile(location);
+ if(iFile == null || !iFile.exists()) {
+ return new File(location);
+ }
+
+ return new File(iFile.getLocationURI());
+ }
+
+ public static File getWorkspaceFile(String location) {
+ IWorkspaceRoot workspace = ResourcesPlugin.getWorkspace().getRoot();
+ IPath path = new Path(location);
+ IFile currentFile = null;
+ try {
+ currentFile = workspace.getFile(path);
+ } catch (IllegalArgumentException ex) {
+ Activator.log.error(ex);
+ return null;
+ }
+
+ return currentFile.getLocation().toFile();
+ }
+}

Back to the top