# HG changeset patch # User Frank Benoit # Date 1211059402 -7200 # Node ID 48de87adead10b798dcf69d7cd2f9e89af7a480e # Parent 4436505b216fca768d71b04328cca9d11f8e6308 Add dgListener template function for the Listener class diff -r 4436505b216f -r 48de87adead1 dwt/widgets/Listener.d --- 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 Listener provide a simple * handleEvent() 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 ); +} + + +