Event handling

Frank Benoit keinfarbton at googlemail.com
Fri Mar 21 13:32:41 PDT 2008


I think about how to do the event handling more D like, but also to 
avoid adding/changing code in the ported code.

The dwt from Shawn made this possible:

table.addListener(
	DWT.Selection,
	&myHandler,
	&myData
	);

+ use of delegates
+ optionally add data that is passed to the delegate
- data must an "Object"
- adds code into the dwt

Now i think about adding this new class template to dwt.widgets.Listener:

/// start of addition to dwt.widgets.Listener
class DgListenerT( T... ) : Listener {
     alias void delegate(Event, T) ADel;
     ADel dg;
     T t;
     public this( ADel dg, T t ){
         this.dg = dg;
         this.t = t;
     }
     public void handleEvent( Event e ){
         dg(e, t);
     }
}
alias DgListenerT!() DgListener;
/// end of addition to dwt.widgets.Listener


table.addListener(
	DWT.Selection,
	new DgListener( &myHandler )
	);
table.addListener(
	DWT.Selection,
	new DgListenerT!( int )( &myHandler, 23 )
	);

+ use of delegates
+ optionally add data that is passed to the delegate
+ data count and types are not fix
+ adds only additional class outside existing classes
+ no dwt internals need to be changed and maintained
- need heap allocate the DgListenerT instance

Are there more arguments pro/cons?
Would you prefer another solution?


More information about the Digitalmars-d-dwt mailing list