]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.help.ui;\r
2 \r
3 import java.util.function.Supplier;\r
4 \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
20 \r
21 import winterwell.markdown.editors.MarkdownEditor;\r
22 \r
23 public class HelpFileEditor extends MarkdownEditor {\r
24 \r
25     private static final String EDITOR_ID = "org.simantics.help.ui.HelpFileEditor";\r
26 \r
27     private boolean disposed;\r
28 \r
29     private static final ParametrizedRead<IResourceEditorInput, Boolean> INPUT_VALIDATOR = \r
30             Combinators.compose(InputValidationCombinators.hasURI(), InputValidationCombinators.extractInputResource());\r
31 \r
32     private ResourceEditorSupport support;\r
33 \r
34     public HelpFileEditor() {\r
35         super();\r
36         setDocumentProvider(new HelpFileDocumentProvider());\r
37     }\r
38 \r
39     @Override\r
40     public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
41         super.init(site, input);\r
42 \r
43         support = new ResourceEditorSupport(this, INPUT_VALIDATOR);\r
44         support.activateValidation();\r
45         try {\r
46             getResourceInput().init(null);\r
47         } catch (DatabaseException e) {\r
48             throw new PartInitException("Failed to initialize " + input, e);\r
49         }\r
50 \r
51     }\r
52 \r
53     protected IResourceEditorInput getResourceInput() {\r
54         return (IResourceEditorInput) getEditorInput();\r
55     }\r
56 \r
57     @Override\r
58     public void createPartControl(Composite parent) {\r
59         super.createPartControl(parent);\r
60         updatePartName();\r
61     }\r
62 \r
63     protected void updatePartName() {\r
64         setPartName(getEditorInput().getName());\r
65 \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
73         }\r
74     }\r
75 \r
76     @Override\r
77     public void dispose() {\r
78         disposed = true;\r
79         if (support != null) {\r
80             support.dispose();\r
81             support = null;\r
82         }\r
83         super.dispose();\r
84     }\r
85 \r
86     public boolean isDisposed() {\r
87         return disposed;\r
88     }\r
89 \r
90     public static String getEditorId() {\r
91         return EDITOR_ID;\r
92     }\r
93 }\r