1 package org.simantics.document.swt.core.widget;
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.widgets.Composite;
5 import org.eclipse.ui.PlatformUI;
6 import org.simantics.document.server.JSONObject;
7 import org.simantics.document.server.handler.AbstractEventHandler;
8 import org.simantics.document.server.io.CommandContextImpl;
9 import org.simantics.document.swt.core.SWTDocument;
10 import org.simantics.document.swt.core.base.LeafWidgetManager;
11 import org.simantics.scl.ui.editor.SCLTextEditorNew;
12 import org.simantics.scl.ui.editor.TextAndErrors;
13 import org.simantics.utils.ui.workbench.FocusContextActivator;
15 public class SCLTextEditor extends LeafWidgetManager<SCLTextEditorNew> {
17 public static class State {
19 final private SWTDocument document;
20 final private SCLTextEditorNew editor;
21 public AbstractEventHandler onModify;
23 public State(SWTDocument document, SCLTextEditorNew editor) {
24 this.document = document;
28 public void fireText() {
29 if(onModify != null) {
30 CommandContextImpl parameters = new CommandContextImpl();
31 parameters.putString("text", editor.getContent());
32 document.post(onModify, parameters);
39 protected SCLTextEditorNew doCreateControl(SWTDocument document, Composite parent, JSONObject object) {
41 SCLTextEditorNew editor = new SCLTextEditorNew(parent, SWT.NONE);
42 State state = new State(document, editor);
44 editor.viewer.getTextWidget().setData("state", state);
45 new FocusContextActivator("org.simantics.document.swt.core.widget.SCLTextEditor", editor.viewer.getTextWidget(), PlatformUI.getWorkbench().getActiveWorkbenchWindow());
52 protected void doUpdateProperties(SWTDocument document, SCLTextEditorNew control, JSONObject object) {
54 if(control.isDisposed()) return;
56 TextAndErrors textAndErrors = object.getValue("textAndErrors");
57 if(textAndErrors == null) return;
59 // Disable updates during setContent
61 int caret = control.viewer.getTextWidget().getCaretOffset();
63 control.setContent(textAndErrors.text, textAndErrors.errors);
65 // For updates, restore caret
66 control.viewer.getTextWidget().setCaretOffset(caret);
68 final AbstractEventHandler onModify = object.getValue("onModify");
69 State state = (State)control.viewer.getTextWidget().getData("state");
70 state.onModify = onModify;