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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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