package org.eclipse.ufacekit.ui.swing.databinding.internal.swing.properties; import javax.swing.JComboBox; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.JTextComponent; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.ufacekit.ui.swing.databinding.internal.swing.EventType; import org.eclipse.ufacekit.ui.swing.databinding.internal.swing.IDelegateRegistration; import org.eclipse.ufacekit.ui.swing.databinding.internal.swing.properties.WidgetValueProperty.WidgetListener.Delegate; import org.eclipse.ufacekit.ui.swing.databinding.swing.SwingProperties; import org.eclipse.ufacekit.ui.swing.databinding.swing.SwingProperties.TextType; public class JComboBoxTextProperty extends WidgetValueProperty<EventType, JComboBox> { public enum Type implements EventType { Modify; public boolean isNone() { return false; } } public Object getValueType() { return String.class; } @Override protected IDelegateRegistration registerDelegate(final EventType type, final JComboBox widget, final Delegate delegate) { if( widget.isEditable() && widget.getEditor() instanceof JTextComponent ) { final DocumentListener listener = new DocumentListener() { public void insertUpdate(DocumentEvent e) { delegate.handle(type, widget); } public void removeUpdate(DocumentEvent e) { delegate.handle(type, widget); } public void changedUpdate(DocumentEvent e) { // TODO Auto-generated method stub } }; ((JTextComponent)widget.getEditor()).getDocument().addDocumentListener(listener); return new IDelegateRegistration() { public void dispose() { ((JTextComponent)widget.getEditor()).getDocument().removeDocumentListener(listener); } }; } return null; } @Override protected Object doGetValue(Object source) { JComboBox box = (JComboBox) source; if( box.isEditable() && box.getEditor() instanceof JTextComponent ) { return ((JTextComponent)box.getEditor()).getText(); } return null; } @Override protected void doSetValue(Object source, Object value) { JComboBox box = (JComboBox) source; if( box.isEditable() && box.getEditor() instanceof JTextComponent ) { ((JTextComponent)box.getEditor()).setText( value == null ? "" : value.toString()); //$NON-NLS-1$ } } }