]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/SCLModuleEditor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / componentTypeEditor / SCLModuleEditor.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.modeling.ui.componentTypeEditor;\r
13 \r
14 import java.util.function.Supplier;\r
15 \r
16 import org.eclipse.jface.resource.JFaceResources;\r
17 import org.eclipse.jface.resource.LocalResourceManager;\r
18 import org.eclipse.swt.widgets.Composite;\r
19 import org.eclipse.ui.IEditorInput;\r
20 import org.eclipse.ui.IEditorSite;\r
21 import org.eclipse.ui.PartInitException;\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.scl.ui.editor.SCLSourceViewerConfigurationNew;\r
31 import org.simantics.ui.workbench.IResourceEditorInput;\r
32 import org.simantics.ui.workbench.ResourceEditorSupport;\r
33 import org.simantics.ui.workbench.TitleUpdater;\r
34 import org.simantics.ui.workbench.TitleWithParentNameRequest;\r
35 import org.simantics.ui.workbench.ToolTipRequest;\r
36 import org.simantics.ui.workbench.editor.input.InputValidationCombinators;\r
37 \r
38 \r
39 /**\r
40  * @author Antti Villberg;\r
41  * @author Hannu Niemistö\r
42  */\r
43 public class SCLModuleEditor extends TextEditor {\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     protected LocalResourceManager resourceManager;\r
55 \r
56     public SCLModuleEditor() {\r
57         super();\r
58         resourceManager = new LocalResourceManager(JFaceResources.getResources());\r
59         preInitialize();\r
60     }\r
61     \r
62     @Override\r
63     public boolean isTabsToSpacesConversionEnabled() {\r
64         return true;\r
65     }\r
66     \r
67     protected void preInitialize() {\r
68         //showOverviewRuler();\r
69         SCLSourceViewerConfigurationNew sourceViewerConfiguration = new SCLSourceViewerConfigurationNew(resourceManager);\r
70         setDocumentProvider(new SCLModuleEditorDocumentProvider(sourceViewerConfiguration));\r
71         setSourceViewerConfiguration(sourceViewerConfiguration);\r
72     }\r
73 \r
74     protected ParametrizedRead<IResourceEditorInput, Boolean> getInputValidator() {\r
75         return INPUT_VALIDATOR;\r
76     }\r
77 \r
78     @Override\r
79     public void init(IEditorSite site, IEditorInput input)\r
80             throws PartInitException {\r
81         super.init(site, input);\r
82 \r
83         support = new ResourceEditorSupport(this, getInputValidator());\r
84         support.activateValidation();\r
85         try {\r
86             getResourceInput().init(null);\r
87         } catch (DatabaseException e) {\r
88             throw new PartInitException("Failed to initialize " + input, e);\r
89         }\r
90     }\r
91 \r
92     protected IResourceEditorInput getResourceInput() {\r
93         return (IResourceEditorInput) getEditorInput();\r
94     }\r
95 \r
96     @Override\r
97     public void createPartControl(Composite parent) {\r
98         super.createPartControl(parent);\r
99         StatusLineContributionItem statusLineContribution = new StatusLineContributionItem(\r
100                 ITextEditorActionConstants.STATUS_CATEGORY_INPUT_POSITION,\r
101                 true, 14);\r
102         setStatusField(statusLineContribution,\r
103                 ITextEditorActionConstants.STATUS_CATEGORY_INPUT_POSITION);\r
104         getEditorSite().getActionBars().getStatusLineManager().add(statusLineContribution);\r
105         getEditorSite().getActionBars().updateActionBars();\r
106         updatePartName();\r
107     }\r
108 \r
109     protected void updatePartName() {\r
110         setPartName(getEditorInput().getName());\r
111 \r
112         Session session = Simantics.peekSession();\r
113         if (session != null) {\r
114             Supplier<Boolean> disposedCallback = this::isDisposed;\r
115             session.asyncRequest(\r
116                     new TitleWithParentNameRequest(getResourceInput()),\r
117                     new TitleUpdater(getSite().getShell().getDisplay(), this::setPartName, disposedCallback));\r
118             session.asyncRequest(\r
119                     new ToolTipRequest(getSite().getId(), getResourceInput()),\r
120                     new TitleUpdater(getSite().getShell().getDisplay(), this::setTitleToolTip, disposedCallback));\r
121         }\r
122     }\r
123 \r
124     @Override\r
125     public void dispose() {\r
126         disposed = true;\r
127         if (support != null) {\r
128             support.dispose();\r
129             support = null;\r
130         }\r
131         super.dispose();\r
132         resourceManager.dispose();\r
133     }\r
134 \r
135     public boolean isDisposed() {\r
136         return disposed;\r
137     }\r
138 \r
139 }