1 package org.simantics.help.ui;
\r
3 import java.util.function.Supplier;
\r
5 import org.eclipse.swt.widgets.Composite;
\r
6 import org.eclipse.ui.IEditorInput;
\r
7 import org.eclipse.ui.IEditorSite;
\r
8 import org.eclipse.ui.PartInitException;
\r
9 import org.simantics.Simantics;
\r
10 import org.simantics.db.Session;
\r
11 import org.simantics.db.common.request.ParametrizedRead;
\r
12 import org.simantics.db.exception.DatabaseException;
\r
13 import org.simantics.db.layer0.request.combinations.Combinators;
\r
14 import org.simantics.ui.workbench.IResourceEditorInput;
\r
15 import org.simantics.ui.workbench.ResourceEditorSupport;
\r
16 import org.simantics.ui.workbench.TitleUpdater;
\r
17 import org.simantics.ui.workbench.TitleWithParentNameRequest;
\r
18 import org.simantics.ui.workbench.ToolTipRequest;
\r
19 import org.simantics.ui.workbench.editor.input.InputValidationCombinators;
\r
21 import winterwell.markdown.editors.MarkdownEditor;
\r
23 public class HelpFileEditor extends MarkdownEditor {
\r
25 private static final String EDITOR_ID = "org.simantics.help.ui.HelpFileEditor";
\r
27 private boolean disposed;
\r
29 private static final ParametrizedRead<IResourceEditorInput, Boolean> INPUT_VALIDATOR =
\r
30 Combinators.compose(InputValidationCombinators.hasURI(), InputValidationCombinators.extractInputResource());
\r
32 private ResourceEditorSupport support;
\r
34 public HelpFileEditor() {
\r
36 setDocumentProvider(new HelpFileDocumentProvider());
\r
40 public void init(IEditorSite site, IEditorInput input) throws PartInitException {
\r
41 super.init(site, input);
\r
43 support = new ResourceEditorSupport(this, INPUT_VALIDATOR);
\r
44 support.activateValidation();
\r
46 getResourceInput().init(null);
\r
47 } catch (DatabaseException e) {
\r
48 throw new PartInitException("Failed to initialize " + input, e);
\r
53 protected IResourceEditorInput getResourceInput() {
\r
54 return (IResourceEditorInput) getEditorInput();
\r
58 public void createPartControl(Composite parent) {
\r
59 super.createPartControl(parent);
\r
63 protected void updatePartName() {
\r
64 setPartName(getEditorInput().getName());
\r
66 Session session = Simantics.peekSession();
\r
67 if (session != null) {
\r
68 Supplier<Boolean> disposedCallback = this::isDisposed;
\r
69 session.asyncRequest(new TitleWithParentNameRequest(getResourceInput()),
\r
70 new TitleUpdater(getSite().getShell().getDisplay(), this::setPartName, disposedCallback));
\r
71 session.asyncRequest(new ToolTipRequest(getSite().getId(), getResourceInput()),
\r
72 new TitleUpdater(getSite().getShell().getDisplay(), this::setTitleToolTip, disposedCallback));
\r
77 public void dispose() {
\r
79 if (support != null) {
\r
86 public boolean isDisposed() {
\r
90 public static String getEditorId() {
\r