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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.g2d.participant;
\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
24 * Subcanvas encapsulates a canvas (another) in one participant.
\r
27 * @author Toni Kalajainen
\r
29 public class SubCanvas extends AbstractCanvasParticipant {
\r
31 @Dependency TransformUtil util;
\r
33 private boolean enabled = true;
\r
34 private ICanvasContext superCtx = null;
\r
37 private ICanvasContext sub;
\r
38 int eventPriority, paintPriority, hintPriority;
\r
39 //IHintContext subHintStack;
\r
40 IMouseCursorContext origSubCursorCtx;
\r
41 IMouseCaptureContext origSubCaptureCtx;
\r
43 // Subcanvas has become dirty, make super canvas also dirty
\r
44 IContentListener paintableCtxListener = new IContentListener() {
\r
47 public void onDirty(IContentContext sender) {
\r
48 if (superCtx==null) return;
\r
49 superCtx.getContentContext().setDirty();
\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
61 // subCanvas.getMouseCaptureContext().addMouseCaptureListener(new IMouseCaptureListener() {
\r
63 // public void onMouseCaptured(IMouseCaptureContext sender, int mouseId) {
\r
64 // if (superCtx==null) return;
\r
65 // superCtx.getMouseCaptureContext().
\r
68 // public void onMouseReleased(IMouseCaptureContext sender, int mouseId) {
\r
73 public void addedToContext(ICanvasContext ctx) {
\r
74 super.addedToContext(ctx);
\r
76 if (enabled) enable();
\r
80 public void removedFromContext(ICanvasContext ctx) {
\r
81 assert(superCtx==ctx);
\r
82 if (enabled) disable();
\r
84 super.removedFromContext(ctx);
\r
87 public void setEnabled(boolean enabled)
\r
89 if (this.enabled == enabled) return;
\r
90 if (enabled) enable(); else disable();
\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
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