package eclipseutils.jface.databinding.customizers; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Text; import eclipseutils.jface.databinding.FieldOptions; import eclipseutils.jface.databinding.FieldOptions.ControlCustomizer; /** * Selects all text in a text control when it gains focus. * * @author <a href="mailto:phil.kursawe@gmail.com">Philipp Kursawe</a> * */ public class SelectAllOnFocus implements ControlCustomizer { private final boolean always; /** * @param always * select all text or only on first time the focus is gained. */ public SelectAllOnFocus(final boolean always) { this.always = always; } /** * Creates a customizer that always selects the text when the control * receives the focus. */ public SelectAllOnFocus() { this(true); } public void customizeControl(final Control control, IObservableValue observableValue, FieldOptions options) { if (control instanceof Text) { final Text text = (Text) control; control.addFocusListener(new FocusAdapter() { @Override public void focusGained(final FocusEvent e) { if (!text.isDisposed()) { (text).selectAll(); } if (!always) { control.removeFocusListener(this); } } }); } } }