Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: 9f30c8488884f75143a6fb4b52ea032a71c1bd50 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
/*******************************************************************************
 * Copyright (c) 2000, 2010 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.dnd;

import org.eclipse.swt.internal.SWTEventListener;

/**
 * The <code>DropTargetListener</code> class provides event notification to the application 
 * for DropTarget events.
 *
 * <p>As the user moves the cursor into, over and out of a Control that has been designated 
 * as a DropTarget, events indicate what operation can be performed and what data can be 
 * transferred if a drop where to occur at that point.
 * The application can respond to these events and change the type of data that will 
 * be dropped by modifying event.currentDataType, or change the operation that will be performed 
 * by modifying the event.detail field or stop any drop from happening on the current target
 * by setting the event.detail field to DND_DROP_NONE.</p>
 *
 * <p>When the user causes a drop to happen by releasing the mouse over a valid drop target, 
 * the application has one last chance to change the data type of the drop through the 
 * DropAccept event.  If the drop is still allowed, the DropAccept event is immediately 
 * followed by the Drop event.  In the Drop event, the application can still change the
 * operation that is performed but the data type is fixed.</p>
 * 
 * @see DropTargetEvent
 *
 */
public interface DropTargetListener extends SWTEventListener {
	
/**
 * The cursor has entered the drop target boundaries.
 *
 * <p>The following fields in the DropTargetEvent apply:
 * <ul>
 * <li>(in)widget
 * <li>(in)time
 * <li>(in)x
 * <li>(in)y
 * <li>(in)dataTypes
 * <li>(in,out)currentDataType
 * <li>(in)operations
 * <li>(in,out)detail
 * <li>(in,out)feedback
 * </ul></p>
 *
 * <p>The <code>operations</code> value is determined by the modifier keys pressed by the user.  
 * If no keys are pressed the <code>event.detail</code> field is set to DND.DROP_DEFAULT.  
 * If the application does not set the <code>event.detail</code> to something other 
 * than <code>DND.DROP_DEFAULT</code> the operation will be set to the platform defined standard 
 * default.</p>
 * 
 * <p>The <code>currentDataType</code> is determined by the first transfer agent specified in 
 * setTransfer() that matches a data type provided by the drag source.</p>
 * 
 * <p>It is possible to get a DragEnter event when the drag source does not provide any matching data.
 * In this case, the default operation is DND.DROP_NONE and the currentDataType is null.</p>
 * 
 * <p>The application can change the operation that will be performed by modifying the 
 * <code>detail</code> field but the choice must be one of the values in the <code>operations</code> 
 * field or DND.DROP_NONE.</p>
 * 
 * <p>The application can also change the type of data being requested by 
 * modifying the <code>currentDataTypes</code> field  but the value must be one of the values 
 * in the <code>dataTypes</code> list.</p>
 *
 * @param event  the information associated with the drag enter event
 * 
 * @see DropTargetEvent
 */
public void dragEnter(DropTargetEvent event);

/**
 * The cursor has left the drop target boundaries OR the drop has been cancelled OR the data 
 * is about to be dropped.
 *
 * <p>The following fields in the DropTargetEvent apply:
 * <ul>
 * <li>(in)widget
 * <li>(in)time
 * <li>(in)x
 * <li>(in)y
 * <li>(in)dataTypes
 * <li>(in)currentDataType
 * <li>(in)operations
 * <li>(in)detail
 * </ul></p>
 *
 * @param event  the information associated with the drag leave event
 *
 * @see DropTargetEvent
 */
public void dragLeave(DropTargetEvent event);

/**
 * The operation being performed has changed (usually due to the user changing the selected modifier key(s)
 * while dragging).
 *
 * <p>The following fields in the DropTargetEvent apply:
 * <ul>
 * <li>(in)widget
 * <li>(in)time
 * <li>(in)x
 * <li>(in)y
 * <li>(in)dataTypes
 * <li>(in,out)currentDataType
 * <li>(in)operations
 * <li>(in,out)detail
 * <li>(in,out)feedback
 * </ul></p>
 *
 * <p>The <code>operations</code> value is determined by the modifier keys pressed by the user.  
 * If no keys are pressed the <code>event.detail</code> field is set to DND.DROP_DEFAULT.  
 * If the application does not set the <code>event.detail</code> to something other than 
 * <code>DND.DROP_DEFAULT</code> the operation will be set to the platform defined standard default.</p>
 * 
 * <p>The <code>currentDataType</code> value is determined by the value assigned to 
 * <code>currentDataType</code> in previous dragEnter and dragOver calls.</p>
 * 
 * <p>The application can change the operation that will be performed by modifying the 
 * <code>detail</code> field but the choice must be one of the values in the <code>operations</code> 
 * field.</p>
 * 
 * <p>The application can also change the type of data being requested by modifying 
 * the <code>currentDataTypes</code> field  but the value must be one of the values in the 
 * <code>dataTypes</code> list.</p>
 *
 * @param event  the information associated with the drag operation changed event
 * 
 * @see DropTargetEvent
 */
public void dragOperationChanged(DropTargetEvent event);

/**
 * The cursor is moving over the drop target.
 *
 * <p>The following fields in the DropTargetEvent apply:
 * <ul>
 * <li>(in)widget
 * <li>(in)time
 * <li>(in)x
 * <li>(in)y
 * <li>(in)dataTypes
 * <li>(in,out)currentDataType
 * <li>(in)operations
 * <li>(in,out)detail
 * <li>(in,out)feedback
 * </ul></p>
 *
 * <p>The <code>operations</code> value is determined by the value assigned to 
 * <code>currentDataType</code> in previous dragEnter and dragOver calls.</p>
 * 
 * <p>The <code>currentDataType</code> value is determined by the value assigned to 
 * <code>currentDataType</code> in previous dragEnter and dragOver calls.</p>
 * 
 * <p>The application can change the operation that will be performed by modifying the 
 * <code>detail</code> field but the choice must be one of the values in the <code>operations</code> 
 * field.</p>
 * 
 * <p>The application can also change the type of data being requested by modifying the 
 * <code>currentDataTypes</code> field  but the value must be one of the values in the 
 * <code>dataTypes</code> list.</p>
 * 
 * <p>NOTE: At this point the <code>data</code> field is null.  On some platforms, it is possible 
 * to obtain the data being transferred before the transfer occurs but in most platforms this is 
 * not possible.  On those platforms where the data is available, the application can access the 
 * data as follows:</p>
 * 
 * <pre><code>
 * public void dragOver(DropTargetEvent event) {
 *       TextTransfer textTransfer = TextTransfer.getInstance();
 *       String data = (String)textTransfer.nativeToJava(event.currentDataType);
 *       if (data != null) {
 *           System.out.println("Data to be dropped is (Text)"+data);
 *       }
 * };
 * </code></pre>
 *
 * @param event  the information associated with the drag over event
 * 
 * @see DropTargetEvent
 */
public void dragOver(DropTargetEvent event);

/**
 * The data is being dropped.  The data field contains java format of the data being dropped.  
 * To determine the type of the data object, refer to the documentation for the Transfer subclass 
 * specified in event.currentDataType.
 *
 * <p>The following fields in DropTargetEvent apply:
 * <ul>
 * <li>(in)widget
 * <li>(in)time
 * <li>(in)x 
 * <li>(in)y
 * <li>(in,out)detail
 * <li>(in)currentDataType
 * <li>(in)data
 * </ul></p>
 *
 * <p>The application can refuse to perform the drop operation by setting the detail 
 * field to DND.DROP_NONE.</p>
 *
 * @param event the information associated with the drop event
 * 
 * @see DropTargetEvent
 */
public void drop(DropTargetEvent event);

/**
 * The drop is about to be performed.  
 * The drop target is given a last chance to change the nature of the drop.
 * 
 * <p>The following fields in the DropTargetEvent apply:
 * <ul>
 * <li>(in)widget
 * <li>(in)time
 * <li>(in)x
 * <li>(in)y
 * <li>(in)dataTypes
 * <li>(in,out)currentDataType
 * <li>(in)operations
 * <li>(in,out)detail
 * </ul></p>
 *
 * <p>The application can veto the drop by setting the <code>event.detail</code> field to 
 * <code>DND.DROP_NONE</code>.</p>
 *
 * <p>The application can change the operation that will be performed by modifying the 
 * <code>detail</code> field but the choice must be one of the values in the 
 * <code>operations</code> field.</p>
 * 
 * <p>The application can also change the type of data being requested by modifying the 
 * <code>currentDataTypes</code> field  but the value must be one of the values in the <
 * code>dataTypes</code> list.</p>
 *
 * @param event  the information associated with the drop accept event
 * 
 * @see DropTargetEvent
 */
public void dropAccept(DropTargetEvent event);

}

Back to the top