/** * */ package org.goko.common.preferences.fieldeditor.ui; import org.eclipse.core.databinding.Binding; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.core.databinding.beans.BeanProperties; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.goko.common.bindings.AbstractModelObject; import org.goko.core.common.exception.GkException; /** * @author Psyko * @date 18 oct. 2016 */ public class UiBooleanFieldEditor extends UiFieldEditor<Button> { /** * @param parent * @param style */ public UiBooleanFieldEditor(Composite parent, int style) { super(parent, style); createControls(parent, style); } @Override protected void createControls(Composite parent, int style) { super.createControls(parent, style); control = new Button(this, SWT.CHECK | style); control.setText(getLabel()); control.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); control.addSelectionListener(new SelectionAdapter() { /** (inheritDoc) * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); UiBooleanFieldEditor.this.fireStateChanged(getPropertyName(), !getControl().getSelection(), getControl().getSelection()); } }); control.pack(); this.pack(); } /** (inheritDoc) * @see org.eclipse.core.databinding.validation.IValidator#validate(java.lang.Object) */ @Override public IStatus validate(Object value) { return null; } /** (inheritDoc) * @see org.goko.common.preferences.fieldeditor.ui.UiFieldEditor#getFieldEditorBinding(org.eclipse.core.databinding.DataBindingContext, org.goko.common.bindings.AbstractModelObject) */ @Override protected Binding getFieldEditorBinding(DataBindingContext bindingContext, AbstractModelObject modelObject) throws GkException { IObservableValue observeSelectionBtnCheckButtonObserveWidget = WidgetProperties.selection().observe(getControl()); IObservableValue enabledBindingsObserveValue = BeanProperties.value(getPropertyName()).observe(modelObject); UpdateValueStrategy targetToModelStrategy = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE); UpdateValueStrategy modelToTargetStrategy = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE); return bindingContext.bindValue(observeSelectionBtnCheckButtonObserveWidget, enabledBindingsObserveValue, targetToModelStrategy, modelToTargetStrategy); } /** (inheritDoc) * @see org.goko.common.preferences.fieldeditor.ui.UiFieldEditor#setLabel(java.lang.String) */ @Override public void setLabel(String label) { super.setLabel(label); getControl().setText(label); } }