]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AWTRemoteEventAdapter.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / events / adapter / AWTRemoteEventAdapter.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.scenegraph.g2d.events.adapter;
13
14 import java.awt.AWTEvent;
15 import java.awt.event.AWTEventListener;
16 import java.awt.event.InputEvent;
17 import java.awt.event.KeyEvent;
18 import java.awt.event.KeyListener;
19 import java.awt.event.MouseEvent;
20 import java.awt.event.MouseListener;
21 import java.awt.event.MouseMotionListener;
22 import java.awt.event.MouseWheelEvent;
23 import java.awt.event.MouseWheelListener;
24 import java.awt.geom.Point2D;
25 import org.simantics.scenegraph.g2d.events.IEventHandler;
26 import org.simantics.scenegraph.g2d.events.IEventQueue;
27 import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent;
28 import org.simantics.scenegraph.g2d.events.KeyEvent.KeyReleasedEvent;
29 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonPressedEvent;
30 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonReleasedEvent;
31 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDoubleClickedEvent;
32 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseEnterEvent;
33 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseExitEvent;
34 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent;
35 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseWheelMovedEvent;
36 import org.simantics.scenegraph.g2d.events.adapter.AbstractEventAdapter;
37
38
39 /**
40  * Listens to objectinput stream and reads AWT events
41  * Adapts AWT events into G2D events.
42  * 
43  * Sends adapted events to IEventHandler
44  */
45 public class AWTRemoteEventAdapter extends AbstractEventAdapter implements AWTEventListener, MouseListener, MouseMotionListener, MouseWheelListener, KeyListener {
46
47     /** Mouse id of the default mouse */
48     public static final int MOUSE_ID     = 0;
49
50     private long[]          pressTime    = new long[5];
51     int                     buttonStatus = 0;
52
53     /**
54      * create new adapter
55      * @param input the input stream where the events are read from
56      * @param sender the sender field in the events
57      * @param delegator the target of the adapted events
58      */
59     public AWTRemoteEventAdapter(Object sender, IEventHandler delegator) {
60         super(sender, delegator);
61     }
62
63     /**
64      * create new adapter
65      * @param sender the sender field in the events
66      * @param queue
67      */
68     public AWTRemoteEventAdapter(Object sender, IEventQueue queue) {
69         super(sender, queue);
70     }   
71
72     private Point2D getControlPosition(MouseEvent e)
73     {
74         return new Point2D.Double(e.getX(), e.getY());
75     }
76
77     private Point2D getScreenPosition(MouseEvent e)
78     {
79         java.awt.Point p = e.getLocationOnScreen();
80         return new Point2D.Double(p.x, p.y);
81     }
82
83     private int getMouseButton(MouseEvent e)
84     {
85         int awtMouseButton = e.getButton();
86         if (awtMouseButton == MouseEvent.BUTTON1)
87             return org.simantics.scenegraph.g2d.events.MouseEvent.LEFT_BUTTON;
88         if (awtMouseButton == MouseEvent.BUTTON2)
89             return org.simantics.scenegraph.g2d.events.MouseEvent.MIDDLE_BUTTON;
90         if (awtMouseButton == MouseEvent.BUTTON3)
91             return org.simantics.scenegraph.g2d.events.MouseEvent.RIGHT_BUTTON;
92         return awtMouseButton;
93     }
94
95     private static int getStateMask(MouseEvent e) {
96         int modifiers = e.getModifiersEx();
97         int stateMask = 0;
98         if((modifiers & InputEvent.CTRL_DOWN_MASK) != 0)
99             stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.CTRL_MASK;
100         if((modifiers & InputEvent.ALT_DOWN_MASK) != 0)
101             stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.ALT_MASK;
102         if((modifiers & InputEvent.ALT_GRAPH_DOWN_MASK) != 0)
103             stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.ALT_GRAPH_MASK;
104         if((modifiers & InputEvent.SHIFT_DOWN_MASK) != 0)
105             stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.SHIFT_MASK;
106         return stateMask;
107     }
108
109
110     public void mouseEntered(MouseEvent e) {
111         buttonStatus = 0;
112         MouseEnterEvent me = new MouseEnterEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e)); 
113         handleEvent(me);
114     }
115
116
117     public void mouseExited(MouseEvent e) {
118         MouseExitEvent me = new MouseExitEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e));
119         handleEvent(me);
120     }
121
122
123     public void mousePressed(MouseEvent e) {
124         //System.out.println("AWT mouse pressed: " + e);
125         int mouseButton = getMouseButton(e);
126         if (mouseButton<=pressTime.length) pressTime[mouseButton-1] = e.getWhen();
127         buttonStatus |= 1 << (mouseButton-1);
128
129         handleEvent(new MouseButtonPressedEvent(sender, e.getWhen(), MOUSE_ID,
130                 buttonStatus, getStateMask(e), mouseButton, getControlPosition(e), getScreenPosition(e)));
131         if (e.getClickCount() == 2) {
132             handleEvent(new MouseDoubleClickedEvent(sender, e.getWhen(),
133                     MOUSE_ID, buttonStatus, getStateMask(e), mouseButton, getControlPosition(e), getScreenPosition(e)));
134         }
135     }
136
137
138     public void mouseReleased(MouseEvent e) {
139         //System.out.println("AWT mouse released: " + e);
140         int mouseButton = getMouseButton(e);
141         long holdTime = Long.MAX_VALUE;
142         if (mouseButton<=pressTime.length) 
143             holdTime = e.getWhen() - pressTime[mouseButton-1];
144
145         buttonStatus &=~ (1<<(mouseButton-1));  
146         MouseButtonReleasedEvent me = new MouseButtonReleasedEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), mouseButton, holdTime, getControlPosition(e), getScreenPosition(e));
147         handleEvent(me);
148     }
149
150
151     public void mouseDragged(MouseEvent e) {
152         MouseMovedEvent me = new MouseMovedEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e));
153         handleEvent(me);
154     }
155
156
157     public void mouseMoved(MouseEvent e) {
158         MouseMovedEvent me = new MouseMovedEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e));
159         handleEvent(me);
160     }
161
162
163     public void mouseWheelMoved(MouseWheelEvent e) {
164         int wheelRotation = 0;
165         if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) {
166             wheelRotation = -e.getUnitsToScroll();
167         } else {
168             wheelRotation = -e.getWheelRotation();
169         }
170         handleEvent(new MouseWheelMovedEvent(
171                 sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e),
172                 e.getScrollType(), e.getScrollAmount(), wheelRotation
173                 ));
174     }
175
176
177     public void mouseClicked(MouseEvent e) {
178     }
179
180
181     public void keyPressed(KeyEvent e) {
182         handleEvent(
183                 new KeyPressedEvent(sender, e.getWhen(), e.getKeyChar(), e.getKeyCode(), e.getModifiers()));
184     }
185
186
187     public void keyReleased(KeyEvent e) {
188         handleEvent(
189                 new KeyReleasedEvent(sender, e.getWhen(), e.getKeyChar(), e.getKeyCode(), e.getModifiers()));
190     }
191
192
193     public void keyTyped(KeyEvent e) {
194 //      System.out.println("keyTyped("+e+")");
195 //        handleEvent(
196 //                new KeyTypedEvent(sender, e.getWhen(), e.getKeyChar(), e.getKeyCode(), e.getModifiers()));
197     }
198
199
200     public void eventDispatched(AWTEvent event) {
201         if(event.getID() == KeyEvent.KEY_PRESSED) {
202             keyPressed((KeyEvent)event);
203         }
204         if(event.getID() == KeyEvent.KEY_RELEASED) {
205             keyReleased((KeyEvent)event);
206         }
207         if(event.getID() == KeyEvent.KEY_TYPED) {
208             keyTyped((KeyEvent)event);
209         }
210
211         if(event.getID() == MouseEvent.MOUSE_MOVED) {
212             mouseMoved((MouseEvent)event);
213         }
214         if(event.getID() == MouseEvent.MOUSE_DRAGGED) {
215             mouseDragged((MouseEvent)event);
216         }
217         if(event.getID() == MouseEvent.MOUSE_PRESSED) {
218             mousePressed((MouseEvent)event);
219         }
220         if(event.getID() == MouseEvent.MOUSE_RELEASED) {
221             mouseReleased((MouseEvent)event);
222         }
223         if(event.getID() == MouseEvent.MOUSE_CLICKED) {
224             mouseClicked((MouseEvent)event);
225         }
226         if(event.getID() == MouseEvent.MOUSE_WHEEL) {
227             mouseWheelMoved((MouseWheelEvent)event);
228         }
229         if(event.getID() == MouseEvent.MOUSE_ENTERED) {
230             mouseEntered((MouseEvent)event);
231         }
232         if(event.getID() == MouseEvent.MOUSE_EXITED) {
233             mouseExited((MouseEvent)event);
234         }
235     }
236 }