package com.arm.cmsis.pack.ui.tree; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Text; /** * A cell editor that presents a spinner. The cell editor's * value is the selection of the spinner. The bounds of the spinner * are set by first getting the spinner and then applying its setter. */ public class SpinnerCellEditor extends CellEditor { private NumberSpinner spinner; private Text text; public SpinnerCellEditor(Composite parent) { super(parent); } @Override protected Control createControl(Composite parent) { spinner = new NumberSpinner(parent, SWT.NONE); text = spinner.getText(); text.addSelectionListener(new SelectionAdapter() { @Override public void widgetDefaultSelected(SelectionEvent e) { handleDefaultSelection(e); } }); return spinner; } @Override protected Object doGetValue() { if (spinner != null) { return spinner.getContent(); } return null; } @Override protected void doSetFocus() { spinner.setFocus(); } @Override protected void doSetValue(Object value) { if (value != null && spinner != null) { if (value instanceof Long) { spinner.setSelection((long) value); } } } @Override public void performCut() { text.cut(); } @Override public void performCopy() { text.copy(); } @Override public void performPaste() { text.paste(); } protected void handleDefaultSelection(SelectionEvent event) { // same with enter-key handling code in keyReleaseOccured(e); fireApplyEditorValue(); deactivate(); } /** * * @return the embedded spinner control */ public NumberSpinner getSpinner() { return spinner; } }