Mercurial > projects > dwt-linux
diff dwt/events/SelectionListener.d @ 315:21959e16bc1e
Improved Listeners access functions.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Tue, 16 Sep 2008 15:28:21 +0200 |
parents | 5899e0b43e5d |
children |
line wrap: on
line diff
--- a/dwt/events/SelectionListener.d Mon Sep 08 01:35:33 2008 +0200 +++ b/dwt/events/SelectionListener.d Tue Sep 16 15:28:21 2008 +0200 @@ -16,6 +16,9 @@ public import dwt.internal.DWTEventListener; public import dwt.events.SelectionEvent; +import tango.core.Traits; +import tango.core.Tuple; + /** * Classes which implement this interface provide methods * that deal with the events that are generated when selection @@ -34,6 +37,10 @@ */ public interface SelectionListener : DWTEventListener { + public enum { + SELECTION, + DEFAULTSELECTION + } /** * Sent when selection occurs in the control. * <p> @@ -63,3 +70,47 @@ */ public void widgetDefaultSelected(SelectionEvent e); } + + +/// DWT extension +private class _DgSelectionListenerT(Dg,T...) : SelectionListener { + + alias ParameterTupleOf!(Dg) DgArgs; + static assert( is(DgArgs == Tuple!(SelectionEvent,T)), + "Delegate args not correct: "~DgArgs.stringof~" vs. (Event,"~T.stringof~")" ); + + Dg dg; + T t; + int type; + + private this( int type, Dg dg, T t ){ + this.type = type; + this.dg = dg; + static if( T.length > 0 ){ + this.t = t; + } + } + + public void widgetSelected(SelectionEvent e){ + if( type is SelectionListener.SELECTION ){ + dg(e,t); + } + } + public void widgetDefaultSelected(SelectionEvent e){ + if( type is SelectionListener.DEFAULTSELECTION ){ + dg(e,t); + } + } +} + +SelectionListener dgSelectionListener( Dg, T... )( int type, Dg dg, T args ){ + return new _DgSelectionListenerT!( Dg, T )( type, dg, args ); +} + +SelectionListener dgSelectionListenerWidgetSelected( Dg, T... )( Dg dg, T args ){ + return dgSelectionListener( SelectionListener.SELECTION, dg, args ); +} +SelectionListener dgSelectionListenerWidgetDefaultSelected( Dg, T... )( Dg dg, T args ){ + return dgSelectionListener( SelectionListener.DEFAULTSELECTION, dg, args ); +} +