blob: 3eb5b40321d78a0abf5af2fa97b55224de1fb244 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2016 IBM Corporation and others.
* 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
*
*******************************************************************************/
package org.eclipse.dltk.tcl.internal.console.ui;
import java.io.IOException;
import java.util.List;
import org.eclipse.dltk.console.IScriptConsoleShell;
import org.eclipse.dltk.console.ScriptConsoleCompletionProposal;
import org.eclipse.dltk.console.ui.IScriptConsoleViewer;
import org.eclipse.dltk.console.ui.ScriptConsoleCompletionProcessor;
import org.eclipse.dltk.ui.DLTKPluginImages;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.TextPresentation;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationPresenter;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
import org.eclipse.swt.graphics.Image;
public class TclConsoleCompletionProcessor extends
ScriptConsoleCompletionProcessor {
protected static class Validator implements IContextInformationValidator,
IContextInformationPresenter {
protected int installOffset;
public boolean isContextInformationValid(int offset) {
return Math.abs(installOffset - offset) < 5;
}
public void install(IContextInformation info, ITextViewer viewer,
int offset) {
installOffset = offset;
}
public boolean updatePresentation(int documentPosition,
TextPresentation presentation) {
return false;
}
}
protected IProposalDecorator tclDecorator = new IProposalDecorator() {
public String formatProposal(ScriptConsoleCompletionProposal c) {
return c.getDisplay();
}
public Image getImage(ScriptConsoleCompletionProposal c) {
String type = c.getType();
if (type.equals("var")){
return DLTKPluginImages
.get(DLTKPluginImages.IMG_OBJS_LOCAL_VARIABLE);
} else if (type.equals("proc")){
return DLTKPluginImages.get(DLTKPluginImages.IMG_METHOD_PUBLIC);
} else if (type.equals("command")){
return DLTKPluginImages.get(DLTKPluginImages.IMG_METHOD_PRIVATE);
} else if (type.equals("func")){
return DLTKPluginImages.get(DLTKPluginImages.IMG_OBJS_FIELD);
}
return null;
}
};
private IContextInformationValidator validator;
public TclConsoleCompletionProcessor(
IScriptConsoleShell interpreterShell) {
super(interpreterShell);
}
@Override
public char[] getCompletionProposalAutoActivationCharacters() {
return new char[] { '$' };
}
@Override
protected ICompletionProposal[] computeCompletionProposalsImpl(
IScriptConsoleViewer viewer, int offset) {
try {
String commandLine = viewer.getCommandLine();
int cursorPosition = offset - viewer.getCommandLineOffset();
List list = getInterpreterShell().getCompletions(commandLine,
cursorPosition);
List proposals = createProposalsFromString(list, offset, tclDecorator);
return (ICompletionProposal[]) proposals
.toArray(new ICompletionProposal[proposals.size()]);
} catch (IOException e) {
e.printStackTrace();
}
return new ICompletionProposal[] {};
}
@Override
protected IContextInformation[] computeContextInformationImpl(
ITextViewer viewer, int offset) {
return null;
}
public IContextInformationValidator getContextInformationValidator() {
if (validator == null) {
validator = new Validator();
}
return validator;
}
}