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.custom.CTabFolderListener;
14 
15 import org.eclipse.swt.internal.SWTEventListener;
16 import org.eclipse.swt.custom.CTabFolderEvent;
17 
18 version(Tango){
19     import tango.core.Traits;
20     import tango.core.Tuple;
21 } else { // Phobos
22     import std.traits;
23     import std.typetuple;
24 }
25 
26 /**
27  * Classes which implement this interface provide a method
28  * that deals with events generated in the CTabFolder.
29  * <p>
30  * After creating an instance of a class that :
31  * this interface it can be added to a CTabFolder using the
32  * <code>addCTabFolderListener</code> method and removed using
33  * the <code>removeCTabFolderListener</code> method. When a
34  * tab item is closed, the itemClosed method will be invoked.
35  * </p>
36  *
37  * @see CTabFolderEvent
38  */
39 public interface CTabFolderListener : SWTEventListener {
40 
41 /**
42  * Sent when the user clicks on the close button of an item in the CTabFolder.  The item being closed is specified
43  * in the event.item field. Setting the event.doit field to false will stop the CTabItem from closing.
44  * When the CTabItem is closed, it is disposed.  The contents of the CTabItem (see CTabItem.setControl) will be
45  * made not visible when the CTabItem is closed.
46  *
47  * @param event an event indicating the item being closed
48  *
49  * @see CTabItem#setControl
50  */
51 public void itemClosed(CTabFolderEvent event);
52 }
53 
54 
55 
56 /// Helper class for the dgListener template function
57 private class _DgCTabFolderListenerT(Dg,T...) : CTabFolderListener {
58 
59     version(Tango){
60         alias ParameterTupleOf!(Dg) DgArgs;
61         static assert( is(DgArgs == Tuple!(CTabFolderEvent,T)),
62                 "Delegate args not correct" );
63     } else { // Phobos
64         alias ParameterTypeTuple!(Dg) DgArgs;
65         static assert( is(DgArgs == TypeTuple!(CTabFolderEvent,T)),
66                 "Delegate args not correct" );
67     }
68 
69     Dg dg;
70     T  t;
71 
72     private this( Dg dg, T t ){
73         this.dg = dg;
74         static if( T.length > 0 ){
75             this.t = t;
76         }
77     }
78 
79     void itemClosed( CTabFolderEvent e ){
80         dg(e,t);
81     }
82 }
83 
84 /++
85  + dgListener creates a class implementing the Listener interface and delegating the call to
86  + handleEvent to the users delegate. This template function will store also additional parameters.
87  +
88  + Examle of usage:
89  + ---
90  + void handleTextEvent (Event e, int inset ) {
91  +     // ...
92  + }
93  + text.addListener (SWT.FocusOut, dgListener( &handleTextEvent, inset ));
94  + ---
95  +/
96 CTabFolderListener dgCTabFolderListener( Dg, T... )( Dg dg, T args ){
97     return new _DgCTabFolderListenerT!( Dg, T )( dg, args );
98 }
99 
100 
101