/** * */ 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.common.notify.Adapter; import org.eclipse.emf.databinding.EMFDataBindingContext; 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.emf.edit.provider.IItemPropertyDescriptor; import org.eclipse.emf.edit.provider.IItemPropertySource; import org.eclipse.emf.edit.provider.ItemProviderAdapter; 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.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import de.urszeidler.eclipse.shr5.AttributModifikatorWert; import de.urszeidler.eclipse.shr5.Modifizierbar; import de.urszeidler.eclipse.shr5.Modifyable; import de.urszeidler.eclipse.shr5.Shr5Package; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.emf.commons.ui.binding.BindingToolkit; import de.urszeidler.emf.commons.ui.binding.PlainBindingToolkit; import de.urszeidler.emf.commons.ui.dialogs.OwnChooseDialog; import de.urszeidler.emf.commons.ui.dialogs.SimpleEObjectDialog; import de.urszeidler.emf.commons.ui.util.NullObject; import de.urszeidler.emf.commons.ui.util.converter.ReferenceToStringConverter; import de.urszeidler.shr5.ecp.editor.widgets.AttributModifikatorWertWidget; /** * @author urs */ public class CreateAttributModifikatorDialog extends SimpleEObjectDialog { private final Modifizierbar modifizierbar; protected final class SimpleBindingToolkit extends PlainBindingToolkit implements BindingToolkit { public SimpleBindingToolkit(EMFDataBindingContext ctx, EObject eObject) { super(ctx, eObject); } @Override public IObservableValue bindFeature(Text text, EReference feature) { IObservableValue observeValue = EMFObservables.observeValue(eObject, feature); ISWTObservableValue observeEditable = SWTObservables.observeText(text, SWT.Modify); UpdateValueStrategy updateStrategie = new EMFUpdateValueStrategy(); updateStrategie.setConverter(new ReferenceToStringConverter(AdapterFactoryUtil.getInstance().getLabelProvider())); Binding binding = ctx.bindValue(observeEditable, observeValue, null, updateStrategie); ctx.addBinding(binding); return observeValue; } } public CreateAttributModifikatorDialog(Shell parentShell, AttributModifikatorWert object, Modifizierbar modifizierbar, String message) { super(parentShell, object); binding = new SimpleBindingToolkit(ctx, eObject); this.modifizierbar = modifizierbar; this.message = message; } @Override protected Control createDialogArea(Composite parent) { // create a composite with standard margins and spacing Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); applyDialogFont(composite); AttributModifikatorWertWidget widget = new AttributModifikatorWertWidget(composite, SWT.NORMAL, binding) { @Override protected void createContent(BindingToolkit bindingToolkit) { createattributContent(bindingToolkit); createwertContent(bindingToolkit); createmodifiziertesContent(bindingToolkit); } @Override protected void handlemodifiziertesChooseBtnClick() { ((AttributModifikatorWert)eObject).setModifiziertes(modifizierbar); Adapter pd = AdapterFactoryUtil.getInstance().getAdapterFactory().adapt(eObject, IItemPropertySource.class); ItemProviderAdapter ipd = (ItemProviderAdapter)pd; IItemPropertyDescriptor itemPropertyDescriptor = ipd.getPropertyDescriptor(eObject, Shr5Package.Literals.ATTRIBUT_MODIFIKATOR_WERT__MODIFYABLE); Object[] array = NullObject.toChoises(itemPropertyDescriptor.getChoiceOfValues(eObject)); OwnChooseDialog dialog = new OwnChooseDialog(getShell(), array); dialog.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider()); int open = dialog.open(); if (open == Dialog.OK) { Object[] result = dialog.getResult(); if (result.length > 0) ((AttributModifikatorWert)eObject).setModifyable(result[0] instanceof NullObject ? null: (Modifyable)result[0]); else ((AttributModifikatorWert)eObject).setModifiziertes(null); // Notification notification = new NotificationImpl(Notification.SET, true, false); // eObject.eNotify(notification); } } @Override protected void handleattributChooseBtnClick() { ((AttributModifikatorWert)eObject).setModifiziertes(modifizierbar); Adapter pd = AdapterFactoryUtil.getInstance().getAdapterFactory().adapt(eObject, IItemPropertySource.class); ItemProviderAdapter ipd = (ItemProviderAdapter)pd; IItemPropertyDescriptor itemPropertyDescriptor = ipd.getPropertyDescriptor(eObject, Shr5Package.eINSTANCE.getAttributModifikatorWert_Attribut()); Object[] array = NullObject.toChoises(itemPropertyDescriptor.getChoiceOfValues(eObject)); OwnChooseDialog dialog = new OwnChooseDialog(getShell(), array); dialog.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider()); int open = dialog.open(); if (open == Dialog.OK) { Object[] result = dialog.getResult(); if (result.length > 0) ((AttributModifikatorWert)eObject).setAttribut((EAttribute)result[0]); else ((AttributModifikatorWert)eObject).setModifiziertes(null); // Notification notification = new NotificationImpl(Notification.SET, true, false); // eObject.eNotify(notification); } } }; widget.setLayoutData(new GridData(GridData.FILL_BOTH)); return composite; } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.IconAndMessageDialog#getImage() */ @Override protected Image getImage() { return getQuestionImage(); } }