Я пишу Eclipse Plugin, и для этого мне нужен пользовательский TextEditor.
Предполагается, что содержимое TextEditor представляет собой текст, извлеченный из пользовательской структуры XML. У меня есть все извлеченные данные, но сейчас я борюсь с задачей предоставления текста в мой TextEditor.
Я могу установить текст для отображения, и все работает, проблема в том, что я не могу его отредактировать.
Мой код редактора пока:
FooEditor:
package fooeditor.editor;
import org.eclipse.ui.texteditor.AbstractTextEditor;
public class FooEditor extends AbstractTextEditor {
public FooEditor() {
super();
setSourceViewerConfiguration(new FooSourceViewerConfiguration());
setDocumentProvider(new FooDocumentProvider());
}
}
FooSourceViewerConfiguration:
пакет fooeditor.editor;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
public class FooSourceViewerConfiguration extends SourceViewerConfiguration {
public FooSourceViewerConfiguration() {
}
}
FooDocumentProvider:
пакет fooeditor.editor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jface.text.rules.DefaultPartitioner;
import org.eclipse.jface.text.rules.FastPartitioner;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.AbstractDocumentProvider;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.IElementStateListener;
public class FooDocumentProvider extends AbstractDocumentProvider {
IDocumentPartitioner partitioner;
/**
*
*/
public FooDocumentProvider() {
super();
partitioner = new FastPartitioner(new FooPartitionScanner(), null);
}
@Override
protected IDocument createDocument(Object element) throws CoreException {
if (element instanceof FileEditorInput) {
IDocument document = new Document();
document.set("hi");
document.setDocumentPartitioner(partitioner);
return document;
} else {
throw new CoreException(null);
}
}
@Override
protected IAnnotationModel createAnnotationModel(Object element) throws CoreException {
// TODO Auto-generated method stub
return null;
}
@Override
protected void doSaveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite)
throws CoreException {
// TODO Auto-generated method stub
}
@Override
protected IRunnableContext getOperationRunner(IProgressMonitor monitor) {
// TODO Auto-generated method stub
return null;
}
}
FooPartitionScanner:
пакет fooeditor.editor;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.rules.EndOfLineRule;
import org.eclipse.jface.text.rules.IPartitionTokenScanner;
import org.eclipse.jface.text.rules.IPredicateRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.RuleBasedPartitionScanner;
import org.eclipse.jface.text.rules.Token;
public class FooPartitionScanner extends RuleBasedPartitionScanner implements IPartitionTokenScanner {
public FooPartitionScanner() {
super();
List rules = new ArrayList();
IPredicateRule[] result = new IPredicateRule[rules.size()];
rules.toArray(result);
setPredicateRules(result);
}
}