/***************************************************************************** * Copyright (c) 2010 CEA LIST. * * 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 * * Contributors: * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation *****************************************************************************/ package org.eclipse.papyrus.infra.widgets.editors; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.SelectObservableValue; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; /** * A Property Editor representing a Boolean value * as a Radio, with two options (true/false). * * @author Camille Letavernier * */ public class BooleanRadio extends AbstractValueEditor { /** * The "true" radio button */ protected Button trueRadio; /** * The "false" radio button */ protected Button falseRadio; /** * * Constructor. Creates a new Property Editor for a Boolean * value, represented by two radio buttons. * * @param parent * This editor's parent composite * @param style * The style applied to this editor's radio buttons */ public BooleanRadio(Composite parent, int style) { this(parent, style, null); } /** * * Constructor. Creates a new Property Editor for a Boolean * value, represented by two radio buttons. * * @param parent * This editor's parent composite * @param style * The style applied to this editor's radio buttons * @param label * The label for this editor */ public BooleanRadio(Composite parent, int style, String label) { super(parent, label); ((GridLayout)getLayout()).numColumns = 3; trueRadio = factory.createButton(this, "true", style | SWT.RADIO); //$NON-NLS-1$ trueRadio.setBackground(this.getBackground()); //For Radio buttons, we need to force the color falseRadio = factory.createButton(this, "false", style | SWT.RADIO); //$NON-NLS-1$ falseRadio.setBackground(this.getBackground()); //For Radio buttons, we need to force the color setWidgetObservable(getObservable(), true); } /** * Defines a single observable value, encapsulating the ones * from each radio button (true / false) * * @return The encapsulating observable value */ private IObservableValue getObservable() { IObservableValue trueObservable = WidgetProperties.selection().observe(trueRadio); IObservableValue falseObservable = WidgetProperties.selection().observe(falseRadio); SelectObservableValue observable = new SelectObservableValue(); observable.addOption(true, trueObservable); observable.addOption(false, falseObservable); return observable; } /** * {@inheritDoc} */ @Override public Object getEditableType() { return Boolean.class; } /** * {@inheritDoc} */ @Override public Boolean getValue() { return trueRadio.getSelection(); } @Override public void setReadOnly(boolean readOnly) { trueRadio.setEnabled(!readOnly); falseRadio.setEnabled(!readOnly); } @Override public boolean isReadOnly() { return !trueRadio.isEnabled() || !falseRadio.isEnabled(); } @Override public void setToolTipText(String text) { trueRadio.setToolTipText(text); falseRadio.setToolTipText(text); super.setLabelToolTipText(text); } }