blob: ad61eca4e651dfb864b08496c879c8cd2a917dd5 [file] [log] [blame]
package org.eclipse.dltk.ui.templates;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.TextUtilities;
import org.eclipse.jface.text.contentassist.ICompletionProposalExtension4;
import org.eclipse.jface.text.templates.DocumentTemplateContext;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateBuffer;
import org.eclipse.jface.text.templates.TemplateContext;
import org.eclipse.jface.text.templates.TemplateException;
import org.eclipse.jface.text.templates.TemplateProposal;
import org.eclipse.swt.graphics.Image;
public class ScriptTemplateProposal extends TemplateProposal implements
ICompletionProposalExtension4 {
public ScriptTemplateProposal(Template template, TemplateContext context,
IRegion region, Image image, int relevance) {
super(template, context, region, image, relevance);
}
private boolean isRelevanceOverriden;
private int relevanceOverride;
/*
* @see org.eclipse.jface.text.templates.TemplateProposal#getRelevance()
*/
@Override
public int getRelevance() {
return isRelevanceOverriden ? relevanceOverride : super.getRelevance();
}
public void setRelevance(int value) {
this.relevanceOverride = value;
this.isRelevanceOverriden = true;
}
@Override
public String getAdditionalProposalInfo() {
TemplateContext context = getContext();
if (context instanceof ScriptTemplateContext) {
ScriptTemplateContext scriptContext = (ScriptTemplateContext) context;
try {
getContext().setReadOnly(true);
TemplateBuffer templateBuffer;
templateBuffer = scriptContext.evaluate(getTemplate());
// restore indenting
IDocument document = scriptContext.getDocument();
String indenting = ScriptTemplateContext.calculateIndent(
document, scriptContext.getStart());
String delimeter = TextUtilities
.getDefaultLineDelimiter(document);
String info = templateBuffer.getString();
return info.replaceAll(delimeter + indenting, delimeter);
} catch (BadLocationException e) {
} catch (TemplateException e1) {
}
}
return null;
}
public String getTemplateName() {
return getTemplate().getName();
}
public String getPattern() {
return getTemplate().getPattern();
}
public boolean isAutoInsertable() {
if (isSelectionTemplate())
return false;
return getTemplate().isAutoInsertable();
}
/**
* Returns <code>true</code> if the proposal has a selection, e.g. will wrap
* some code.
*
* @return <code>true</code> if the proposals completion length is non zero
*/
private boolean isSelectionTemplate() {
if (getContext() instanceof DocumentTemplateContext) {
DocumentTemplateContext ctx = (DocumentTemplateContext) getContext();
if (ctx.getCompletionLength() > 0)
return true;
}
return false;
}
@Override
public String toString() {
return getDisplayString();
}
}