Mercurial > projects > dwt-win
changeset 216:48de87adead1
Add dgListener template function for the Listener class
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 17 May 2008 23:23:22 +0200 |
parents | 4436505b216f |
children | 8efa9bb96c53 |
files | dwt/widgets/Listener.d |
diffstat | 1 files changed, 45 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/dwt/widgets/Listener.d Sat May 17 23:23:08 2008 +0200 +++ b/dwt/widgets/Listener.d Sat May 17 23:23:22 2008 +0200 @@ -14,6 +14,9 @@ import dwt.widgets.Event; +import tango.core.Traits; +import tango.core.Tuple; + /** * Implementers of <code>Listener</code> provide a simple * <code>handleEvent()</code> method that is used internally @@ -53,3 +56,45 @@ */ void handleEvent (Event event); } + + +/// Helper class for the dgListener template function +private class _DgListenerT(Dg,T...) : Listener { + + alias ParameterTupleOf!(Dg) DgArgs; + static assert( is(DgArgs == Tuple!(Event,T)), + "Delegate args not correct" ); + + Dg dg; + T t; + + private this( Dg dg, T t ){ + this.dg = dg; + static if( T.length > 0 ){ + this.t = t; + } + } + + void handleEvent( Event e ){ + dg(e,t); + } +} + +/++ + + dgListener creates a class implementing the Listener interface and delegating the call to + + handleEvent to the users delegate. This template function will store also additional parameters. + + + + Examle of usage: + + --- + + void handleTextEvent (Event e, int inset ) { + + // ... + + } + + text.addListener (DWT.FocusOut, dgListener( &handleTextEvent, inset )); + + --- + +/ +Listener dgListener( Dg, T... )( Dg dg, T args ){ + return new _DgListenerT!( Dg, T )( dg, args ); +} + + +