Mercurial > projects > dwt-win
annotate dwt/widgets/Listener.d @ 311:02332a154347
Improved Listeners access functions.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Tue, 16 Sep 2008 15:19:38 +0200 |
parents | 48de87adead1 |
children |
rev | line source |
---|---|
31
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 /******************************************************************************* |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2 * Copyright (c) 2000, 2005 IBM Corporation and others. |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * All rights reserved. This program and the accompanying materials |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 * which accompanies this distribution, and is available at |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 * http://www.eclipse.org/legal/epl-v10.html |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 * |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 * Contributors: |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 * IBM Corporation - initial API and implementation |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
10 * Port to the D programming language: |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 * Frank Benoit <benoit@tionex.de> |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 *******************************************************************************/ |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 module dwt.widgets.Listener; |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
15 import dwt.widgets.Event; |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
16 |
216
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
17 import tango.core.Traits; |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
18 import tango.core.Tuple; |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
19 |
31
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 /** |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
21 * Implementers of <code>Listener</code> provide a simple |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 * <code>handleEvent()</code> method that is used internally |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 * by DWT to dispatch events. |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 * <p> |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 * After creating an instance of a class that implements this interface |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 * it can be added to a widget using the |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 * <code>addListener(int eventType, Listener handler)</code> method and |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 * removed using the |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 * <code>removeListener (int eventType, Listener handler)</code> method. |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 * When the specified event occurs, <code>handleEvent(...)</code> will |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 * be sent to the instance. |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 * </p> |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 * <p> |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 * Classes which implement this interface are described within DWT as |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 * providing the <em>untyped listener</em> API. Typically, widgets will |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 * also provide a higher-level <em>typed listener</em> API, that is based |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 * on the standard <code>java.util.EventListener</code> pattern. |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 * </p> |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 * <p> |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 * Note that, since all internal DWT event dispatching is based on untyped |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 * listeners, it is simple to build subsets of DWT for use on memory |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 * constrained, small footprint devices, by removing the classes and |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 * methods which implement the typed listener API. |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 * </p> |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 * |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 * @see Widget#addListener |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 * @see java.util.EventListener |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 * @see dwt.events |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 */ |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 public interface Listener { |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 /** |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 * Sent when an event that the receiver has registered for occurs. |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 * |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 * @param event the event which occurred |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
56 */ |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
57 void handleEvent (Event event); |
92c102dd64a3
Added all widgets modules as dummy. Most modules of accessible are equal to the linux version, except Accessible.
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
58 } |
216
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
59 |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
60 |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
61 /// Helper class for the dgListener template function |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
62 private class _DgListenerT(Dg,T...) : Listener { |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
63 |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
64 alias ParameterTupleOf!(Dg) DgArgs; |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
65 static assert( is(DgArgs == Tuple!(Event,T)), |
311
02332a154347
Improved Listeners access functions.
Frank Benoit <benoit@tionex.de>
parents:
216
diff
changeset
|
66 "Delegate args not correct: delegate args: ("~DgArgs.stringof~") vs. passed args: ("~Tuple!(Event,T).stringof~")" ); |
216
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
67 |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
68 Dg dg; |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
69 T t; |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
70 |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
71 private this( Dg dg, T t ){ |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
72 this.dg = dg; |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
73 static if( T.length > 0 ){ |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
74 this.t = t; |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
75 } |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
76 } |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
77 |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
78 void handleEvent( Event e ){ |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
79 dg(e,t); |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
80 } |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
81 } |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
82 |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
83 /++ |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
84 + dgListener creates a class implementing the Listener interface and delegating the call to |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
85 + handleEvent to the users delegate. This template function will store also additional parameters. |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
86 + |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
87 + Examle of usage: |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
88 + --- |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
89 + void handleTextEvent (Event e, int inset ) { |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
90 + // ... |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
91 + } |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
92 + text.addListener (DWT.FocusOut, dgListener( &handleTextEvent, inset )); |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
93 + --- |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
94 +/ |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
95 Listener dgListener( Dg, T... )( Dg dg, T args ){ |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
96 return new _DgListenerT!( Dg, T )( dg, args ); |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
97 } |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
98 |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
99 |
48de87adead1
Add dgListener template function for the Listener class
Frank Benoit <benoit@tionex.de>
parents:
31
diff
changeset
|
100 |