# HG changeset patch # User Frank Benoit # Date 1211059331 -7200 # Node ID 84629474b5ec0220636e9f9934e9561168495ff6 # Parent 448eacc3a526bb1bd8808a0a0a2690f049449b4a Add dgListener template function for the Listener class diff -r 448eacc3a526 -r 84629474b5ec dwt/widgets/Listener.d --- a/dwt/widgets/Listener.d Sat May 17 23:21:33 2008 +0200 +++ b/dwt/widgets/Listener.d Sat May 17 23:22:11 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,48 @@ */ 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 ); +} + + + + + + +