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