]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.help.ui/src/org/simantics/help/ui/HelpFileEditor.java
merged svn revision 33114 and added desktop and help plugins
[simantics/platform.git] / bundles / org.simantics.help.ui / src / org / simantics / help / ui / HelpFileEditor.java
diff --git a/bundles/org.simantics.help.ui/src/org/simantics/help/ui/HelpFileEditor.java b/bundles/org.simantics.help.ui/src/org/simantics/help/ui/HelpFileEditor.java
new file mode 100644 (file)
index 0000000..2b5eaca
--- /dev/null
@@ -0,0 +1,93 @@
+package org.simantics.help.ui;\r
+\r
+import java.util.function.Supplier;\r
+\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorSite;\r
+import org.eclipse.ui.PartInitException;\r
+import org.simantics.Simantics;\r
+import org.simantics.db.Session;\r
+import org.simantics.db.common.request.ParametrizedRead;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.request.combinations.Combinators;\r
+import org.simantics.ui.workbench.IResourceEditorInput;\r
+import org.simantics.ui.workbench.ResourceEditorSupport;\r
+import org.simantics.ui.workbench.TitleUpdater;\r
+import org.simantics.ui.workbench.TitleWithParentNameRequest;\r
+import org.simantics.ui.workbench.ToolTipRequest;\r
+import org.simantics.ui.workbench.editor.input.InputValidationCombinators;\r
+\r
+import winterwell.markdown.editors.MarkdownEditor;\r
+\r
+public class HelpFileEditor extends MarkdownEditor {\r
+\r
+    private static final String EDITOR_ID = "org.simantics.help.ui.HelpFileEditor";\r
+\r
+    private boolean disposed;\r
+\r
+    private static final ParametrizedRead<IResourceEditorInput, Boolean> INPUT_VALIDATOR = \r
+            Combinators.compose(InputValidationCombinators.hasURI(), InputValidationCombinators.extractInputResource());\r
+\r
+    private ResourceEditorSupport support;\r
+\r
+    public HelpFileEditor() {\r
+        super();\r
+        setDocumentProvider(new HelpFileDocumentProvider());\r
+    }\r
+\r
+    @Override\r
+    public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
+        super.init(site, input);\r
+\r
+        support = new ResourceEditorSupport(this, INPUT_VALIDATOR);\r
+        support.activateValidation();\r
+        try {\r
+            getResourceInput().init(null);\r
+        } catch (DatabaseException e) {\r
+            throw new PartInitException("Failed to initialize " + input, e);\r
+        }\r
+\r
+    }\r
+\r
+    protected IResourceEditorInput getResourceInput() {\r
+        return (IResourceEditorInput) getEditorInput();\r
+    }\r
+\r
+    @Override\r
+    public void createPartControl(Composite parent) {\r
+        super.createPartControl(parent);\r
+        updatePartName();\r
+    }\r
+\r
+    protected void updatePartName() {\r
+        setPartName(getEditorInput().getName());\r
+\r
+        Session session = Simantics.peekSession();\r
+        if (session != null) {\r
+            Supplier<Boolean> disposedCallback = this::isDisposed;\r
+            session.asyncRequest(new TitleWithParentNameRequest(getResourceInput()),\r
+                    new TitleUpdater(getSite().getShell().getDisplay(), this::setPartName, disposedCallback));\r
+            session.asyncRequest(new ToolTipRequest(getSite().getId(), getResourceInput()),\r
+                    new TitleUpdater(getSite().getShell().getDisplay(), this::setTitleToolTip, disposedCallback));\r
+        }\r
+    }\r
+\r
+    @Override\r
+    public void dispose() {\r
+        disposed = true;\r
+        if (support != null) {\r
+            support.dispose();\r
+            support = null;\r
+        }\r
+        super.dispose();\r
+    }\r
+\r
+    public boolean isDisposed() {\r
+        return disposed;\r
+    }\r
+\r
+    public static String getEditorId() {\r
+        return EDITOR_ID;\r
+    }\r
+}\r