Contenu connexe
Similaire à Lightweight Xtext Editors as SWT Widgets (20)
Lightweight Xtext Editors as SWT Widgets
- 10. Xtext Editor as WorkbenchPart
SWT Widget
syntax highlighting
live validation
content assistquick fix
quick assist
formatting
auto edit
- 16. as part of hover windows
read-only!
RCP Dialog Properties Hover Inline More
- 18. • Eclipse Forms
• Spread Sheet Formulas
• Data Queries
• Multi Page Editors
• Conditional Breakpoint Editor
RCP Dialog Properties Hover More
- 27. org.eclipse.xtext.ui.editor.embedded
getViewer()
getDocument()
createPartialEditor(
String prefix,
String editablePart,
String postfix
) : EmbeddedEditorModelAccess
EmbeddedEditor
newEditor(IEditedResourceProvider) : Builder
EmbeddedEditorFactory
getEditablePart():String
updateModel(
String prefix,
String editablePart,
String suffix
)
EmbeddedEditorModelAccess
readOnly()
showErrorAndWarningAnnotations()
withResourceValidator(IResourceValidator)
withParent(Composite parent): EmbeddedEditor
Builder
<< creates >>
<< creates >>
<< creates >>
4. initialize document
3. create editor on SWT Composite
2. configuration
1. construct a new editor builder
create editor in 4 steps
- 28. org.eclipse.xtext.ui.editor.embedded
getViewer()
getDocument()
createPartialEditor(
String prefix,
String editablePart,
String postfix
) : EmbeddedEditorModelAccess
EmbeddedEditor
newEditor(IEditedResourceProvider) : Builder
EmbeddedEditorFactory
getEditablePart():String
updateModel(
String prefix,
String editablePart,
String suffix
)
EmbeddedEditorModelAccess
readOnly()
showErrorAndWarningAnnotations()
withResourceValidator(IResourceValidator)
withParent(Composite parent): EmbeddedEditor
Builder
<< creates >>
<< creates >>
<< creates >>
4. initialize document
3. create editor on SWT Composite
2. configuration
1. construct a new editor builder
get text,
set text
create editor in 4 steps
- 30. editor knows
viewer and document
org.eclipse.xtext.ui.editor.embedded
org.eclipse.xtext.ui.editor
getViewer()
getDocument()
createPartialEditor(
String prefix,
String editablePart,
String postfix
) : EmbeddedEditorModelAccess
EmbeddedEditor
newEditor(IEditedResourceProvider) : Builder
EmbeddedEditorFactory
getEditablePart():String
updateModel(
String prefix,
String editablePart,
String suffix
)
EmbeddedEditorModelAccess
XtextSourceViewer
XtextDocument
readOnly()
showErrorAndWarningAnnotations()
withResourceValidator(IResourceValidator)
withParent(Composite parent): EmbeddedEditor
Builder
<< creates >>
<< creates >>
<< creates >>
- 36. In the Eclipse RCP Mail Example,
change the text editor to be an Xtext editor
- 38. public class View extends ViewPart {
!
public void createPartControl(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);
!
// ...
!
}
!
// ...
}
View.java
- 39. public class View extends ViewPart {
!
public void createPartControl(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);
!
// ...
!
ArithmeticsActivator activator = ArithmeticsActivator.getInstance();
Injector injector = activator.getInjector(ORG_ECLIPSE_XTEXT_EXAMPLE_ARITHMETICS_ARITHMETICS);
!
!
!
!
}
!
// ...
}
View.java
obtain injector
- 40. public class View extends ViewPart {
!
public void createPartControl(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);
!
// ...
!
ArithmeticsActivator activator = ArithmeticsActivator.getInstance();
Injector injector = activator.getInjector(ORG_ECLIPSE_XTEXT_EXAMPLE_ARITHMETICS_ARITHMETICS);
MailResourceProvider provider = injector.getInstance(MailResourceProvider.class);
EmbeddedEditorFactory factory = injector.getInstance(EmbeddedEditorFactory.class);
!
!
}
!
// ...
}
View.java
get services from injector
- 41. public class View extends ViewPart {
!
public void createPartControl(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);
!
// ...
!
ArithmeticsActivator activator = ArithmeticsActivator.getInstance();
Injector injector = activator.getInjector(ORG_ECLIPSE_XTEXT_EXAMPLE_ARITHMETICS_ARITHMETICS);
MailResourceProvider provider = injector.getInstance(MailResourceProvider.class);
EmbeddedEditorFactory factory = injector.getInstance(EmbeddedEditorFactory.class);
EmbeddedEditor editor = factory.newEditor(provider).withParent(top);
EmbeddedEditorModelAccess model = editor.createPartialEditor("", "module HelloWorld", "", false);
}
!
// ...
}
View.java 1. create builder
2. (skipped) configure
3. create editor
4. init document
- 42. public class MailResourceProvider implements IEditedResourceProvider {
!
@Inject private IResourceSetProvider resourceSetProvider;
@Inject private FileExtensionProvider ext;
!
@Override
public XtextResource createResource() {
ResourceSet resourceSet = resourceSetProvider.get(null);
URI uri = URI.createURI("synthetic:/mail." + ext.getPrimaryFileExtension());
XtextResource result = (XtextResource) resourceSet.createResource(uri);
resourceSet.getResources().add(result);
return result;
}
}
Init Resource incl. ResourceSet