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