]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.g2d/src/org/simantics/g2d/gallery/GalleryItemSGNode.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / gallery / GalleryItemSGNode.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.g2d.gallery;\r
13 \r
14 import java.awt.Font;\r
15 import java.awt.Point;\r
16 import java.awt.geom.AffineTransform;\r
17 import java.awt.geom.Rectangle2D;\r
18 \r
19 import org.simantics.g2d.diagram.IDiagram;\r
20 import org.simantics.g2d.element.ElementUtils;\r
21 import org.simantics.g2d.element.IElement;\r
22 import org.simantics.g2d.element.SceneGraphNodeKey;\r
23 import org.simantics.g2d.element.ElementClass.Single;\r
24 import org.simantics.g2d.element.handler.LifeCycle;\r
25 import org.simantics.g2d.element.handler.SceneGraph;\r
26 import org.simantics.g2d.element.handler.Transform;\r
27 import org.simantics.g2d.image.Image;\r
28 import org.simantics.scenegraph.Node;\r
29 import org.simantics.scenegraph.g2d.G2DParentNode;\r
30 import org.simantics.scenegraph.g2d.nodes.GalleryItemNode;\r
31 import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
32 import org.simantics.utils.datastructures.hints.IHintContext.KeyOf;\r
33 \r
34 @Single\r
35 public class GalleryItemSGNode implements SceneGraph, LifeCycle {\r
36 \r
37     private static final long serialVersionUID = 6625834518019163965L;\r
38 \r
39     public final static Key   KEY_IMAGE                 = new KeyOf(Image.class, "GALLERY_IMAGE");\r
40     public final static Key   KEY_IMAGE_SHADOW          = new KeyOf(Image.class, "GALLERY_IMAGE_SHADOW");\r
41     public final static Key   KEY_TARGET_IMAGE_SIZE     = new KeyOf(Point.class, "GALLERY_TARGET_IMAGE_SIZE");\r
42 \r
43     public final static Point DEFAULT_TARGET_IMAGE_SIZE = new Point(50, 50);\r
44 \r
45     public static final Key   KEY_GALLERY_ITEM_NODE     = new SceneGraphNodeKey(GalleryItemNode.class, "GALLERY_ITEM_NODE");\r
46 \r
47     private Font              font;\r
48 \r
49     public static Image getImage(IElement e) {\r
50         return e.getHint(KEY_IMAGE);\r
51     }\r
52 \r
53     public GalleryItemSGNode(Font font) {\r
54         this.font = font;\r
55     }\r
56 \r
57     public void update(IElement e) {\r
58         GalleryItemNode node = (GalleryItemNode) e.getHint(KEY_GALLERY_ITEM_NODE);\r
59         if (node != null) {\r
60             Rectangle2D bounds = ElementUtils.getElementBounds(e);\r
61             String str = ElementUtils.getText(e);\r
62             Image img = e.getHint(KEY_IMAGE);\r
63 \r
64             Rectangle2D imageBounds = img.getBounds();\r
65             node.init(str, bounds, font, imageBounds);\r
66 \r
67             AffineTransform at = e.getElementClass().getSingleItem(Transform.class).getTransform(e);\r
68             node.setTransform((AffineTransform) at.clone());\r
69 \r
70             img.init(node);\r
71         }\r
72     }\r
73 \r
74     public void setFont(Font font) {\r
75         this.font = font;\r
76     }\r
77 \r
78     @Override\r
79     public void init(final IElement e, G2DParentNode parent) {\r
80         GalleryItemNode node = (GalleryItemNode) e.getHint(KEY_GALLERY_ITEM_NODE);\r
81         if (node == null) {\r
82             node = parent.addNode(GalleryItemNode.class);\r
83             e.setHint(KEY_GALLERY_ITEM_NODE, node);\r
84         }\r
85         update(e);\r
86     }\r
87 \r
88     @Override\r
89     public void cleanup(IElement e) {\r
90         Node node = e.removeHint(KEY_GALLERY_ITEM_NODE);\r
91         if (node != null)\r
92             node.remove();\r
93     }\r
94 \r
95     @Override\r
96     public void onElementActivated(IDiagram d, IElement e) {\r
97     }\r
98 \r
99     @Override\r
100     public void onElementCreated(IElement e) {\r
101     }\r
102 \r
103     @Override\r
104     public void onElementDeactivated(IDiagram d, IElement e) {\r
105     }\r
106 \r
107     @Override\r
108     public void onElementDestroyed(IElement e) {\r
109         cleanup(e);\r
110     }\r
111 \r
112 }\r