1 /*******************************************************************************
\r
2 * Copyright (c) 2012 Association for Decentralized Information Management in
\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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.modeling.template2d.ui.diagram.adapter;
\r
14 import org.simantics.db.ReadGraph;
\r
15 import org.simantics.db.Resource;
\r
16 import org.simantics.db.exception.DatabaseException;
\r
17 import org.simantics.db.layer0.variable.Variable;
\r
18 import org.simantics.diagram.profile.StyleBase;
\r
19 import org.simantics.g2d.scenegraph.SceneGraphConstants;
\r
20 import org.simantics.modeling.template2d.ontology.Template2dResource;
\r
21 import org.simantics.modeling.template2d.ui.function.All;
\r
22 import org.simantics.scenegraph.INode;
\r
23 import org.simantics.scenegraph.g2d.G2DParentNode;
\r
24 import org.simantics.scenegraph.g2d.G2DSceneGraph;
\r
25 import org.simantics.scenegraph.g2d.nodes.SingleElementNode;
\r
26 import org.simantics.scenegraph.loader.ScenegraphLoaderProcess;
\r
27 import org.simantics.scenegraph.profile.DataNodeMap;
\r
28 import org.simantics.scenegraph.profile.EvaluationContext;
\r
29 import org.simantics.scenegraph.profile.common.ProfileVariables;
\r
32 public class DrawingTemplateStyle extends StyleBase<INode> {
\r
34 private static final String PAGE_TEMPLATE_NODE_NAME = "pageTemplate";
\r
36 private static Resource getTemplateScenegraph(ReadGraph graph, Resource runtimeDiagram) throws DatabaseException {
\r
37 Template2dResource TEMPLATE2D = Template2dResource.getInstance(graph);
\r
38 Resource template = All.getTemplate(graph, runtimeDiagram);
\r
39 if (template == null)
\r
41 return graph.getPossibleObject(template, TEMPLATE2D.HasScenegraph);
\r
45 public INode calculateStyle(ReadGraph graph, Resource runtimeDiagram, Resource entry, Resource groupItem, Variable activeComposite)
\r
46 throws DatabaseException {
\r
47 Resource sceneGraph = DrawingTemplateStyle.getTemplateScenegraph(graph, runtimeDiagram);
\r
48 if (sceneGraph == null)
\r
50 ScenegraphLoaderProcess loader = new ScenegraphLoaderProcess(new G2DParentNode(), "TemplateStyle.calculate");
\r
51 return loader.load(graph, sceneGraph, runtimeDiagram);
\r
55 public void applyStyleForItem(EvaluationContext evaluationContext, DataNodeMap map, Object item, INode node) {
\r
59 G2DSceneGraph sg = evaluationContext.getSceneGraph();
\r
62 G2DParentNode nav = (G2DParentNode) sg.getNode(SceneGraphConstants.NAVIGATION_NODE_NAME);
\r
66 SingleElementNode pageTemplate = ProfileVariables.claimChild(evaluationContext.getSceneGraph(),
\r
67 SceneGraphConstants.NAVIGATION_NODE_NAME, PAGE_TEMPLATE_NODE_NAME, SingleElementNode.class,
\r
70 if (pageTemplate == null)
\r
73 pageTemplate.setZIndex(1);
\r
74 pageTemplate.setVisible(true);
\r
76 // Switch template contents if the contents are not exactly the same.
\r
77 INode previous = pageTemplate.getNode("structure");
\r
78 if (previous != node) {
\r
79 pageTemplate.detachNode("structure");
\r
80 pageTemplate.attachNode("structure", node);
\r
85 protected void cleanupStyleForItem(EvaluationContext evaluationContext, DataNodeMap map, Object item) {
\r
86 G2DSceneGraph sg = evaluationContext.getSceneGraph();
\r
89 G2DParentNode nav = (G2DParentNode) sg.getNode(SceneGraphConstants.NAVIGATION_NODE_NAME);
\r
93 G2DParentNode pageTemplate = (G2DParentNode) nav.getNode(PAGE_TEMPLATE_NODE_NAME);
\r
94 if (pageTemplate == null)
\r
97 pageTemplate.detachNode("structure");
\r
98 ProfileVariables.denyChild(evaluationContext.getSceneGraph(),
\r
99 SceneGraphConstants.NAVIGATION_NODE_NAME, PAGE_TEMPLATE_NODE_NAME);
\r
103 public String toString() {
\r