1 package org.simantics.scl.ui.editor2;
\r
3 import java.io.IOException;
\r
5 import org.eclipse.core.runtime.CoreException;
\r
6 import org.eclipse.core.runtime.IProgressMonitor;
\r
7 import org.eclipse.core.runtime.Status;
\r
8 import org.eclipse.jface.operation.IRunnableContext;
\r
9 import org.eclipse.jface.text.Document;
\r
10 import org.eclipse.jface.text.IDocument;
\r
11 import org.eclipse.jface.text.IDocumentPartitioner;
\r
12 import org.eclipse.jface.text.rules.FastPartitioner;
\r
13 import org.eclipse.jface.text.source.AnnotationModel;
\r
14 import org.eclipse.jface.text.source.IAnnotationModel;
\r
15 import org.eclipse.ui.texteditor.AbstractDocumentProvider;
\r
16 import org.simantics.scl.compiler.source.ModuleSource;
\r
17 import org.simantics.scl.compiler.source.TextualModuleSource;
\r
18 import org.simantics.scl.osgi.SCLOsgi;
\r
19 import org.simantics.scl.ui.editor.SCLSourceViewerConfigurationNew;
\r
21 public class SCLModuleEditor2DocumentProvider extends AbstractDocumentProvider {
\r
23 private SCLSourceViewerConfigurationNew sourceViewer;
\r
24 protected AnnotationModel annotationModel = new AnnotationModel();
\r
26 public SCLModuleEditor2DocumentProvider(
\r
27 SCLSourceViewerConfigurationNew sourceViewer) {
\r
28 this.sourceViewer = sourceViewer;
\r
31 private static TextualModuleSource toTextualModuleSource(Object input) {
\r
32 if(!(input instanceof SCLModuleEditorInput))
\r
34 ModuleSource source = ((SCLModuleEditorInput)input).getAdapter(ModuleSource.class);
\r
37 if(!(source instanceof TextualModuleSource))
\r
39 return (TextualModuleSource)source;
\r
43 protected IDocument createDocument(Object element) throws CoreException {
\r
44 TextualModuleSource source = toTextualModuleSource(element);
\r
46 throw new CoreException(
\r
47 new Status(Status.ERROR, "org.simantics.scl.ui", "Source for the SCL module could not be found.")
\r
51 document = new Document(source.getSourceText(null));
\r
52 } catch (IOException e) {
\r
53 throw new CoreException(
\r
54 new Status(Status.ERROR, "org.simantics.scl.ui", "Reading SCL module failed.", e)
\r
57 IDocumentPartitioner partitioner = new FastPartitioner(new SCLPartitionScanner(), SCLPartitionScanner.PARTITION_TYPES);
\r
58 partitioner.connect(document);
\r
59 document.setDocumentPartitioner(partitioner);
\r
60 sourceViewer.updateCompletionAssistModuleName(source.getModuleName());
\r
65 public boolean isModifiable(Object element) {
\r
66 TextualModuleSource source = toTextualModuleSource(element);
\r
69 return source.isUpdateable();
\r
73 public boolean isReadOnly(Object element) {
\r
74 return !isModifiable(element);
\r
78 protected IAnnotationModel createAnnotationModel(Object element)
\r
79 throws CoreException {
\r
80 SCLModuleEditorInput input = (SCLModuleEditorInput)element;
\r
81 return new SCLAnnotationModel(input, SCLOsgi.MODULE_REPOSITORY);
\r
85 protected void doSaveDocument(IProgressMonitor monitor, Object element,
\r
86 IDocument document, boolean overwrite) throws CoreException {
\r
87 TextualModuleSource source = toTextualModuleSource(element);
\r
90 source.update(document.get());
\r
94 protected IRunnableContext getOperationRunner(IProgressMonitor monitor) {
\r
95 // TODO Auto-generated method stub
\r