1 /******************************************************************************* 2 * Copyright (c) 2000, 2004 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.CTabFolder2Listener; 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 methods 28 * that deal with the events that are generated by the CTabFolder 29 * control. 30 * <p> 31 * After creating an instance of a class that : 32 * this interface it can be added to a CTabFolder using the 33 * <code>addCTabFolder2Listener</code> method and removed using 34 * the <code>removeCTabFolder2Listener</code> method. When 35 * events occurs in a CTabFolder the appropriate method 36 * will be invoked. 37 * </p> 38 * 39 * @see CTabFolder2Adapter 40 * @see CTabFolderEvent 41 * 42 * @since 3.0 43 */ 44 public interface CTabFolder2Listener : SWTEventListener { 45 public enum { 46 MINIMIZE, 47 MAXIMIZE, 48 SHOWLIST, 49 RESTORE, 50 CLOSE 51 } 52 53 /** 54 * Sent when the user clicks on the close button of an item in the CTabFolder. 55 * The item being closed is specified in the event.item field. 56 * Setting the event.doit field to false will stop the CTabItem from closing. 57 * When the CTabItem is closed, it is disposed. The contents of the 58 * CTabItem (see CTabItem.setControl) will be made not visible when 59 * the CTabItem is closed. 60 * 61 * @param event an event indicating the item being closed 62 */ 63 public void close(CTabFolderEvent event); 64 65 /** 66 * Sent when the user clicks on the minimize button of a CTabFolder. 67 * The state of the CTabFolder does not change automatically - it 68 * is up to the application to change the state of the CTabFolder 69 * in response to this event using CTabFolder.setMinimized(true). 70 * 71 * @param event an event containing information about the minimize 72 * 73 * @see CTabFolder#getMinimized() 74 * @see CTabFolder#setMinimized(bool) 75 * @see CTabFolder#setMinimizeVisible(bool) 76 */ 77 public void minimize(CTabFolderEvent event); 78 79 /** 80 * Sent when the user clicks on the maximize button of a CTabFolder. 81 * The state of the CTabFolder does not change automatically - it 82 * is up to the application to change the state of the CTabFolder 83 * in response to this event using CTabFolder.setMaximized(true). 84 * 85 * @param event an event containing information about the maximize 86 * 87 * @see CTabFolder#getMaximized() 88 * @see CTabFolder#setMaximized(bool) 89 * @see CTabFolder#setMaximizeVisible(bool) 90 */ 91 public void maximize(CTabFolderEvent event); 92 93 /** 94 * Sent when the user clicks on the restore button of a CTabFolder. 95 * This event is sent either to restore the CTabFolder from the 96 * minimized state or from the maximized state. To determine 97 * which restore is requested, use CTabFolder.getMinimized() or 98 * CTabFolder.getMaximized() to determine the current state. 99 * The state of the CTabFolder does not change automatically - it 100 * is up to the application to change the state of the CTabFolder 101 * in response to this event using CTabFolder.setMaximized(false) 102 * or CTabFolder.setMinimized(false). 103 * 104 * @param event an event containing information about the restore 105 * 106 * @see CTabFolder#getMinimized() 107 * @see CTabFolder#getMaximized() 108 * @see CTabFolder#setMinimized(bool) 109 * @see CTabFolder#setMinimizeVisible(bool) 110 * @see CTabFolder#setMaximized(bool) 111 * @see CTabFolder#setMaximizeVisible(bool) 112 */ 113 public void restore(CTabFolderEvent event); 114 115 /** 116 * Sent when the user clicks on the chevron button of the CTabFolder. 117 * A chevron appears in the CTabFolder when there are more tabs 118 * than can be displayed at the current widget size. To select a 119 * tab that is not currently visible, the user clicks on the 120 * chevron and selects a tab item from a list. By default, the 121 * CTabFolder provides a list of all the items that are not currently 122 * visible, however, the application can provide its own list by setting 123 * the event.doit field to <code>false</code> and displaying a selection list. 124 * 125 * @param event an event containing information about the show list 126 * 127 * @see CTabFolder#setSelection(CTabItem) 128 */ 129 public void showList(CTabFolderEvent event); 130 } 131 132 133 134 /// Helper class for the dgListener template function 135 private class _DgCTabFolder2ListenerT(Dg,T...) : CTabFolder2Listener { 136 137 version(Tango){ 138 alias ParameterTupleOf!(Dg) DgArgs; 139 static assert( is(DgArgs == Tuple!(CTabFolderEvent,T)), 140 "Delegate args not correct: "~DgArgs.stringof~" vs. (Event,"~T.stringof~")" ); 141 } else { // Phobos 142 alias ParameterTypeTuple!(Dg) DgArgs; 143 static assert( is(DgArgs == TypeTuple!(CTabFolderEvent,T)), 144 "Delegate args not correct: "~DgArgs.stringof~" vs. (Event,"~T.stringof~")" ); 145 } 146 147 Dg dg; 148 T t; 149 int type; 150 151 private this( int type, Dg dg, T t ){ 152 this.type = type; 153 this.dg = dg; 154 static if( T.length > 0 ){ 155 this.t = t; 156 } 157 } 158 159 void itemClosed( CTabFolderEvent e ){ 160 dg(e,t); 161 } 162 public void close(CTabFolderEvent e){ 163 if( type is CTabFolder2Listener.CLOSE ){ 164 dg(e,t); 165 } 166 } 167 public void minimize(CTabFolderEvent e){ 168 if( type is CTabFolder2Listener.MINIMIZE ){ 169 dg(e,t); 170 } 171 } 172 public void maximize(CTabFolderEvent e){ 173 if( type is CTabFolder2Listener.MAXIMIZE ){ 174 dg(e,t); 175 } 176 } 177 public void restore(CTabFolderEvent e){ 178 if( type is CTabFolder2Listener.RESTORE ){ 179 dg(e,t); 180 } 181 } 182 public void showList(CTabFolderEvent e){ 183 if( type is CTabFolder2Listener.SHOWLIST ){ 184 dg(e,t); 185 } 186 } 187 } 188 189 /++ 190 + dgListener creates a class implementing the Listener interface and delegating the call to 191 + handleEvent to the users delegate. This template function will store also additional parameters. 192 + 193 + Examle of usage: 194 + --- 195 + void handleTextEvent ( Event e, int inset ) { 196 + // ... 197 + } 198 + text.addListener (SWT.FocusOut, dgListener( &handleTextEvent, inset )); 199 + --- 200 +/ 201 CTabFolder2Listener dgCTabFolder2Listener( Dg, T... )( int type, Dg dg, T args ){ 202 return new _DgCTabFolder2ListenerT!( Dg, T )( type, dg, args ); 203 } 204 205 206