1 /*******************************************************************************
2  * Copyright (c) 2000, 2005 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  * Port to the D programming language:
11  *     Frank Benoit <benoit@tionex.de>
12  *******************************************************************************/
13 module org.eclipse.swt.events.SelectionListener;
14 
15 
16 public import org.eclipse.swt.internal.SWTEventListener;
17 public import org.eclipse.swt.events.SelectionEvent;
18 
19 version(Tango){
20     import tango.core.Traits;
21     import tango.core.Tuple;
22 } else { // Phobos
23     import std.traits;
24     import std.typetuple;
25 }
26 
27 /**
28  * Classes which implement this interface provide methods
29  * that deal with the events that are generated when selection
30  * occurs in a control.
31  * <p>
32  * After creating an instance of a class that :
33  * this interface it can be added to a control using the
34  * <code>addSelectionListener</code> method and removed using
35  * the <code>removeSelectionListener</code> method. When
36  * selection occurs in a control the appropriate method
37  * will be invoked.
38  * </p>
39  *
40  * @see SelectionAdapter
41  * @see SelectionEvent
42  */
43 public interface SelectionListener : SWTEventListener {
44 
45     public enum {
46         SELECTION,
47         DEFAULTSELECTION
48     }
49 /**
50  * Sent when selection occurs in the control.
51  * <p>
52  * For example, selection occurs in a List when the user selects
53  * an item or items with the keyboard or mouse.  On some platforms,
54  * the event occurs when a mouse button or key is pressed.  On others,
55  * it happens when the mouse or key is released.  The exact key or
56  * mouse gesture that causes this event is platform specific.
57  * </p>
58  *
59  * @param e an event containing information about the selection
60  */
61 public void widgetSelected(SelectionEvent e);
62 
63 /**
64  * Sent when default selection occurs in the control.
65  * <p>
66  * For example, on some platforms default selection occurs in a List
67  * when the user double-clicks an item or types return in a Text.
68  * On some platforms, the event occurs when a mouse button or key is
69  * pressed.  On others, it happens when the mouse or key is released.
70  * The exact key or mouse gesture that causes this event is platform
71  * specific.
72  * </p>
73  *
74  * @param e an event containing information about the default selection
75  */
76 public void widgetDefaultSelected(SelectionEvent e);
77 }
78 
79 
80 /// SWT extension
81 private class _DgSelectionListenerT(Dg,T...) : SelectionListener {
82 
83     version(Tango){
84         alias ParameterTupleOf!(Dg) DgArgs;
85         static assert( is(DgArgs == Tuple!(SelectionEvent,T)),
86                 "Delegate args not correct: "~DgArgs.stringof~" vs. (Event,"~T.stringof~")" );
87     } else { // Phobos
88         alias ParameterTypeTuple!(Dg) DgArgs;
89         static assert( is(DgArgs == TypeTuple!(SelectionEvent,T)),
90                 "Delegate args not correct: "~DgArgs.stringof~" vs. (Event,"~T.stringof~")" );
91     }
92 
93     Dg dg;
94     T  t;
95     int type;
96 
97     private this( int type, Dg dg, T t ){
98         this.type = type;
99         this.dg = dg;
100         static if( T.length > 0 ){
101             this.t = t;
102         }
103     }
104 
105     public void widgetSelected(SelectionEvent e){
106         if( type is SelectionListener.SELECTION ){
107             dg(e,t);
108         }
109     }
110     public void widgetDefaultSelected(SelectionEvent e){
111         if( type is SelectionListener.DEFAULTSELECTION ){
112             dg(e,t);
113         }
114     }
115 }
116 
117 SelectionListener dgSelectionListener( Dg, T... )( int type, Dg dg, T args ){
118     return new _DgSelectionListenerT!( Dg, T )( type, dg, args );
119 }
120 
121 SelectionListener dgSelectionListenerWidgetSelected( Dg, T... )( Dg dg, T args ){
122     return dgSelectionListener( SelectionListener.SELECTION, dg, args );
123 }
124 SelectionListener dgSelectionListenerWidgetDefaultSelected( Dg, T... )( Dg dg, T args ){
125     return dgSelectionListener( SelectionListener.DEFAULTSELECTION, dg, args );
126 }
127