/** * This file is protected by Copyright. * Please refer to the COPYRIGHT file distributed with this source distribution. * * This file is part of REDHAWK IDE. * * 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. * */ package gov.redhawk.sca.waveform.controlpanel.propertyEditors; import gov.redhawk.model.sca.ScaAbstractProperty; import gov.redhawk.model.sca.ScaPackage; import gov.redhawk.model.sca.ScaSimpleProperty; import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.emf.databinding.EMFDataBindingContext; import org.eclipse.emf.databinding.EMFObservables; import org.eclipse.jface.databinding.swt.ISWTObservableValue; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; public class BooleanPropertyEditor extends PropertyEditor { private final boolean value; private final String name; private final ScaAbstractProperty< ? > prop; private Button t; private Button f; private Group radioGroup; private EMFDataBindingContext context; private class BooleanUpdateStrategy extends UpdateValueStrategy { @Override public Object convert(final Object value) { final Boolean selected = (Boolean) value; BooleanPropertyEditor.this.f.setSelection(!selected); return super.convert(value); } } BooleanPropertyEditor(final String name, final Boolean value, final ScaAbstractProperty< ? > prop) { this.value = value; this.name = name; this.prop = prop; } @Override public void renderNameValuePair(final Composite parent) { final Label label = new Label(parent, SWT.NONE); label.setText(this.name); this.radioGroup = new Group(parent, SWT.NONE); this.radioGroup.setLayout(new FillLayout()); this.t = new Button(this.radioGroup, SWT.RADIO); this.t.setText("True"); this.t.addSelectionListener(new SelectionAdapter() { @Override public void widgetDefaultSelected(final SelectionEvent e) { BooleanPropertyEditor.this.f.setSelection(!BooleanPropertyEditor.this.t.getSelection()); } }); this.f = new Button(this.radioGroup, SWT.RADIO); this.f.setText("False"); if (this.value) { this.t.setSelection(true); } else { this.f.setSelection(true); } GridDataFactory.fillDefaults().grab(false, false).applyTo(label); GridDataFactory.fillDefaults().grab(true, false).applyTo(this.radioGroup); } @Override public void setupBindings() { this.context = new EMFDataBindingContext(); final ScaSimplePropertyControl scaSimplePropertyControl = new ScaSimplePropertyControl(this.radioGroup, (ScaSimpleProperty) this.prop); final ISWTObservableValue trueObservable = WidgetProperties.selection().observe(this.t); this.context.bindValue(trueObservable, scaSimplePropertyControl.getModel()); this.context.bindValue(WidgetProperties.selection().observe(this.t), scaSimplePropertyControl.getEditingObserable()); this.context.bindValue(scaSimplePropertyControl.getTarget(), EMFObservables.observeValue(this.prop, ScaPackage.Literals.SCA_SIMPLE_PROPERTY__VALUE), null, new BooleanUpdateStrategy()); } @Override public void dispose() { this.context.dispose(); } }