/***************************************************************************** * Copyright (c) 2010 CEA LIST. * * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * CEA LIST - Initial API and implementation * *****************************************************************************/ package org.eclipse.xtext.gmf.glue.contentassist; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.contentassist.CompletionProposal; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.text.contentassist.ICompletionProposalExtension; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext; /** * @author CEA LIST - Initial contribution and API */ public class CustomCompletionProposal implements ICompletionProposal, ICompletionProposalExtension { private CompletionProposal completionProposal ; private int fReplacementOffset ; private ContentAssistContext fContentAssistContext ; private String fReplacementString ; /** * @param replacementString * @param replacementOffset * @param replacementLength * @param cursorPosition * @param image * @param displayString * @param contextInformation * @param additionalProposalInfo * @param contentAssistContext * */ public CustomCompletionProposal (String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, ContentAssistContext contentAssistContext) { completionProposal = new CompletionProposal(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo) ; fReplacementOffset = replacementOffset ; fReplacementString = replacementString ; fContentAssistContext = contentAssistContext ; } public void apply(IDocument document, char trigger, int offset) { try { int length = 0 ; if (offset != fReplacementOffset) length = offset - fReplacementOffset ; else length = fContentAssistContext.getSelectedText().length() ; document.replace(fReplacementOffset , length, fReplacementString) ; } catch (BadLocationException e) { // ignore } } public boolean isValidFor(IDocument document, int offset) { try { int length = offset - fReplacementOffset ; return completionProposal.getDisplayString().toLowerCase().contains(document.get(fReplacementOffset, length).toLowerCase()) ; } catch (BadLocationException e) { // ignore } return false; } public char[] getTriggerCharacters() { // TODO Auto-generated method stub return null; } public int getContextInformationPosition() { // TODO Auto-generated method stub return 0; } public void apply(IDocument document) { // TODO Auto-generated method stub } public Point getSelection(IDocument document) { return completionProposal.getSelection(document); } public String getAdditionalProposalInfo() { return completionProposal.getAdditionalProposalInfo(); } public String getDisplayString() { return completionProposal.getDisplayString(); } public Image getImage() { return completionProposal.getImage(); } public IContextInformation getContextInformation() { return completionProposal.getContextInformation(); } }