]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/symbolEditor/SymbolViewer.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / symbolEditor / SymbolViewer.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in 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.symbolEditor;\r
13 \r
14 import java.util.Collections;\r
15 import java.util.Set;\r
16 \r
17 import org.simantics.db.common.request.ParametrizedRead;\r
18 import org.simantics.db.layer0.request.combinations.Combinators;\r
19 import org.simantics.diagram.handler.CopyPasteStrategy;\r
20 import org.simantics.diagram.handler.DefaultCopyPasteStrategy;\r
21 import org.simantics.diagram.participant.PointerInteractor2;\r
22 import org.simantics.g2d.canvas.ICanvasContext;\r
23 import org.simantics.g2d.diagram.DiagramHints;\r
24 import org.simantics.g2d.diagram.IDiagram;\r
25 import org.simantics.g2d.diagram.participant.pointertool.PointerInteractor;\r
26 import org.simantics.g2d.layers.ILayer;\r
27 import org.simantics.g2d.layers.ILayers;\r
28 import org.simantics.g2d.layers.ILayersEditor;\r
29 import org.simantics.g2d.page.DiagramDesc;\r
30 import org.simantics.modeling.ui.diagramEditor.DiagramEditorStates;\r
31 import org.simantics.modeling.ui.diagramEditor.EditorState;\r
32 import org.simantics.structural.stubs.StructuralResource2;\r
33 import org.simantics.ui.workbench.IResourceEditorInput;\r
34 import org.simantics.ui.workbench.editor.input.InputValidationCombinators;\r
35 import org.simantics.utils.page.PageCentering;\r
36 \r
37 /**\r
38  * @author Tuukka Lehtonen\r
39  */\r
40 public class SymbolViewer extends org.simantics.modeling.ui.diagramEditor.DiagramViewer {\r
41 \r
42     ParametrizedRead<IResourceEditorInput, Boolean> INPUT_VALIDATOR =\r
43         Combinators.compose(\r
44                 Combinators.compose(\r
45                         InputValidationCombinators.hasURI(),\r
46                         InputValidationCombinators.partialFunction(StructuralResource2.URIs.Defines)\r
47                 ),\r
48                 InputValidationCombinators.extractInputResource()\r
49         );\r
50 \r
51     protected String getPopupId() {\r
52         return "#SymbolViewerPopup";\r
53     }\r
54     \r
55     public ParametrizedRead<IResourceEditorInput, Boolean> getInputValidator() {\r
56         return INPUT_VALIDATOR;\r
57     }\r
58 \r
59     @Override\r
60     protected PointerInteractor getPointerInteractor() {\r
61         return new PointerInteractor2(true, true, true, false, false, false, synchronizer.getElementClassProvider());\r
62     }\r
63     \r
64     @Override\r
65     protected void addDropParticipants(ICanvasContext ctx) {\r
66         ctx.add(new PopulateTerminalDropParticipant(getResourceInput().getResource(), synchronizer));\r
67     }\r
68 \r
69     protected void addStructureParticipants(ICanvasContext ctx) {\r
70         addWorkbenchSelectionProvider(ctx);\r
71     }\r
72 \r
73     @Override\r
74     protected void setDiagramDesc(ICanvasContext ctx, DiagramDesc diagramDesc) {\r
75         super.setDiagramDesc(ctx, diagramDesc.withPageDesc(\r
76                 diagramDesc.getPageDesc().withCentering(PageCentering.CenteredAroundOrigin)));\r
77     }\r
78 \r
79     @Override\r
80     protected void beforeSetDiagram(IDiagram diagram) {\r
81         setupLayers(diagram);\r
82     }\r
83 \r
84     protected void setupLayers(IDiagram diagram) {\r
85         diagram.setHint(DiagramHints.KEY_LAYERS, new ILayers() {\r
86 \r
87             @Override\r
88             public boolean isActive(ILayer layer) {\r
89                 return true;\r
90             }\r
91 \r
92             @Override\r
93             public Set<ILayer> getVisibleLayers() {\r
94                 return Collections.emptySet();\r
95             }\r
96 \r
97             @Override\r
98             public Set<ILayer> getLayers() {\r
99                 return Collections.emptySet();\r
100             }\r
101 \r
102             @Override\r
103             public boolean getIgnoreVisibilitySettings() {\r
104                 return true;\r
105             }\r
106 \r
107             @Override\r
108             public boolean getIgnoreFocusSettings() {\r
109                 return true;\r
110             }\r
111 \r
112         });\r
113 \r
114         // Disable roles (layers) by default in symbol editor to show everything.\r
115         ILayersEditor le = diagram.getHint(DiagramHints.KEY_LAYERS_EDITOR);\r
116         if (le != null) {\r
117             le.setIgnoreFocusSettings(true);\r
118             le.setIgnoreVisibilitySettings(true);\r
119         }\r
120     }\r
121 \r
122     @Override\r
123     protected EditorState getSavedEditorState(ICanvasContext ctx) {\r
124         return DiagramEditorStates.toEditorState(ctx, true, true, false);\r
125     }\r
126 \r
127     protected CopyPasteStrategy getDefaultCopyPasteStrategy() {\r
128         return new SymbolEditorCopyPasteStrategy();\r
129     }\r
130 \r
131 }\r