package de.urszeidler.shr5.ecp.dialogs;
import org.eclipse.core.databinding.Binding;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.EMFObservables;
import org.eclipse.emf.databinding.EMFUpdateValueStrategy;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.jface.databinding.swt.ISWTObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
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.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil;
import de.urszeidler.emf.commons.ui.dialogs.OwnChooseDialog;
import de.urszeidler.emf.commons.ui.dialogs.SimpleEObjectDialog;
import de.urszeidler.emf.commons.ui.util.converter.ReferenceToStringConverter;
/**
* This dialog set a integer feature and a reference feture together.
*
* @author urs
*/
public class ReferenceValueDialog extends SimpleEObjectDialog {
private Text txtReference;
private Text txtWerttxt;
private EReference referenceFeature;
private EAttribute wertFeature;
private Object[] selectAbles;
public ReferenceValueDialog(Shell parentShell, EObject eObject, EReference referenceFeature, EAttribute wertFeature, Object[] selectAbles) {
super(parentShell, eObject);
this.referenceFeature = referenceFeature;
this.wertFeature = wertFeature;
this.selectAbles = selectAbles;
}
/**
* Create contents of the dialog.
*
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite)super.createDialogArea(parent);
container.setLayout(new GridLayout(3, false));
Label lblRef = new Label(container, SWT.NONE);
lblRef.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblRef.setText("ref");
txtReference = new Text(container, SWT.BORDER);
txtReference.setText("reference");
txtReference.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Button button = new Button(container, SWT.NONE);
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
OwnChooseDialog dialog = new OwnChooseDialog(getShell(), selectAbles);
dialog.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider());
int open = dialog.open();
if (open == Dialog.OK) {
Object[] result = dialog.getResult();
if (result.length > 0) {
eObject.eSet(referenceFeature, result[0]);
} else
eObject.eSet(referenceFeature, null);
}
}
});
button.setText("...");
Label lblWert = new Label(container, SWT.NONE);
lblWert.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblWert.setText("wert");
txtWerttxt = new Text(container, SWT.BORDER);
txtWerttxt.setText("wert_Txt");
txtWerttxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
new Label(container, SWT.NONE);
IObservableValue observeValue = EMFObservables.observeValue(eObject, referenceFeature);
ISWTObservableValue observeEditable = SWTObservables.observeText(txtReference, SWT.Modify);
UpdateValueStrategy updateStrategie = new EMFUpdateValueStrategy();
updateStrategie.setConverter(new ReferenceToStringConverter(AdapterFactoryUtil.getInstance().getLabelProvider()));
Binding binding = ctx.bindValue(observeEditable, observeValue, null, updateStrategie);
ctx.addBinding(binding);
IObservableValue observeWertValue = EMFObservables.observeValue(eObject, wertFeature);
ISWTObservableValue observeWertEditable = SWTObservables.observeText(txtWerttxt, SWT.Modify);
binding = ctx.bindValue(observeWertEditable, observeWertValue, new EMFUpdateValueStrategy(), new EMFUpdateValueStrategy());
ctx.addBinding(binding);
return container;
}
/**
* Create contents of the button bar.
*
* @param parent
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
/**
* Return the initial size of the dialog.
*/
@Override
protected Point getInitialSize() {
return new Point(450, 300);
}
@Override
protected Image getImage() {
return getQuestionImage();
}
}