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