1 /*******************************************************************************
2  * Copyright (c) 2000, 2008 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  * Port to the D programming language:
11  *     Frank Benoit <benoit@tionex.de>
12  *******************************************************************************/
13 module org.eclipse.swt.widgets.TypedListener;
14 
15 import java.lang.all;
16 
17 
18 import org.eclipse.swt.internal.SWTEventListener;
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.widgets.Listener;
21 import org.eclipse.swt.widgets.Event;
22 import org.eclipse.swt.events.ArmEvent;
23 import org.eclipse.swt.events.ArmListener;
24 import org.eclipse.swt.events.ControlEvent;
25 import org.eclipse.swt.events.ControlListener;
26 import org.eclipse.swt.events.DisposeEvent;
27 import org.eclipse.swt.events.DisposeListener;
28 import org.eclipse.swt.events.DragDetectEvent;
29 import org.eclipse.swt.events.DragDetectListener;
30 import org.eclipse.swt.events.ExpandEvent;
31 import org.eclipse.swt.events.ExpandListener;
32 import org.eclipse.swt.events.FocusEvent;
33 import org.eclipse.swt.events.FocusListener;
34 import org.eclipse.swt.events.HelpEvent;
35 import org.eclipse.swt.events.HelpListener;
36 import org.eclipse.swt.events.KeyEvent;
37 import org.eclipse.swt.events.KeyListener;
38 import org.eclipse.swt.events.MenuEvent;
39 import org.eclipse.swt.events.MenuListener;
40 import org.eclipse.swt.events.MenuDetectEvent;
41 import org.eclipse.swt.events.MenuDetectListener;
42 import org.eclipse.swt.events.ModifyEvent;
43 import org.eclipse.swt.events.ModifyListener;
44 import org.eclipse.swt.events.MouseEvent;
45 import org.eclipse.swt.events.MouseListener;
46 import org.eclipse.swt.events.MouseMoveListener;
47 import org.eclipse.swt.events.MouseTrackListener;
48 import org.eclipse.swt.events.MouseWheelListener;
49 import org.eclipse.swt.events.PaintEvent;
50 import org.eclipse.swt.events.PaintListener;
51 import org.eclipse.swt.events.SelectionEvent;
52 import org.eclipse.swt.events.SelectionListener;
53 import org.eclipse.swt.events.ShellEvent;
54 import org.eclipse.swt.events.ShellListener;
55 import org.eclipse.swt.events.TraverseEvent;
56 import org.eclipse.swt.events.TraverseListener;
57 import org.eclipse.swt.events.TreeEvent;
58 import org.eclipse.swt.events.TreeListener;
59 import org.eclipse.swt.events.VerifyEvent;
60 import org.eclipse.swt.events.VerifyListener;
61 import org.eclipse.swt.graphics.GC;
62 
63 
64 /**
65  * Instances of this class are <em>internal SWT implementation</em>
66  * objects which provide a mapping between the typed and untyped
67  * listener mechanisms that SWT supports.
68  * <p>
69  * <b>IMPORTANT:</b> This class is <em>not</em> part of the SWT
70  * public API. It is marked public only so that it can be shared
71  * within the packages provided by SWT. It should never be
72  * referenced from application code.
73  * </p>
74  *
75  * @see Listener
76  * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
77  */
78 public class TypedListener : Listener {
79 
80     /**
81      * The receiver's event listener
82      */
83     protected SWTEventListener eventListener;
84 
85 /**
86  * Constructs a new instance of this class for the given event listener.
87  * <p>
88  * <b>IMPORTANT:</b> This method is <em>not</em> part of the SWT
89  * public API. It is marked public only so that it can be shared
90  * within the packages provided by SWT. It should never be
91  * referenced from application code.
92  * </p>
93  *
94  * @param listener the event listener to store in the receiver
95  */
96 public this (SWTEventListener listener) {
97     eventListener = listener;
98 }
99 
100 /**
101  * Returns the receiver's event listener.
102  * <p>
103  * <b>IMPORTANT:</b> This method is <em>not</em> part of the SWT
104  * public API. It is marked public only so that it can be shared
105  * within the packages provided by SWT. It should never be
106  * referenced from application code.
107  * </p>
108  *
109  * @return the receiver's event listener
110  */
111 public SWTEventListener getEventListener () {
112     return eventListener;
113 }
114 
115 /**
116  * Handles the given event.
117  * <p>
118  * <b>IMPORTANT:</b> This method is <em>not</em> part of the SWT
119  * public API. It is marked public only so that it can be shared
120  * within the packages provided by SWT. It should never be
121  * referenced from application code.
122  * </p>
123  * @param e the event to handle
124  */
125 public void handleEvent (Event e) {
126     switch (e.type) {
127         case SWT.Activate: {
128             (cast(ShellListener) eventListener).shellActivated(new ShellEvent(e));
129             break;
130         }
131         case SWT.Arm: {
132             (cast(ArmListener) eventListener).widgetArmed (new ArmEvent (e));
133             break;
134         }
135         case SWT.Close: {
136             /* Fields set by Decorations */
137             ShellEvent event = new ShellEvent (e);
138             (cast(ShellListener) eventListener).shellClosed(event);
139             e.doit = event.doit;
140             break;
141         }
142         case SWT.Collapse: {
143             if ( auto l = cast(TreeListener)eventListener ) {
144                 l.treeCollapsed(new TreeEvent(e));
145             } else {
146                 (cast(ExpandListener) eventListener).itemCollapsed(new ExpandEvent(e));
147             }
148             break;
149         }
150         case SWT.Deactivate: {
151             (cast(ShellListener) eventListener).shellDeactivated(new ShellEvent(e));
152             break;
153         }
154         case SWT.Deiconify: {
155             (cast(ShellListener) eventListener).shellDeiconified(new ShellEvent(e));
156             break;
157         }
158         case SWT.DefaultSelection: {
159             (cast(SelectionListener)eventListener).widgetDefaultSelected(new SelectionEvent(e));
160             break;
161         }
162         case SWT.Dispose: {
163             (cast(DisposeListener) eventListener).widgetDisposed(new DisposeEvent(e));
164             break;
165         }
166         case SWT.DragDetect: {
167             (cast(DragDetectListener) eventListener).dragDetected(new DragDetectEvent(e));
168             break;
169         }
170         case SWT.Expand: {
171             if (auto l = cast(TreeListener)eventListener ) {
172                 l.treeExpanded(new TreeEvent(e));
173             } else {
174                 (cast(ExpandListener) eventListener).itemExpanded(new ExpandEvent(e));
175             }
176             break;
177         }
178         case SWT.FocusIn: {
179             (cast(FocusListener) eventListener).focusGained(new FocusEvent(e));
180             break;
181         }
182         case SWT.FocusOut: {
183             (cast(FocusListener) eventListener).focusLost(new FocusEvent(e));
184             break;
185         }
186         case SWT.Help: {
187             (cast(HelpListener) eventListener).helpRequested (new HelpEvent (e));
188             break;
189         }
190         case SWT.Hide: {
191             (cast(MenuListener) eventListener).menuHidden(new MenuEvent(e));
192             break;
193         }
194         case SWT.Iconify: {
195             (cast(ShellListener) eventListener).shellIconified(new ShellEvent(e));
196             break;
197         }
198         case SWT.KeyDown: {
199             /* Fields set by Control */
200             KeyEvent event = new KeyEvent(e);
201             (cast(KeyListener) eventListener).keyPressed(event);
202             e.doit = event.doit;
203             break;
204         }
205         case SWT.KeyUp: {
206             /* Fields set by Control */
207             KeyEvent event = new KeyEvent(e);
208             (cast(KeyListener) eventListener).keyReleased(event);
209             e.doit = event.doit;
210             break;
211         }
212         case SWT.Modify: {
213             (cast(ModifyListener) eventListener).modifyText(new ModifyEvent(e));
214             break;
215         }
216         case SWT.MenuDetect: {
217             MenuDetectEvent event = new MenuDetectEvent(e);
218             (cast(MenuDetectListener) eventListener).menuDetected(event);
219             e.x = event.x;
220             e.y = event.y;
221             e.doit = event.doit;
222             break;
223         }
224         case SWT.MouseDown: {
225             (cast(MouseListener) eventListener).mouseDown(new MouseEvent(e));
226             break;
227         }
228         case SWT.MouseDoubleClick: {
229             (cast(MouseListener) eventListener).mouseDoubleClick(new MouseEvent(e));
230             break;
231         }
232         case SWT.MouseEnter: {
233             (cast(MouseTrackListener) eventListener).mouseEnter (new MouseEvent (e));
234             break;
235         }
236         case SWT.MouseExit: {
237             (cast(MouseTrackListener) eventListener).mouseExit (new MouseEvent (e));
238             break;
239         }
240         case SWT.MouseHover: {
241             (cast(MouseTrackListener) eventListener).mouseHover (new MouseEvent (e));
242             break;
243         }
244         case SWT.MouseMove: {
245             (cast(MouseMoveListener) eventListener).mouseMove(new MouseEvent(e));
246             return;
247         }
248         case SWT.MouseWheel: {
249             (cast(MouseWheelListener) eventListener).mouseScrolled(new MouseEvent(e));
250             return;
251         }
252         case SWT.MouseUp: {
253             (cast(MouseListener) eventListener).mouseUp(new MouseEvent(e));
254             break;
255         }
256         case SWT.Move: {
257             (cast(ControlListener) eventListener).controlMoved(new ControlEvent(e));
258             break;
259         }
260         case SWT.Paint: {
261             /* Fields set by Control */
262             PaintEvent event = new PaintEvent (e);
263             (cast(PaintListener) eventListener).paintControl (event);
264             e.gc = event.gc;
265             break;
266         }
267         case SWT.Resize: {
268             (cast(ControlListener) eventListener).controlResized(new ControlEvent(e));
269             break;
270         }
271         case SWT.Selection: {
272             /* Fields set by Sash */
273             SelectionEvent event = new SelectionEvent (e);
274             (cast(SelectionListener) eventListener).widgetSelected (event);
275             e.x = event.x;
276             e.y = event.y;
277             e.doit = event.doit;
278             break;
279         }
280         case SWT.Show: {
281             (cast(MenuListener) eventListener).menuShown(new MenuEvent(e));
282             break;
283         }
284         case SWT.Traverse: {
285             /* Fields set by Control */
286             TraverseEvent event = new TraverseEvent (e);
287             (cast(TraverseListener) eventListener).keyTraversed (event);
288             e.detail = event.detail;
289             e.doit = event.doit;
290             break;
291         }
292         case SWT.Verify: {
293             /* Fields set by Text, RichText */
294             VerifyEvent event = new VerifyEvent (e);
295             (cast(VerifyListener) eventListener).verifyText (event);
296             e.text = event.text;
297             e.doit = event.doit;
298             break;
299         }
300         default:
301     }
302 }
303 
304 }