X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.document.swt.core%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Fswt%2Fcore%2Fwidget%2FSCLTextEditor.java;fp=bundles%2Forg.simantics.document.swt.core%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Fswt%2Fcore%2Fwidget%2FSCLTextEditor.java;h=f4795bfbecbc3099a75028dfa828d904361e05ab;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/widget/SCLTextEditor.java b/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/widget/SCLTextEditor.java new file mode 100644 index 000000000..f4795bfbe --- /dev/null +++ b/bundles/org.simantics.document.swt.core/src/org/simantics/document/swt/core/widget/SCLTextEditor.java @@ -0,0 +1,74 @@ +package org.simantics.document.swt.core.widget; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.PlatformUI; +import org.simantics.document.server.JSONObject; +import org.simantics.document.server.handler.AbstractEventHandler; +import org.simantics.document.server.io.CommandContextImpl; +import org.simantics.document.swt.core.SWTDocument; +import org.simantics.document.swt.core.base.LeafWidgetManager; +import org.simantics.scl.ui.editor.SCLTextEditorNew; +import org.simantics.scl.ui.editor.TextAndErrors; +import org.simantics.utils.ui.workbench.FocusContextActivator; + +public class SCLTextEditor extends LeafWidgetManager { + + public static class State { + + final private SWTDocument document; + final private SCLTextEditorNew editor; + public AbstractEventHandler onModify; + + public State(SWTDocument document, SCLTextEditorNew editor) { + this.document = document; + this.editor = editor; + } + + public void fireText() { + if(onModify != null) { + CommandContextImpl parameters = new CommandContextImpl(); + parameters.putString("text", editor.getContent()); + document.post(onModify, parameters); + } + } + + } + + @Override + protected SCLTextEditorNew doCreateControl(SWTDocument document, Composite parent, JSONObject object) { + + SCLTextEditorNew editor = new SCLTextEditorNew(parent, SWT.NONE); + State state = new State(document, editor); + + editor.viewer.getTextWidget().setData("state", state); + new FocusContextActivator("org.simantics.document.swt.core.widget.SCLTextEditor", editor.viewer.getTextWidget(), PlatformUI.getWorkbench().getActiveWorkbenchWindow()); + + return editor; + + } + + @Override + protected void doUpdateProperties(SWTDocument document, SCLTextEditorNew control, JSONObject object) { + + if(control.isDisposed()) return; + + TextAndErrors textAndErrors = object.getValue("textAndErrors"); + if(textAndErrors == null) return; + + // Disable updates during setContent + + int caret = control.viewer.getTextWidget().getCaretOffset(); + + control.setContent(textAndErrors.text, textAndErrors.errors); + + // For updates, restore caret + control.viewer.getTextWidget().setCaretOffset(caret); + + final AbstractEventHandler onModify = object.getValue("onModify"); + State state = (State)control.viewer.getTextWidget().getData("state"); + state.onModify = onModify; + + } + +}