package org.zend.php.zendserver.deployment.ui.editors; import org.eclipse.jface.bindings.keys.KeyStroke; import org.eclipse.jface.bindings.keys.ParseException; import org.eclipse.jface.fieldassist.ContentProposalAdapter; import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.fieldassist.FieldDecoration; import org.eclipse.jface.fieldassist.FieldDecorationRegistry; import org.eclipse.jface.fieldassist.SimpleContentProposalProvider; import org.eclipse.jface.fieldassist.TextContentAdapter; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.IMessageManager; import org.eclipse.ui.forms.widgets.FormToolkit; import org.zend.php.zendserver.deployment.core.descriptor.IModelObject; import org.zend.php.zendserver.deployment.core.internal.descriptor.Feature; import org.zend.php.zendserver.deployment.ui.Messages; public class TextAssistField extends TextField { private final String[] proposals; private KeyStroke instance = null; public TextAssistField(IModelObject target, Feature key, String label, String[] proposals, IMessageManager mmng) { super(target, key, label, SWT.SINGLE, false, mmng); this.proposals = proposals; } @Override protected void createTextControl(Composite parent, FormToolkit toolkit) { super.createTextControl(parent, toolkit); SimpleContentProposalProvider proposalProvider = new SimpleContentProposalProvider( proposals); proposalProvider.setFiltering(true); ContentProposalAdapter adapter; try { instance = KeyStroke.getInstance("Ctrl+Space"); //$NON-NLS-1$ } catch (ParseException e) { } adapter = new ContentProposalAdapter(text, new TextContentAdapter(), proposalProvider, instance, null); adapter.setPropagateKeys(true); adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE); // add content assist decoration final ControlDecoration decoration = new ControlDecoration(text, SWT.LEFT | SWT.TOP); FieldDecoration img = FieldDecorationRegistry.getDefault() .getFieldDecoration( FieldDecorationRegistry.DEC_CONTENT_PROPOSAL); decoration.setImage(img.getImage()); final String desc = NLS.bind(Messages.TextHintField_0, instance.format()) ; decoration .setDescriptionText(desc); decoration.show(); text.addFocusListener(new FocusListener() { public void focusLost(FocusEvent e) { } public void focusGained(FocusEvent e) { decoration.showHoverText(desc); } }); } }