package net.enilink.komma.common.ui.assist;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalListener;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
import org.eclipse.jface.fieldassist.IControlContentAdapter;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Control;
public class ContentProposals {
public static IContentProposalProvider NULL_PROPOSAL_PROVIDER = new IContentProposalProvider() {
public IContentProposal[] getProposals(String contents, int position) {
return new IContentProposal[0];
}
};
public static ContentProposalAdapter enableContentProposal(
final Control control,
IContentProposalProvider contentProposalProvider,
char[] autoActivationCharacters) {
KeyStroke triggerKeyStroke = KeyStroke.getInstance(SWT.CTRL, ' ');
final IControlContentAdapter controlContentAdapter = new TextContentAdapter();
final ContentProposalAdapter proposalAdapter = new ContentProposalAdapter(
control, controlContentAdapter, contentProposalProvider,
triggerKeyStroke, autoActivationCharacters);
proposalAdapter
.addContentProposalListener(new IContentProposalListener() {
public void proposalAccepted(IContentProposal proposal) {
if (proposal instanceof IContentProposalExt
&& ((IContentProposalExt) proposal).getType() == IContentProposalExt.Type.REPLACE) {
controlContentAdapter.setControlContents(control,
proposal.getContent(),
proposal.getCursorPosition());
return;
}
if (proposalAdapter.getProposalAcceptanceStyle() == ContentProposalAdapter.PROPOSAL_IGNORE) {
// default is insert
controlContentAdapter.insertControlContents(
control, proposal.getContent(),
proposal.getCursorPosition());
}
}
});
return proposalAdapter;
}
}