]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.g2d/src/org/simantics/g2d/participant/SubCanvas.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / participant / SubCanvas.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.participant;\r
13 \r
14 import org.simantics.g2d.canvas.Hints;\r
15 import org.simantics.g2d.canvas.ICanvasContext;\r
16 import org.simantics.g2d.canvas.IMouseCaptureContext;\r
17 import org.simantics.g2d.canvas.IMouseCursorContext;\r
18 import org.simantics.g2d.canvas.IContentContext;\r
19 import org.simantics.g2d.canvas.IContentContext.IContentListener;\r
20 import org.simantics.g2d.canvas.impl.AbstractCanvasParticipant;\r
21 import org.simantics.g2d.canvas.impl.DependencyReflection.Dependency;\r
22 \r
23 /**\r
24  * Subcanvas encapsulates a canvas (another) in one participant.\r
25  * \r
26  * \r
27  * @author Toni Kalajainen\r
28  */\r
29 public class SubCanvas extends AbstractCanvasParticipant {\r
30 \r
31         @Dependency TransformUtil util;\r
32 \r
33         private boolean enabled = true;\r
34         private ICanvasContext superCtx = null;\r
35         \r
36         /** Sub-Canvas */\r
37         private ICanvasContext sub;\r
38         int eventPriority, paintPriority, hintPriority;\r
39         //IHintContext subHintStack;\r
40         IMouseCursorContext origSubCursorCtx;\r
41         IMouseCaptureContext origSubCaptureCtx;\r
42         \r
43         // Subcanvas has become dirty, make super canvas also dirty\r
44         IContentListener paintableCtxListener = new IContentListener() {\r
45 \r
46                 @Override\r
47                 public void onDirty(IContentContext sender) {\r
48                         if (superCtx==null) return;\r
49                         superCtx.getContentContext().setDirty();\r
50                 }\r
51         };\r
52         \r
53         public SubCanvas(ICanvasContext subCanvas, int eventPriority, int paintPriority, int hintPriority) {\r
54                 assert(subCanvas!=null);\r
55                 this.sub = subCanvas;\r
56                 this.eventPriority = eventPriority;\r
57                 this.paintPriority = paintPriority;\r
58                 this.hintPriority = hintPriority;\r
59                 //subHintStack = sub.getHintStack().createStackRead(sub.getDefaultHintContext());\r
60                 \r
61 //              subCanvas.getMouseCaptureContext().addMouseCaptureListener(new IMouseCaptureListener() {\r
62 //                      @Override\r
63 //                      public void onMouseCaptured(IMouseCaptureContext sender, int mouseId) {\r
64 //                              if (superCtx==null) return;\r
65 //                              superCtx.getMouseCaptureContext().\r
66 //                      }\r
67 //                      @Override\r
68 //                      public void onMouseReleased(IMouseCaptureContext sender, int mouseId) {\r
69 //                      }});\r
70         }\r
71         \r
72         @Override\r
73         public void addedToContext(ICanvasContext ctx) {\r
74                 super.addedToContext(ctx);\r
75                 superCtx = ctx;\r
76                 if (enabled) enable();\r
77         }\r
78         \r
79         @Override\r
80         public void removedFromContext(ICanvasContext ctx) {\r
81                 assert(superCtx==ctx);\r
82                 if (enabled) disable();\r
83                 superCtx = null;\r
84                 super.removedFromContext(ctx);\r
85         }\r
86         \r
87         public void setEnabled(boolean enabled)\r
88         {\r
89                 if (this.enabled == enabled) return;\r
90                 if (enabled) enable(); else disable();\r
91         }\r
92         \r
93         void enable() {\r
94                 superCtx.getEventHandlerStack().add(sub.getEventHandlerStack(), eventPriority);\r
95 //              superCtx.getPainterStack().add(sub.getPainterStack(), paintPriority);\r
96                 //superCtx.getHintStack().addHintContext(subHintStack, hintPriority);\r
97                 sub.getContentContext().addPaintableContextListener(paintableCtxListener);\r
98                 origSubCursorCtx = sub.getMouseCursorContext();\r
99                 sub.setMouseCursorContext(getContext().getMouseCursorContext());\r
100                 origSubCaptureCtx = sub.getMouseCaptureContext();\r
101                 sub.setMouseCaptureContext(getContext().getMouseCaptureContext());\r
102                 assert(sub.getDefaultHintContext().getHint(Hints.KEY_SUPER_CANVAS)==null);\r
103                 //sub.getDefaultHintContext().setHint(Hints.KEY_SUPER_CANVAS, ctx);\r
104                 this.enabled = true;\r
105         }\r
106         \r
107         void disable() {\r
108                 sub.getDefaultHintContext().removeHint(Hints.KEY_SUPER_CANVAS);\r
109                 sub.setMouseCaptureContext(origSubCaptureCtx);          \r
110                 sub.setMouseCursorContext(origSubCursorCtx);\r
111                 sub.getContentContext().removePaintableContextListener(paintableCtxListener);\r
112                 //ctx.getHintStack().removeHintContext(subHintStack);\r
113 //              superCtx.getPainterStack().remove(sub.getPainterStack());\r
114                 superCtx.getEventHandlerStack().remove(sub.getEventHandlerStack());\r
115                 this.enabled = false;\r
116         }\r
117 \r
118 }\r