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 );
+}
+
+
+