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