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.chassis;
\r
14 import java.awt.Component;
\r
16 import org.eclipse.swt.graphics.Color;
\r
17 import org.eclipse.swt.widgets.Composite;
\r
18 import org.eclipse.swt.widgets.Display;
\r
19 import org.eclipse.ui.IEditorPart;
\r
20 import org.eclipse.ui.IWorkbenchPage;
\r
21 import org.eclipse.ui.IWorkbenchWindow;
\r
22 import org.simantics.g2d.canvas.ICanvasContext;
\r
23 import org.simantics.g2d.event.adapter.SWTFocusAdapter;
\r
24 import org.simantics.g2d.event.adapter.SWTKeyEventAdapter;
\r
25 import org.simantics.g2d.event.adapter.SWTMouseEventAdapter;
\r
26 import org.simantics.utils.datastructures.hints.IHintContext;
\r
27 import org.simantics.utils.datastructures.hints.IHintContext.Key;
\r
28 import org.simantics.utils.datastructures.hints.IHintContext.KeyOf;
\r
29 import org.simantics.utils.threads.IThreadWorkQueue;
\r
30 import org.simantics.utils.ui.SWTAWTComponent;
\r
33 * SWT Composite based chassis
\r
35 * User must invoke CompositeChassis.syncPopulate() after constructions.
\r
37 * @author Toni Kalajainen
\r
39 public class SWTChassis extends SWTAWTComponent implements ICanvasChassis {
\r
41 protected AWTChassis component;
\r
42 protected SWTMouseEventAdapter mouseAdapter;
\r
43 protected SWTKeyEventAdapter keyAdapter;
\r
44 protected SWTFocusAdapter focusAdapter;
\r
47 * Tells the Composite where the canvas is installed.
\r
49 public static final Key KEY_SWT_COMPOSITE = new KeyOf(Composite.class, "SWT_COMPOSITE");
\r
51 public static final Key KEY_SWT_DISPLAY = new KeyOf(Display.class, "SWT_DISPLAY");
\r
53 public static final Key KEY_WORKBENCHWINDOW = new KeyOf(IWorkbenchWindow.class, "WORKBENCH_WINDOW");
\r
54 public static final Key KEY_WORKBENCHPAGE = new KeyOf(IWorkbenchPage.class, "WORKBENCH_PAGE");
\r
55 public static final Key KEY_EDITORPART = new KeyOf(IEditorPart.class, "EDITORPART");
\r
57 public SWTChassis(Composite parent, int style) {
\r
58 super(parent, style);
\r
62 protected void doDispose() {
\r
63 if (component!=null)
\r
64 component.fireChassisClosed();
\r
69 protected Component createSwingComponent() {
\r
70 component = new AWTChassis(false);
\r
75 * Run in SWT thread.
\r
77 * @param canvasContext new ICanvasContext to add or null to remove
\r
80 public void setCanvasContext(ICanvasContext canvasContext) {
\r
81 assert component != null;
\r
83 // Unhook old context
\r
84 if (component.canvasContext!=null) {
\r
85 if (component.hintCtx != null) {
\r
86 component.hintCtx.removeHint( KEY_SWT_COMPOSITE );
\r
87 component.hintCtx.removeHint( KEY_SWT_DISPLAY );
\r
89 // keyAdapter, mouseAdapter and focusAdapter may be null if
\r
90 // the underlying AWTChassis has already had its CanvasContext set
\r
91 // through other means than this method.
\r
92 if (keyAdapter != null) {
\r
93 removeKeyListener(keyAdapter);
\r
94 removeMouseWheelListener(mouseAdapter);
\r
95 removeMouseMoveListener(mouseAdapter);
\r
96 removeMouseTrackListener(mouseAdapter);
\r
97 removeMouseListener(mouseAdapter);
\r
98 removeFocusListener(focusAdapter);
\r
101 component.setCanvasContext(canvasContext);
\r
102 // Hook new context
\r
103 if (canvasContext!=null) {
\r
104 if (component.hintCtx != null) {
\r
105 component.hintCtx.setHint( KEY_SWT_COMPOSITE, this);
\r
106 component.hintCtx.setHint( KEY_SWT_DISPLAY, this.getDisplay());
\r
108 mouseAdapter = new SWTMouseEventAdapter(canvasContext, canvasContext.getEventQueue());
\r
109 keyAdapter = new SWTKeyEventAdapter(canvasContext, canvasContext.getEventQueue());
\r
110 focusAdapter = new SWTFocusAdapter(canvasContext, canvasContext.getEventQueue());
\r
111 addKeyListener(keyAdapter);
\r
112 addMouseWheelListener(mouseAdapter);
\r
113 addMouseMoveListener(mouseAdapter);
\r
114 addMouseTrackListener(mouseAdapter);
\r
115 addMouseListener(mouseAdapter);
\r
116 addFocusListener(focusAdapter);
\r
121 public AWTChassis getAWTComponent() {
\r
126 public ICanvasContext getCanvasContext() {
\r
127 return component.canvasContext;
\r
131 public void addChassisListener(IThreadWorkQueue thread, IChassisListener listener) {
\r
132 component.addChassisListener(thread, listener);
\r
136 public void removeChassisListener(IThreadWorkQueue thread, IChassisListener listener) {
\r
137 component.removeChassisListener(thread, listener);
\r
141 public void addChassisListener(IChassisListener listener) {
\r
142 component.addChassisListener(listener);
\r
146 public void removeChassisListener(IChassisListener listener) {
\r
147 component.removeChassisListener(listener);
\r
151 public IHintContext getHintContext() {
\r
152 return component.hintCtx;
\r
156 public void setBackground(Color color) {
\r
157 super.setBackground(color);
\r
158 if (component != null) {
\r
159 java.awt.Color awtColor = null;
\r
161 awtColor = new java.awt.Color(color.getRed(), color.getGreen(), color.getBlue());
\r
162 component.setBackground(awtColor);
\r