// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package com.amalto.workbench.proposal;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.bindings.keys.ParseException;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
import org.eclipse.jface.fieldassist.IControlContentAdapter;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.custom.VerifyKeyListener;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;
import org.talend.commons.ui.swt.proposal.ContentProposalAdapterExtended;
/**
* Utilities for proposals. <br/>
*
* $Id: ProposalUtils.java 7038 2007-11-15 14:05:48Z plegall $
*
*/
public final class ProposalUtils {
/**
* Constructs a new ProposalUtils.
*/
private ProposalUtils() {
}
public static ContentProposalAdapterExtended getCommonProposal(Control control, IContentProposalProvider proposalProvider,char[] autoActivationCharacters) {
IControlContentAdapter controlContentAdapter = null;
if (control instanceof Text) {
controlContentAdapter = new TextContentAdapterExtended();
} else if (control instanceof StyledText) {
controlContentAdapter = new StyledTextContentAdapterExtended();
} else {
throw new IllegalArgumentException("Invalid argument :" + control.getClass()); //$NON-NLS-1$
}
final ContentProposalAdapterExtended contentProposalAdapter = getContentProposalAdapter(control, controlContentAdapter,
proposalProvider,autoActivationCharacters);
// to don't write Carriage Return when accept a proposal
if (control instanceof StyledText) {
final VerifyKeyListener verifyKeyListener = new VerifyKeyListener() {
public void verifyKey(VerifyEvent verifyEvent) {
if (verifyEvent.character == '\r' && contentProposalAdapter.isProposalOpened()) {
verifyEvent.doit = false;
} else {
verifyEvent.doit = true;
}
}
};
((StyledText) control).addVerifyKeyListener(verifyKeyListener);
}
return contentProposalAdapter;
}
private static ContentProposalAdapterExtended getContentProposalAdapter(Control control,
IControlContentAdapter controlContentAdapter, IContentProposalProvider proposalProvider,char[] autoActivationCharacters) {
ContentProposalAdapterExtended contentProposalAdapter = null;
try {
KeyStroke keyStroke = KeyStroke.getInstance("Ctrl+Space"); //$NON-NLS-1$
contentProposalAdapter = new ContentProposalAdapterExtended(control, controlContentAdapter, proposalProvider,
keyStroke, autoActivationCharacters);
contentProposalAdapter.setPropagateKeys(true);
contentProposalAdapter.setFilterStyle(ContentProposalAdapterExtended.FILTER_CUMULATIVE_ALL_START_WORDS);
contentProposalAdapter.setProposalAcceptanceStyle(ContentProposalAdapterExtended.PROPOSAL_INSERT);
} catch (ParseException pe) {
throw new RuntimeException(pe);
}
return contentProposalAdapter;
}
public static ContentProposalAdapterExtended getCommonProposal(Control control) {
return getCommonProposal(control, null,null);
}
}