/*****************************************************************************
* Copyright (c) 2011 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.conversion.IConverter;
import org.eclipse.core.databinding.conversion.StringToNumberConverter;
import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Spinner;
/**
* A widget for editing Integer values with a SWT Spinner
*
* @author Camille Letavernier
*
* @see Spinner
*/
public class IntegerSpinner extends AbstractValueEditor {
/**
* The SWT Spinner
*/
protected Spinner spinner;
/**
* The String to Integer converter
*/
protected IConverter targetToModelConverter;
/**
* Constructor.
*
* @param parent
* The Composite in which the editor will be created
* @param style
* The SWT style to apply
*/
public IntegerSpinner(Composite parent, int style) {
super(parent, style);
spinner = createSpinner();
setWidgetObservable(new AbstractObservableValue() {
public Object getValueType() {
return Integer.class;
}
@Override
protected Integer doGetValue() {
return (Integer)targetToModelConverter.convert(spinner.getText());
}
@Override
protected void doSetValue(Object value) {
spinner.setSelection((Integer)value);
}
});
targetToModelConverter = StringToNumberConverter.toInteger(false);
}
/**
* Creates the Spinner
*
* @return the Spinner
*/
protected Spinner createSpinner() {
return new Spinner(this, factory.getBorderStyle());
}
@Override
public void doBinding() {
spinner.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) {
//Nothing
}
public void focusLost(FocusEvent e) {
binding.updateTargetToModel();
}
});
super.doBinding();
}
@Override
public Object getValue() {
String value = spinner.getText();
return targetToModelConverter.convert(value);
}
@Override
public Object getEditableType() {
return Integer.class;
}
@Override
public void setReadOnly(boolean readOnly) {
spinner.setEnabled(!readOnly);
}
@Override
public boolean isReadOnly() {
return !spinner.isEnabled();
}
@Override
public void setToolTipText(String text) {
spinner.setToolTipText(text);
super.setLabelToolTipText(text);
}
/**
* Sets the minimum value for the spinner
*
* @param minimum
* @see Spinner#setMinimum(int)
*/
public void setMinimum(int minimum) {
spinner.setMinimum(minimum);
}
/**
* Sets the maximum value for the spinner
*
* @param maximum
* @see Spinner#setMaximum(int)
*/
public void setMaximum(int maximum) {
spinner.setMaximum(maximum);
}
/**
* Sets the increment value for the spinner
*
* @param increment
* @see Spinner#setIncrement(int)
*/
public void setIncrement(int increment) {
spinner.setIncrement(increment);
}
}