/***************************************************************************** * 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.jface.databinding.swt.WidgetProperties; import org.eclipse.papyrus.infra.tools.databinding.AggregatedObservable; import org.eclipse.papyrus.infra.widgets.databinding.GrayedCheckboxObservableValue; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; /** * A Property Editor representing a Boolean value * as a Checkbox. * * @author Camille Letavernier */ public class BooleanCheckbox extends AbstractValueEditor { private final Button checkbox; private AggregatedObservable aggregated; /** * * Constructor. Creates a new Property Editor for a Boolean * value, represented as a Checkbox. * * @param parent * This editor's parent composite * @param style * The style applied to this editor's checkbox */ public BooleanCheckbox(Composite parent, int style) { this(parent, style, null); } /** * * Constructor. Creates a new Property Editor for a Boolean * value, represented as a Checkbox, with the given label * * @param parent * This editor's parent composite * @param style * The style applied to this editor's checkbox * @param label * The label for this editor */ public BooleanCheckbox(Composite parent, int style, String label) { super(parent); checkbox = factory.createButton(this, label, SWT.CHECK | style); IObservableValue widgetObservable = WidgetProperties.selection().observe(checkbox); setWidgetObservable(widgetObservable, true); } @Override public void setModelObservable(IObservableValue modelProperty) { IObservableValue newWidgetObservable; if(this.widgetObservable != null) { this.widgetObservable.dispose(); } if(modelProperty instanceof AggregatedObservable) { this.aggregated = (AggregatedObservable)modelProperty; newWidgetObservable = new GrayedCheckboxObservableValue(checkbox, aggregated); } else { newWidgetObservable = WidgetProperties.selection().observe(checkbox); } setWidgetObservable(newWidgetObservable, true); super.setModelObservable(modelProperty); } /** * {@inheritDoc} */ @Override public Object getEditableType() { return Boolean.class; } /** * {@inheritDoc} */ @Override public Boolean getValue() { return checkbox.getSelection(); } @Override public void setReadOnly(boolean readOnly) { checkbox.setEnabled(!readOnly); } @Override public boolean isReadOnly() { return !checkbox.isEnabled(); } @Override public void setToolTipText(String text) { checkbox.setToolTipText(text); super.setLabelToolTipText(text); } @Override public void setLabel(String label) { checkbox.setText(label); } /** * Sets this widget's value * * @param selected * Whether the checkbox should be selected or not */ public void setValue(Boolean selected) { if(modelProperty != null) { modelProperty.setValue(selected); } widgetObservable.setValue(selected); } }