package de.urszeidler.shr5.ecp.editor.widgets; import org.eclipse.core.databinding.Binding; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.core.databinding.conversion.Converter; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.emf.databinding.EMFUpdateValueStrategy; import org.eclipse.emf.databinding.edit.EMFEditObservables; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.databinding.fieldassist.ControlDecorationSupport; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.forms.widgets.FormToolkit; import de.urszeidler.eclipse.shr5Management.CharacterGenerator; import de.urszeidler.eclipse.shr5Management.KarmaGenerator; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.eclipse.shr5Management.Resourcen; import de.urszeidler.eclipse.shr5Management.Shr5Generator; import de.urszeidler.eclipse.shr5Management.Shr5System; import de.urszeidler.eclipse.shr5Management.util.ShadowrunManagmentTools; import de.urszeidler.shr5.ecp.editor.pages.Messages; public class ResourceGeneratorOption extends Composite { private static final String EMPTY = ""; //$NON-NLS-1$ private DataBindingContext m_bindingContext; private FormToolkit toolkit;// = new FormToolkit(Display.getCurrent()); private Resourcen object; private ManagedCharacter context; private EditingDomain editingDomain; private Label lblspend; private Label lblleft; private int minSize = 50; private EStructuralFeature shr5GeneratorResourceSpend; /** * Create the composite. * * @param parent * @param style */ public ResourceGeneratorOption(Composite parent, int style) { super(parent, style); toolkit = new FormToolkit(Display.getCurrent()); addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { toolkit.dispose(); } }); createWidgets(); } /** * EAttribute shr5GeneratorResourceSpend = Literals.SHR5_GENERATOR__RESOURCE_SPEND; * The main contructor. * * @param parent * @param style * @param object * @param context * @param toolkit * @param editingDomain */ public ResourceGeneratorOption(Composite parent, int style, Resourcen object, ManagedCharacter context, FormToolkit toolkit, EditingDomain editingDomain, EStructuralFeature resourcesSpend) { super(parent, style); this.toolkit = toolkit; this.object = object; this.context = context; this.editingDomain = editingDomain; this.shr5GeneratorResourceSpend = resourcesSpend; createWidgets(); } private void createWidgets() { toolkit.adapt(this); toolkit.paintBordersFor(this); GridLayout gridLayout = new GridLayout(3, false); gridLayout.horizontalSpacing = 10; setLayout(gridLayout); toolkit.createLabel(this, Messages.GeneratorOption_resource_spend, SWT.NONE); lblspend = new Label(this, SWT.NONE); GridData gd_lblspend = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_lblspend.widthHint = minSize; lblspend.setLayoutData(gd_lblspend); toolkit.adapt(lblspend, true, true); lblspend.setText(Messages.GeneratorOption_spend_to_much); lblleft = new Label(this, SWT.NONE); GridData gd_lblleft = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_lblleft.widthHint = minSize; lblleft.setLayoutData(gd_lblleft); toolkit.adapt(lblleft, true, true); lblleft.setText(EMPTY); m_bindingContext = initDataBindings(); internalBinding(m_bindingContext); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // // // return bindingContext; } private void internalBinding(DataBindingContext bindingContext) { IObservableValue observeTextLblspendObserveWidget = WidgetProperties.text().observe(lblspend); IObservableValue objectAttibutePointsSpendObserveValue = EMFEditObservables.observeValue(editingDomain, context.getChracterSource(), shr5GeneratorResourceSpend); EMFUpdateValueStrategy modelToTarget = new EMFUpdateValueStrategy(); // modelToTarget.setAfterGetValidator(resourceInRangeValidator); // modelToTarget.setConverter(new Converter(Integer.class, String.class) { // @Override // public Object convert(Object fromObject) { // int calcAttributesSpend = object.calcResourceSpend(context); // return "spend :" + calcAttributesSpend + ""; // } // }); Binding bindValue = bindingContext.bindValue(observeTextLblspendObserveWidget, objectAttibutePointsSpendObserveValue, new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), modelToTarget); ControlDecorationSupport.create(bindValue, SWT.TOP | SWT.LEFT); // IObservableValue observeTextLblleftObserveWidget = WidgetProperties.text().observe(lblleft); IObservableValue objectAttibutePointsLeftObserveValue = EMFEditObservables.observeValue(editingDomain, context.getChracterSource(), shr5GeneratorResourceSpend); modelToTarget = new EMFUpdateValueStrategy(); modelToTarget.setConverter(new Converter(Integer.class, String.class) { @SuppressWarnings("unchecked") @Override public Object convert(Object fromObject) { CharacterGenerator<?> generator = context.getChracterSource(); if (generator instanceof Shr5Generator) { Shr5Generator sr5g = (Shr5Generator)generator; return ShadowrunManagmentTools.calcResourcesLeft(sr5g) + EMPTY; } else if (generator instanceof KarmaGenerator) { KarmaGenerator<Shr5System> kg = (KarmaGenerator<Shr5System>)generator; return ShadowrunManagmentTools.calcResourcesLeft(kg) + EMPTY; } return 0 + EMPTY; } }); bindingContext.bindValue(observeTextLblleftObserveWidget, objectAttibutePointsLeftObserveValue, new UpdateValueStrategy( UpdateValueStrategy.POLICY_NEVER), modelToTarget); } }