]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.ui/src/org/simantics/document/ui/CSSEditor.java
Several Wiki documentation view improvements.
[simantics/platform.git] / bundles / org.simantics.document.ui / src / org / simantics / document / ui / CSSEditor.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.document.ui;\r
13 \r
14 import java.util.function.Supplier;\r
15 \r
16 import org.eclipse.swt.widgets.Composite;\r
17 import org.eclipse.swt.widgets.Display;\r
18 import org.eclipse.ui.IEditorInput;\r
19 import org.eclipse.ui.IEditorSite;\r
20 import org.eclipse.ui.PartInitException;\r
21 import org.eclipse.ui.PlatformUI;\r
22 import org.eclipse.ui.editors.text.TextEditor;\r
23 import org.eclipse.ui.texteditor.ITextEditorActionConstants;\r
24 import org.eclipse.ui.texteditor.StatusLineContributionItem;\r
25 import org.simantics.Simantics;\r
26 import org.simantics.db.Session;\r
27 import org.simantics.db.common.request.ParametrizedRead;\r
28 import org.simantics.db.exception.DatabaseException;\r
29 import org.simantics.db.layer0.request.combinations.Combinators;\r
30 import org.simantics.ui.workbench.IResourceEditorInput;\r
31 import org.simantics.ui.workbench.ResourceEditorSupport;\r
32 import org.simantics.ui.workbench.TitleUpdater;\r
33 import org.simantics.ui.workbench.TitleWithParentNameRequest;\r
34 import org.simantics.ui.workbench.ToolTipRequest;\r
35 import org.simantics.ui.workbench.editor.input.InputValidationCombinators;\r
36 \r
37 \r
38 /**\r
39  * @author Antti Villberg;\r
40  */\r
41 public class CSSEditor extends TextEditor {\r
42 \r
43         public static final String EDITOR_ID = "org.simantics.document.ui.csseditor";\r
44         \r
45     private boolean disposed = false;\r
46 \r
47     private ParametrizedRead<IResourceEditorInput, Boolean> INPUT_VALIDATOR =\r
48             Combinators.compose(\r
49                     InputValidationCombinators.hasURI(),\r
50                     InputValidationCombinators.extractInputResource()\r
51             );\r
52 \r
53     private ResourceEditorSupport support;\r
54 \r
55     public CSSEditor() {\r
56         super();\r
57         preInitialize();\r
58     }\r
59     \r
60     @Override\r
61     public boolean isTabsToSpacesConversionEnabled() {\r
62         return true;\r
63     }\r
64     \r
65     protected void preInitialize() {\r
66         //showOverviewRuler();\r
67         Display display = PlatformUI.getWorkbench().getDisplay();\r
68         CSSSourceViewerConfiguration sourceViewer = new CSSSourceViewerConfiguration(display, new SharedTextColors(display));\r
69         setDocumentProvider(new CSSModuleEditorDocumentProvider(sourceViewer));\r
70         setSourceViewerConfiguration(sourceViewer);\r
71     }\r
72 \r
73     protected ParametrizedRead<IResourceEditorInput, Boolean> getInputValidator() {\r
74         return INPUT_VALIDATOR;\r
75     }\r
76 \r
77     @Override\r
78     public void init(IEditorSite site, IEditorInput input)\r
79             throws PartInitException {\r
80         super.init(site, input);\r
81 \r
82         support = new ResourceEditorSupport(this, getInputValidator());\r
83         support.activateValidation();\r
84         try {\r
85             getResourceInput().init(null);\r
86         } catch (DatabaseException e) {\r
87             throw new PartInitException("Failed to initialize " + input, e);\r
88         }\r
89     }\r
90 \r
91     protected IResourceEditorInput getResourceInput() {\r
92         return (IResourceEditorInput) getEditorInput();\r
93     }\r
94 \r
95     @Override\r
96     public void createPartControl(Composite parent) {\r
97         super.createPartControl(parent);\r
98         StatusLineContributionItem statusLineContribution = new StatusLineContributionItem(\r
99                 ITextEditorActionConstants.STATUS_CATEGORY_INPUT_POSITION,\r
100                 true, 14);\r
101         setStatusField(statusLineContribution,\r
102                 ITextEditorActionConstants.STATUS_CATEGORY_INPUT_POSITION);\r
103         getEditorSite().getActionBars().getStatusLineManager().add(statusLineContribution);\r
104         getEditorSite().getActionBars().updateActionBars();\r
105         updatePartName();\r
106     }\r
107 \r
108     protected void updatePartName() {\r
109         setPartName(getEditorInput().getName());\r
110 \r
111         Session session = Simantics.peekSession();\r
112         if (session != null) {\r
113             Supplier<Boolean> disposedCallback = this::isDisposed;\r
114             session.asyncRequest(\r
115                     new TitleWithParentNameRequest(getResourceInput()),\r
116                     new TitleUpdater(getSite().getShell().getDisplay(), this::setPartName, disposedCallback));\r
117             session.asyncRequest(\r
118                     new ToolTipRequest(getSite().getId(), getResourceInput()),\r
119                     new TitleUpdater(getSite().getShell().getDisplay(), this::setTitleToolTip, disposedCallback));\r
120         }\r
121     }\r
122 \r
123     @Override\r
124     public void dispose() {\r
125         disposed = true;\r
126         if (support != null) {\r
127             support.dispose();\r
128             support = null;\r
129         }\r
130         super.dispose();\r
131     }\r
132 \r
133     public boolean isDisposed() {\r
134         return disposed;\r
135     }\r
136 \r
137 }