annotate dwt/dnd/DropTarget.d @ 122:2e671fa40eec

Ported dwt.dnd, dwt.opengl, dwt.printing and dwt.program
author Jacob Carlborg <doob@me.com>
date Wed, 31 Dec 2008 21:01:13 +0100
parents a2d82e6fd054
children 07399639c0c8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
1 /*******************************************************************************
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
2 * Copyright (c) 2000, 2008 IBM Corporation and others.
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
7 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
8 * Contributors:
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
10 *
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
11 * Port to the D programming language:
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
12 * Jacob Carlborg <doob@me.com>
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
13 *******************************************************************************/
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
14 module dwt.dnd.DropTarget;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
15
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
16 import dwt.dwthelper.utils;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
17
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
18 import dwt.DWT;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
19 import dwt.DWTError;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
20 import dwt.DWTException;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
21 import dwt.internal.cocoa.NSApplication;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
22 import dwt.internal.cocoa.NSArray;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
23 import dwt.internal.cocoa.NSCursor;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
24 import dwt.internal.cocoa.NSEvent;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
25 import dwt.internal.cocoa.NSMutableArray;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
26 import dwt.internal.cocoa.NSObject;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
27 import dwt.internal.cocoa.NSPasteboard;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
28 import dwt.internal.cocoa.NSPoint;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
29 import dwt.internal.cocoa.NSRect;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
30 import dwt.internal.cocoa.NSScreen;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
31 import dwt.internal.cocoa.NSString;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
32 import dwt.internal.cocoa.NSURL;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
33 import dwt.internal.cocoa.OS;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
34 import dwt.internal.cocoa.id;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
35 import dwt.widgets.Control;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
36 import dwt.widgets.Display;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
37 import dwt.widgets.Event;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
38 import dwt.widgets.Listener;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
39 import dwt.widgets.Table;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
40 import dwt.widgets.Tree;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
41 import dwt.widgets.Widget;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
42
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
43 import tango.core.Thread;
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
44
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
45 import dwt.dnd.DND;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
46 import dwt.dnd.DNDEvent;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
47 import dwt.dnd.DNDListener;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
48 import dwt.dnd.DropTargetEffect;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
49 import dwt.dnd.DropTargetListener;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
50 import dwt.dnd.TableDropTargetEffect;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
51 import dwt.dnd.Transfer;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
52 import dwt.dnd.TransferData;
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
53 import dwt.dnd.TreeDropTargetEffect;
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
54 import dwt.dwthelper.array;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
55 import dwt.internal.objc.cocoa.Cocoa;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
56 import objc = dwt.internal.objc.runtime;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
57
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
58 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
59 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
60 * Class <code>DropTarget</code> defines the target object for a drag and drop transfer.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
61 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
62 * IMPORTANT: This class is <em>not</em> intended to be subclassed.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
63 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
64 * <p>This class identifies the <code>Control</code> over which the user must position the cursor
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
65 * in order to drop the data being transferred. It also specifies what data types can be dropped on
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
66 * this control and what operations can be performed. You may have several DropTragets in an
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
67 * application but there can only be a one to one mapping between a <code>Control</code> and a <code>DropTarget</code>.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
68 * The DropTarget can receive data from within the same application or from other applications
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
69 * (such as text dragged from a text editor like Word).</p>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
70 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
71 * <code><pre>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
72 * int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
73 * Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
74 * DropTarget target = new DropTarget(label, operations);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
75 * target.setTransfer(types);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
76 * </code></pre>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
77 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
78 * <p>The application is notified of data being dragged over this control and of when a drop occurs by
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
79 * implementing the interface <code>DropTargetListener</code> which uses the class
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
80 * <code>DropTargetEvent</code>. The application can modify the type of drag being performed
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
81 * on this Control at any stage of the drag by modifying the <code>event.detail</code> field or the
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
82 * <code>event.currentDataType</code> field. When the data is dropped, it is the responsibility of
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
83 * the application to copy this data for its own purposes.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
84 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
85 * <code><pre>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
86 * target.addDropListener (new DropTargetListener() {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
87 * public void dragEnter(DropTargetEvent event) {};
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
88 * public void dragOver(DropTargetEvent event) {};
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
89 * public void dragLeave(DropTargetEvent event) {};
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
90 * public void dragOperationChanged(DropTargetEvent event) {};
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
91 * public void dropAccept(DropTargetEvent event) {}
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
92 * public void drop(DropTargetEvent event) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
93 * // A drop has occurred, copy over the data
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
94 * if (event.data is null) { // no data to copy, indicate failure in event.detail
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
95 * event.detail = DND.DROP_NONE;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
96 * return;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
97 * }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
98 * label.setText ((String) event.data); // data copied to label text
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
99 * }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
100 * });
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
101 * </pre></code>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
102 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
103 * <dl>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
104 * <dt><b>Styles</b></dt> <dd>DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK</dd>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
105 * <dt><b>Events</b></dt> <dd>DND.DragEnter, DND.DragLeave, DND.DragOver, DND.DragOperationChanged,
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
106 * DND.DropAccept, DND.Drop </dd>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
107 * </dl>
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
108 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
109 * @see <a href="http://www.eclipse.org/swt/snippets/#dnd">Drag and Drop snippets</a>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
110 * @see <a href="http://www.eclipse.org/swt/examples.php">DWT Example: DNDExample</a>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
111 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
112 */
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
113 public class DropTarget : Widget {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
114
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
115 static objc.IMP proc2Args, proc3Args;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
116
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
117 static this () {
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
118 proc2Args = cast(objc.IMP) &dropTargetProc2;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
119 proc3Args = cast(objc.IMP) &dropTargetProc3;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
120 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
121
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
122 Control control;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
123 Listener controlListener;
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
124 Transfer[] transferAgents;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
125 DropTargetEffect dropEffect;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
126 int feedback = DND.FEEDBACK_NONE;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
127
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
128 // Track application selections
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
129 TransferData selectedDataType;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
130 int selectedOperation;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
131
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
132 // workaround - There is no event for "operation changed" so track operation based on key state
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
133 int keyOperation = -1;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
134
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
135 static const String DEFAULT_DROP_TARGET_EFFECT = "DEFAULT_DROP_TARGET_EFFECT"; //$NON-NLS-1$
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
136
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
137 void addDragHandlers() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
138 // Our strategy here is to dynamically add methods to the control's class that are required
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
139 // by NSDraggingDestination. Then, when setTransfer is called, we just register
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
140 // the types with the Control's NSView and AppKit will call the methods in the protocol
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
141 // when a drag goes over the view.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
142
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
143 objc.Class cls = OS.object_getClass(control.view.id);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
144
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
145 if (cls is null) {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
146 DND.error(DND.ERROR_CANNOT_INIT_DROP);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
147 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
148
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
149 // If we already added it, no need to do it again.
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
150 objc.IMP procPtr = OS.class_getMethodImplementation(cls, OS.sel_draggingEnded_);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
151 if (procPtr is proc3Args) return;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
152
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
153 // Add the NSDraggingDestination callbacks
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
154 OS.class_addMethod(cls, OS.sel_draggingEntered_, proc3Args, "@:@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
155 OS.class_addMethod(cls, OS.sel_draggingUpdated_, proc3Args, "@:@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
156 OS.class_addMethod(cls, OS.sel_draggingExited_, proc3Args, "@:@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
157 OS.class_addMethod(cls, OS.sel_performDragOperation_, proc3Args, "@:@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
158 OS.class_addMethod(cls, OS.sel_wantsPeriodicDraggingUpdates, proc2Args, "@:");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
159 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
160
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
161 /**
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
162 * Adds the listener to the collection of listeners who will
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
163 * be notified when a drag and drop operation is in progress, by sending
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
164 * it one of the messages defined in the <code>DropTargetListener</code>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
165 * interface.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
166 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
167 * <p><ul>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
168 * <li><code>dragEnter</code> is called when the cursor has entered the drop target boundaries
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
169 * <li><code>dragLeave</code> is called when the cursor has left the drop target boundaries and just before
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
170 * the drop occurs or is cancelled.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
171 * <li><code>dragOperationChanged</code> is called when the operation being performed has changed
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
172 * (usually due to the user changing the selected modifier key(s) while dragging)
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
173 * <li><code>dragOver</code> is called when the cursor is moving over the drop target
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
174 * <li><code>dropAccept</code> is called just before the drop is performed. The drop target is given
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
175 * the chance to change the nature of the drop or veto the drop by setting the <code>event.detail</code> field
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
176 * <li><code>drop</code> is called when the data is being dropped
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
177 * </ul></p>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
178 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
179 * @param listener the listener which should be notified
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
180 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
181 * @exception IllegalArgumentException <ul>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
182 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
183 * </ul>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
184 * @exception DWTException <ul>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
185 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
186 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
187 * </ul>
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
188 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
189 * @see DropTargetListener
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
190 * @see #getDropListeners
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
191 * @see #removeDropListener
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
192 * @see DropTargetEvent
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
193 */
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
194 public void addDropListener(DropTargetListener listener) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
195 if (listener is null) DND.error (DWT.ERROR_NULL_ARGUMENT);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
196 DNDListener typedListener = new DNDListener (listener);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
197 typedListener.dndWidget = this;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
198 addListener (DND.DragEnter, typedListener);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
199 addListener (DND.DragLeave, typedListener);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
200 addListener (DND.DragOver, typedListener);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
201 addListener (DND.DragOperationChanged, typedListener);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
202 addListener (DND.Drop, typedListener);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
203 addListener (DND.DropAccept, typedListener);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
204 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
205
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
206 static int checkStyle (int style) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
207 if (style is DWT.NONE) return DND.DROP_MOVE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
208 return style;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
209 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
210
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
211 protected void checkSubclass () {
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
212 String name = this.classinfo.name;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
213 String validName = DropTarget.classinfo.name;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
214 if (!validName.equals(name)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
215 DND.error (DWT.ERROR_INVALID_SUBCLASS);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
216 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
217 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
218
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
219 int draggingEntered(NSObject sender) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
220 selectedDataType = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
221 selectedOperation = 0;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
222
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
223 DNDEvent event = new DNDEvent();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
224 if (!setEventData(sender, event)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
225 keyOperation = -1;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
226 if (OS.PTR_SIZEOF is 4) OS.SetThemeCursor(OS.kThemeNotAllowedCursor);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
227 return OS.NSDragOperationNone;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
228 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
229
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
230 int allowedOperations = event.operations;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
231 TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
232 System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, allowedDataTypes.length);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
233
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
234 notifyListeners(DND.DragEnter, event);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
235
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
236 if (event.detail is DND.DROP_DEFAULT) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
237 event.detail = (allowedOperations & DND.DROP_MOVE) !is 0 ? DND.DROP_MOVE : DND.DROP_NONE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
238 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
239
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
240 selectedDataType = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
241 for (int i = 0; i < allowedDataTypes.length; i++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
242 if (allowedDataTypes[i].type is event.dataType.type) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
243 selectedDataType = allowedDataTypes[i];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
244 break;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
245 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
246 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
247
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
248 selectedOperation = DND.DROP_NONE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
249 if (selectedDataType !is null && (allowedOperations & event.detail) !is 0) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
250 selectedOperation = event.detail;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
251 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
252
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
253 int osOperation = opToOsOp(selectedOperation);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
254
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
255 if (OS.PTR_SIZEOF is 4) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
256 switch (selectedOperation) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
257 case DND.DROP_COPY:
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
258 OS.SetThemeCursor(OS.kThemeCopyArrowCursor);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
259 break;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
260 case DND.DROP_LINK:
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
261 OS.SetThemeCursor(OS.kThemeAliasArrowCursor);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
262 break;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
263 case DND.DROP_MOVE:
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
264 NSCursor.arrowCursor().set();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
265 break;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
266 default:
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
267 OS.SetThemeCursor(OS.kThemeNotAllowedCursor);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
268 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
269 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
270 return osOperation;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
271 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
272
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
273 void draggingExited(NSObject sender) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
274 NSCursor.arrowCursor().set();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
275 if (keyOperation is -1) return;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
276 keyOperation = -1;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
277
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
278 DNDEvent event = new DNDEvent();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
279 event.widget = this;
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
280 event.time = cast(int)System.currentTimeMillis();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
281 event.detail = DND.DROP_NONE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
282 notifyListeners(DND.DragLeave, event);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
283 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
284
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
285 int draggingUpdated(NSObject sender) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
286 if (sender is null) return OS.NSDragOperationNone;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
287 int oldKeyOperation = keyOperation;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
288
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
289 DNDEvent event = new DNDEvent();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
290 if (!setEventData(sender, event)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
291 keyOperation = -1;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
292 if (OS.PTR_SIZEOF is 4) OS.SetThemeCursor(OS.kThemeNotAllowedCursor);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
293 return OS.NSDragOperationNone;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
294 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
295
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
296 int allowedOperations = event.operations;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
297 TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
298 System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, allowedDataTypes.length);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
299
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
300 if (keyOperation is oldKeyOperation) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
301 event.type = DND.DragOver;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
302 event.dataType = selectedDataType;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
303 event.detail = selectedOperation;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
304 } else {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
305 event.type = DND.DragOperationChanged;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
306 event.dataType = selectedDataType;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
307 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
308 notifyListeners(event.type, event);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
309 if (event.detail is DND.DROP_DEFAULT) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
310 event.detail = (allowedOperations & DND.DROP_MOVE) !is 0 ? DND.DROP_MOVE : DND.DROP_NONE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
311 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
312
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
313 selectedDataType = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
314 for (int i = 0; i < allowedDataTypes.length; i++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
315 if (allowedDataTypes[i].type is event.dataType.type) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
316 selectedDataType = allowedDataTypes[i];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
317 break;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
318 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
319 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
320
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
321 selectedOperation = DND.DROP_NONE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
322 if (selectedDataType !is null && ((allowedOperations & event.detail) is event.detail)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
323 selectedOperation = event.detail;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
324 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
325 return opToOsOp(selectedOperation);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
326 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
327
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
328 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
329 * Creates a new <code>DropTarget</code> to allow data to be dropped on the specified
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
330 * <code>Control</code>.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
331 * Creating an instance of a DropTarget may cause system resources to be allocated
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
332 * depending on the platform. It is therefore mandatory that the DropTarget instance
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
333 * be disposed when no longer required.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
334 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
335 * @param control the <code>Control</code> over which the user positions the cursor to drop the data
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
336 * @param style the bitwise OR'ing of allowed operations; this may be a combination of any of
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
337 * DND.DROP_NONE, DND.DROP_COPY, DND.DROP_MOVE, DND.DROP_LINK
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
338 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
339 * @exception DWTException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
340 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
341 * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
342 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
343 * @exception DWTError <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
344 * <li>ERROR_CANNOT_INIT_DROP - unable to initiate drop target; this will occur if more than one
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
345 * drop target is created for a control or if the operating system will not allow the creation
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
346 * of the drop target</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
347 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
348 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
349 * <p>NOTE: ERROR_CANNOT_INIT_DROP should be an DWTException, since it is a
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
350 * recoverable error, but can not be changed due to backward compatibility.</p>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
351 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
352 * @see Widget#dispose
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
353 * @see DropTarget#checkSubclass
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
354 * @see DND#DROP_NONE
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
355 * @see DND#DROP_COPY
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
356 * @see DND#DROP_MOVE
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
357 * @see DND#DROP_LINK
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
358 */
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
359 public this(Control control, int style) {
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
360 transferAgents = new Transfer[0];
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
361
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
362 super(control, checkStyle(style));
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
363 this.control = control;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
364
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
365 if (control.getData(DND.DROP_TARGET_KEY) !is null) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
366 DND.error(DND.ERROR_CANNOT_INIT_DROP);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
367 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
368
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
369 control.setData(DND.DROP_TARGET_KEY, this);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
370
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
371 controlListener = new class () Listener {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
372 public void handleEvent (Event event) {
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
373 if (!this.outer.isDisposed()) {
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
374 this.outer.dispose();
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
375 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
376 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
377 };
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
378 control.addListener (DWT.Dispose, controlListener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
379
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
380 this.addListener(DWT.Dispose, new class () Listener {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
381 public void handleEvent (Event event) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
382 onDispose();
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
383 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
384 });
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
385
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
386 Object effect = control.getData(DEFAULT_DROP_TARGET_EFFECT);
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
387 if (cast(DropTargetEffect) effect) {
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
388 dropEffect = cast(DropTargetEffect) effect;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
389 } else if (cast(Table) control) {
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
390 dropEffect = new TableDropTargetEffect(cast(Table) control);
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
391 } else if (cast(Tree) control) {
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
392 dropEffect = new TreeDropTargetEffect(cast(Tree) control);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
393 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
394
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
395 addDragHandlers();
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
396 }
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
397 extern (C) {
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
398 static objc.id dropTargetProc2(objc.id id, objc.SEL sel) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
399 Display display = Display.findDisplay(Thread.getThis());
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
400 if (display is null || display.isDisposed()) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
401 Widget widget = display.findWidget(id);
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
402 if (widget is null) return null;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
403 DropTarget dt = cast(DropTarget)widget.getData(DND.DROP_TARGET_KEY);
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
404 if (dt is null) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
405
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
406 if (sel is OS.sel_wantsPeriodicDraggingUpdates) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
407 return dt.wantsPeriodicDraggingUpdates() ? cast(objc.id) 1 : null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
408 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
409
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
410 return null;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
411 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
412
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
413 static objc.id dropTargetProc3(objc.id id, objc.SEL sel, objc.id arg0) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
414 Display display = Display.findDisplay(Thread.getThis());
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
415 if (display is null || display.isDisposed()) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
416 Widget widget = display.findWidget(id);
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
417 if (widget is null) return null;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
418 DropTarget dt = cast(DropTarget)widget.getData(DND.DROP_TARGET_KEY);
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
419 if (dt is null) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
420
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
421 // arg0 is _always_ the sender, and implements NSDraggingInfo.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
422 // Looks like an NSObject for our purposes, though.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
423 NSObject sender = new NSObject(arg0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
424
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
425 if (sel is OS.sel_draggingEntered_) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
426 return cast(objc.id) dt.draggingEntered(sender);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
427 } else if (sel is OS.sel_draggingUpdated_) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
428 return cast(objc.id) dt.draggingUpdated(sender);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
429 } else if (sel is OS.sel_draggingExited_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
430 dt.draggingExited(sender);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
431 } else if (sel is OS.sel_performDragOperation_) {
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
432 return dt.performDragOperation(sender) ? cast(objc.id) 1 : null;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
433 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
434
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
435 return null;
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
436 }}
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
437
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
438 /**
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
439 * Returns the Control which is registered for this DropTarget. This is the control over which the
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
440 * user positions the cursor to drop the data.
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
441 *
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
442 * @return the Control which is registered for this DropTarget
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
443 */
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
444 public Control getControl () {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
445 return control;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
446 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
447
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
448 /**
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
449 * Returns an array of listeners who will be notified when a drag and drop
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
450 * operation is in progress, by sending it one of the messages defined in
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
451 * the <code>DropTargetListener</code> interface.
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
452 *
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
453 * @return the listeners who will be notified when a drag and drop
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
454 * operation is in progress
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
455 *
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
456 * @exception DWTException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
457 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
458 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
459 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
460 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
461 * @see DropTargetListener
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
462 * @see #addDropListener
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
463 * @see #removeDropListener
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
464 * @see DropTargetEvent
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
465 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
466 * @since 3.4
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
467 */
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
468 public DropTargetListener[] getDropListeners() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
469 Listener[] listeners = getListeners(DND.DragEnter);
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
470 int length_ = listeners.length;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
471 DropTargetListener[] dropListeners = new DropTargetListener[length_];
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
472 int count = 0;
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
473 for (int i = 0; i < length_; i++) {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
474 Listener listener = listeners[i];
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
475 if (cast(DNDListener) listener) {
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
476 dropListeners[count] = cast(DropTargetListener) (cast(DNDListener) listener).getEventListener();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
477 count++;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
478 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
479 }
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
480 if (count is length_) return dropListeners;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
481 DropTargetListener[] result = new DropTargetListener[count];
122
2e671fa40eec Ported dwt.dnd, dwt.opengl, dwt.printing and dwt.program
Jacob Carlborg <doob@me.com>
parents: 115
diff changeset
482 SimpleType!(DropTargetListener).arraycopy(dropListeners, 0, result, 0, count);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
483 return result;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
484 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
485
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
486 /**
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
487 * Returns the drop effect for this DropTarget. This drop effect will be
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
488 * used during a drag and drop to display the drag under effect on the
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
489 * target widget.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
490 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
491 * @return the drop effect that is registered for this DropTarget
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
492 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
493 * @since 3.3
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
494 */
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
495 public DropTargetEffect getDropTargetEffect() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
496 return dropEffect;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
497 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
498
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
499 int getOperationFromKeyState() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
500 // The NSDraggingInfo object already combined the modifier keys with the
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
501 // drag source's allowed events. This might be better accomplished by diffing
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
502 // the base drag source mask with the active drag state mask instead of snarfing
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
503 // the current event.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
504
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
505 // See documentation on [NSDraggingInfo draggingSourceOperationMask] for the
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
506 // correct Cocoa behavior. Control + Option or Command is NSDragOperationGeneric,
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
507 // or DND.DROP_DEFAULT in the DWT.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
508 NSEvent currEvent = NSApplication.sharedApplication().currentEvent();
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
509 NSUInteger modifiers = currEvent.modifierFlags();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
510 bool option = (modifiers & OS.NSAlternateKeyMask) is OS.NSAlternateKeyMask;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
511 bool control = (modifiers & OS.NSControlKeyMask) is OS.NSControlKeyMask;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
512 if (control && option) return DND.DROP_DEFAULT;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
513 if (control) return DND.DROP_LINK;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
514 if (option) return DND.DROP_COPY;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
515 return DND.DROP_DEFAULT;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
516 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
517
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
518 /**
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
519 * Returns a list of the data types that can be transferred to this DropTarget.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
520 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
521 * @return a list of the data types that can be transferred to this DropTarget
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
522 */
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
523 public Transfer[] getTransfer() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
524 return transferAgents;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
525 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
526
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
527 void onDispose () {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
528 if (control is null)
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
529 return;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
530 if (controlListener !is null)
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
531 control.removeListener(DWT.Dispose, controlListener);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
532 controlListener = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
533 control.setData(DND.DROP_TARGET_KEY, null);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
534 transferAgents = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
535
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
536 // Unregister the control as a drop target.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
537 control.view.unregisterDraggedTypes();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
538 control = null;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
539 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
540
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
541 int opToOsOp(int operation) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 99
diff changeset
542 NSDragOperation osOperation;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
543 if ((operation & DND.DROP_COPY) !is 0){
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
544 osOperation |= OS.NSDragOperationCopy;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
545 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
546 if ((operation & DND.DROP_LINK) !is 0) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
547 osOperation |= OS.NSDragOperationLink;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
548 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
549 if ((operation & DND.DROP_MOVE) !is 0) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
550 osOperation |= OS.NSDragOperationMove;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
551 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
552 if ((operation & DND.DROP_TARGET_MOVE) !is 0) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
553 osOperation |= OS.NSDragOperationDelete;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
554 }
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
555 return cast(int) osOperation;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
556 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
557
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
558 int osOpToOp(NSDragOperation osOperation){
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
559 int operation = 0;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
560 if ((osOperation & OS.NSDragOperationCopy) !is 0){
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
561 operation |= DND.DROP_COPY;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
562 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
563 if ((osOperation & OS.NSDragOperationLink) !is 0) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
564 operation |= DND.DROP_LINK;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
565 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
566 if ((osOperation & OS.NSDragOperationDelete) !is 0) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
567 operation |= DND.DROP_TARGET_MOVE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
568 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
569 if ((osOperation & OS.NSDragOperationMove) !is 0) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
570 operation |= DND.DROP_MOVE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
571 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
572 if (osOperation is OS.NSDragOperationEvery) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
573 operation = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
574 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
575 return operation;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
576 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
577
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
578 bool performDragOperation(NSObject sender) {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
579 DNDEvent event = new DNDEvent();
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
580 event.widget = this;
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
581 event.time = cast(int)System.currentTimeMillis();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
582
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
583 if (dropEffect !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
584 NSPoint mouseLocation = sender.draggingLocation();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
585 NSPoint globalLoc = sender.draggingDestinationWindow().convertBaseToScreen(mouseLocation);
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
586 event.item = dropEffect.getItem(cast(int)globalLoc.x, cast(int)globalLoc.y);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
587 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
588
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
589 event.detail = DND.DROP_NONE;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
590 notifyListeners(DND.DragLeave, event);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
591
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
592 event = new DNDEvent();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
593 if (!setEventData(sender, event)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
594 return false;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
595 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
596
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
597 keyOperation = -1;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
598 int allowedOperations = event.operations;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
599 TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
600 System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, event.dataTypes.length);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
601 event.dataType = selectedDataType;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
602 event.detail = selectedOperation;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
603 notifyListeners(DND.DropAccept, event);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
604
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
605 selectedDataType = null;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
606 if (event.dataType !is null) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
607 for (int i = 0; i < allowedDataTypes.length; i++) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
608 if (allowedDataTypes[i].type is event.dataType.type) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
609 selectedDataType = allowedDataTypes[i];
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
610 break;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
611 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
612 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
613 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
614
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
615 selectedOperation = DND.DROP_NONE;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
616 if (selectedDataType !is null && (event.detail & allowedOperations) !is 0) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
617 selectedOperation = event.detail;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
618 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
619
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
620 if (selectedOperation is DND.DROP_NONE) {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
621 return false;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
622 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
623
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
624 // ask drag source for dropped data
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
625 NSPasteboard pasteboard = sender.draggingPasteboard();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
626 NSObject data = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
627 NSMutableArray types = NSMutableArray.arrayWithCapacity(10);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
628
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
629 for (int i = 0; i < transferAgents.length; i++){
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
630 Transfer transfer = transferAgents[i];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
631 String[] typeNames = transfer.getTypeNames();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
632 int[] typeIds = transfer.getTypeIds();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
633
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
634 for (int j = 0; j < typeNames.length; j++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
635 if (selectedDataType.type is typeIds[j]) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
636 types.addObject(NSString.stringWith(typeNames[j]));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
637 break;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
638 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
639 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
640 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
641
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
642 NSString type = pasteboard.availableTypeFromArray(types);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
643 TransferData tdata = new TransferData();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
644
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
645 if (type !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
646 tdata.type = Transfer.registerType(type.getString());
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
647 if (type.isEqual(OS.NSStringPboardType) ||
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
648 type.isEqual(OS.NSHTMLPboardType) ||
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
649 type.isEqual(OS.NSRTFPboardType)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
650 tdata.data = pasteboard.stringForType(type);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
651 } else if (type.isEqual(OS.NSURLPboardType)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
652 tdata.data = NSURL.URLFromPasteboard(pasteboard);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
653 } else if (type.isEqual(OS.NSFilenamesPboardType)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
654 tdata.data = new NSArray(pasteboard.propertyListForType(type).id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
655 } else {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
656 tdata.data = pasteboard.dataForType(type);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
657 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
658 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
659
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
660 if (tdata.data !is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
661 data = tdata.data;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
662 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
663
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
664 // Get Data in a Java format
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
665 Object object = null;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
666 for (int i = 0; i < transferAgents.length; i++) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
667 Transfer transfer = transferAgents[i];
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
668 if (transfer !is null && transfer.isSupportedType(selectedDataType)) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
669 selectedDataType.data = data;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
670 object = transfer.nativeToJava(selectedDataType);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
671 break;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
672 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
673 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
674
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
675 if (object is null) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
676 selectedOperation = DND.DROP_NONE;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
677 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
678
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
679 event.dataType = selectedDataType;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
680 event.detail = selectedOperation;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
681 event.data = object;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
682 notifyListeners(DND.Drop, event);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
683 selectedOperation = DND.DROP_NONE;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
684 if ((allowedOperations & event.detail) is event.detail) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
685 selectedOperation = event.detail;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
686 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
687 //notify source of action taken
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
688 return (selectedOperation !is DND.DROP_NONE);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
689 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
690
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
691 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
692 * Removes the listener from the collection of listeners who will
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
693 * be notified when a drag and drop operation is in progress.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
694 *
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
695 * @param listener the listener which should no longer be notified
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
696 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
697 * @exception IllegalArgumentException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
698 * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
699 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
700 * @exception DWTException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
701 * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
702 * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
703 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
704 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
705 * @see DropTargetListener
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
706 * @see #addDropListener
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
707 * @see #getDropListeners
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
708 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
709 public void removeDropListener(DropTargetListener listener) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
710 if (listener is null) DND.error (DWT.ERROR_NULL_ARGUMENT);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
711 removeListener (DND.DragEnter, listener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
712 removeListener (DND.DragLeave, listener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
713 removeListener (DND.DragOver, listener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
714 removeListener (DND.DragOperationChanged, listener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
715 removeListener (DND.Drop, listener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
716 removeListener (DND.DropAccept, listener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
717 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
718
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
719 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
720 * Specifies the drop effect for this DropTarget. This drop effect will be
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
721 * used during a drag and drop to display the drag under effect on the
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
722 * target widget.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
723 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
724 * @param effect the drop effect that is registered for this DropTarget
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
725 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
726 * @since 3.3
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
727 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
728 public void setDropTargetEffect(DropTargetEffect effect) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
729 dropEffect = effect;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
730 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
731
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
732 bool setEventData(NSObject draggingState, DNDEvent event) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
733 if (draggingState is null) return false;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
734
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
735 // get allowed operations
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
736 int style = getStyle();
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
737 NSDragOperation allowedActions = draggingState.draggingSourceOperationMask();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
738 int operations = osOpToOp(allowedActions) & style;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
739 if (operations is DND.DROP_NONE) return false;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
740
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
741 // get current operation
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
742 int operation = getOperationFromKeyState();
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
743 keyOperation = operation;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
744 if (operation is DND.DROP_DEFAULT) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
745 if ((style & DND.DROP_DEFAULT) is 0) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
746 operation = (operations & DND.DROP_MOVE) !is 0 ? DND.DROP_MOVE : DND.DROP_NONE;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
747 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
748 } else {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
749 if ((operation & operations) is 0) operation = DND.DROP_NONE;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
750 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
751
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
752
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
753 // get allowed transfer types
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
754 NSPasteboard dragPBoard = draggingState.draggingPasteboard();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
755 NSArray draggedTypes = dragPBoard.types();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
756 if (draggedTypes is null) return false;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
757
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
758 NSUInteger draggedTypeCount = draggedTypes.count();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
759
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
760 TransferData[] dataTypes = new TransferData[draggedTypeCount];
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
761 int index = -1;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
762 for (int i = 0; i < draggedTypeCount; i++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
763 id draggedType = draggedTypes.objectAtIndex(i);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
764 NSString nativeDataType = new NSString(draggedType);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
765 TransferData data = new TransferData();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
766 data.type = Transfer.registerType(nativeDataType.getString());
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
767
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
768 for (int j = 0; j < transferAgents.length; j++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
769 Transfer transfer = transferAgents[j];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
770 if (transfer !is null && transfer.isSupportedType(data)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
771 dataTypes[++index] = data;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
772 break;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
773 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
774 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
775 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
776 if (index is -1) return false;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
777
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
778 if (index < dataTypes.length - 1) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
779 TransferData[] temp = new TransferData[index + 1];
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
780 System.arraycopy(dataTypes, 0, temp, 0, index + 1);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
781 dataTypes = temp;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
782 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
783
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
784 // Convert from window-relative to global coordinates, and flip it.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
785 NSPoint mouse = draggingState.draggingLocation();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
786 NSPoint globalMouse = draggingState.draggingDestinationWindow().convertBaseToScreen(mouse);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
787 NSArray screens = NSScreen.screens();
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
788 NSRect screenRect = (new NSScreen(screens.objectAtIndex(0))).frame();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
789 globalMouse.y = screenRect.height - globalMouse.y;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
790
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
791 event.widget = this;
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
792 event.x = cast(int)globalMouse.x;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
793 event.y = cast(int)globalMouse.y;
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
794 event.time = cast(int)System.currentTimeMillis();
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
795 event.feedback = DND.FEEDBACK_SELECT;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
796 event.dataTypes = dataTypes;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
797 event.dataType = dataTypes[0];
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
798 event.operations = operations;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
799 event.detail = operation;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
800 if (dropEffect !is null) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
801 event.item = dropEffect.getItem(event.x, event.y);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
802 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
803
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
804 return true;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
805 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
806
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
807 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
808 * Specifies the data types that can be transferred to this DropTarget. If data is
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
809 * being dragged that does not match one of these types, the drop target will be notified of
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
810 * the drag and drop operation but the currentDataType will be null and the operation
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
811 * will be DND.NONE.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
812 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
813 * @param transferAgents a list of Transfer objects which define the types of data that can be
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
814 * dropped on this target
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
815 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
816 * @exception IllegalArgumentException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
817 * <li>ERROR_NULL_ARGUMENT - if transferAgents is null</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
818 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
819 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
820 public void setTransfer(Transfer[] transferAgents){
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
821 if (transferAgents is null) DND.error(DWT.ERROR_NULL_ARGUMENT);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
822 this.transferAgents = transferAgents;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
823
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
824
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
825 // Register the types as valid drop types in Cocoa.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
826 // Accumulate all of the transfer types into a list.
99
d32621bf0f90 Ported dwt.dnd.DropTarget
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
827 String[] typeStrings;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
828
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
829 for (int i = 0; i < this.transferAgents.length; i++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
830 String[] types = transferAgents[i].getTypeNames();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
831
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
832 for (int j = 0; j < types.length; j++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
833 typeStrings.add(types[j]);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
834 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
835 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
836
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
837 // Convert to an NSArray of NSStrings so we can register with the Control.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
838 int typeStringCount = typeStrings.size();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
839 NSMutableArray nsTypeStrings = NSMutableArray.arrayWithCapacity(typeStringCount);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
840
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
841 for (int i = 0; i < typeStringCount; i++) {
122
2e671fa40eec Ported dwt.dnd, dwt.opengl, dwt.printing and dwt.program
Jacob Carlborg <doob@me.com>
parents: 115
diff changeset
842 nsTypeStrings.addObject(NSString.stringWith(typeStrings.get(i)));
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
843 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
844
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
845 control.view.registerForDraggedTypes(nsTypeStrings);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
846
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
847 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
848
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
849 // By returning true we get draggingUpdated messages even when the mouse isn't moving.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
850 bool wantsPeriodicDraggingUpdates() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
851 return true;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
852 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
853
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
854 }