annotate dwt/dnd/DragSource.d @ 156:969e7de37c3d default tip

Fixes to get dwt to work with dmd and ldc
author Jacob Carlborg <doob@me.com>
date Wed, 08 Jul 2009 21:56:44 +0200
parents 2e671fa40eec
children
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
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
10 *
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
11 * Port to the D programming language:
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
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.DragSource;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
15
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
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
18
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
19 import dwt.DWT;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
20 import dwt.DWTError;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
21 import dwt.DWTException;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
22 import dwt.graphics.Image;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
23 import dwt.internal.C;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
24 import dwt.internal.cocoa.NSApplication;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
25 import dwt.internal.cocoa.NSArray;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
26 import dwt.internal.cocoa.NSData;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
27 import dwt.internal.cocoa.NSEvent;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
28 import dwt.internal.cocoa.NSImage;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
29 import dwt.internal.cocoa.NSMutableArray;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
30 import dwt.internal.cocoa.NSObject;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
31 import dwt.internal.cocoa.NSPasteboard;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
32 import dwt.internal.cocoa.NSPoint;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
33 import dwt.internal.cocoa.NSSize;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
34 import dwt.internal.cocoa.NSString;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
35 import dwt.internal.cocoa.NSURL;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
36 import dwt.internal.cocoa.OS;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
37 import dwt.internal.cocoa.SWTDragSourceDelegate;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
38 import dwt.widgets.Control;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
39 import dwt.widgets.Display;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
40 import dwt.widgets.Event;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
41 import dwt.widgets.Listener;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
42 import dwt.widgets.Table;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
43 import dwt.widgets.Tree;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
44 import dwt.widgets.Widget;
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
45
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
46 import tango.core.Thread;
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
47
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
48 import dwt.dnd.DND;
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
49 import dwt.dnd.DNDEvent;
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
50 import dwt.dnd.DNDListener;
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
51 import dwt.dnd.DragSourceEffect;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
52 import dwt.dnd.DragSourceListener;
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
53 import dwt.dnd.TableDragSourceEffect;
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
54 import dwt.dnd.Transfer;
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
55 import dwt.dnd.TransferData;
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
56 import dwt.dnd.TreeDragSourceEffect;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
57 import dwt.internal.objc.cocoa.Cocoa;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
58 import objc = dwt.internal.objc.runtime;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
59
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
60 /**
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 * <code>DragSource</code> defines the source 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
63 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
64 * <p>IMPORTANT: This class is <em>not</em> intended to be subclassed.</p>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
65 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
66 * <p>A drag source is the object which originates a drag and drop operation. For the specified widget,
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
67 * it defines the type of data that is available for dragging and the set of operations that can
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
68 * be performed on that data. The operations can be any bit-wise combination of DND.MOVE, DND.COPY or
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
69 * DND.LINK. The type of data that can be transferred is specified by subclasses of Transfer such as
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
70 * TextTransfer or FileTransfer. The type of data transferred can be a predefined system type or it
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
71 * can be a type defined by the application. For instructions on how to define your own transfer type,
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
72 * refer to <code>ByteArrayTransfer</code>.</p>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
73 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
74 * <p>You may have several DragSources in an application but you can only have one DragSource
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
75 * per Control. Data dragged from this DragSource can be dropped on a site within this application
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
76 * or it can be dropped on another application such as an external Text editor.</p>
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 supplies the content of the data being transferred by implementing the
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
79 * <code>DragSourceListener</code> and associating it with the DragSource via DragSource#addDragListener.</p>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
80 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
81 * <p>When a successful move operation occurs, the application is required to take the appropriate
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
82 * action to remove the data from its display and remove any associated operating system resources or
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
83 * internal references. Typically in a move operation, the drop target makes a copy of the data
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
84 * and the drag source deletes the original. However, sometimes copying the data can take a long
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
85 * time (such as copying a large file). Therefore, on some platforms, the drop target may actually
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
86 * move the data in the operating system rather than make a copy. This is usually only done in
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
87 * file transfers. In this case, the drag source is informed in the DragEnd event that a
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
88 * DROP_TARGET_MOVE was performed. It is the responsibility of the drag source at this point to clean
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
89 * up its displayed information. No action needs to be taken on the operating system resources.</p>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
90 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
91 * <p> The following example shows a Label widget that allows text to be dragged from it.</p>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
92 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
93 * <code><pre>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
94 * // Enable a label as a Drag Source
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
95 * Label label = new Label(shell, DWT.NONE);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
96 * // This example will allow text to be dragged
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
97 * Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
98 * // This example will allow the text to be copied or moved to the drop target
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
99 * int operations = DND.DROP_MOVE | DND.DROP_COPY;
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 * DragSource source = new DragSource(label, operations);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
102 * source.setTransfer(types);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
103 * source.addDragListener(new DragSourceListener() {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
104 * public void dragStart(DragSourceEvent e) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
105 * // Only start the drag if there is actually text in the
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
106 * // label - this text will be what is dropped on the target.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
107 * if (label.getText().length() is 0) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
108 * event.doit = false;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
109 * }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
110 * };
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
111 * public void dragSetData(DragSourceEvent event) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
112 * // A drop has been performed, so provide the data of the
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
113 * // requested type.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
114 * // (Checking the type of the requested data is only
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
115 * // necessary if the drag source supports more than
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
116 * // one data type but is shown here as an example).
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
117 * if (TextTransfer.getInstance().isSupportedType(event.dataType)){
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
118 * event.data = label.getText();
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
119 * }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
120 * }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
121 * public void dragFinished(DragSourceEvent event) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
122 * // A Move operation has been performed so remove the data
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
123 * // from the source
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
124 * if (event.detail is DND.DROP_MOVE)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
125 * label.setText("");
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
126 * }
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 * </pre></code>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
129 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
130 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
131 * <dl>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
132 * <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
133 * <dt><b>Events</b></dt> <dd>DND.DragStart, DND.DragSetData, DND.DragEnd</dd>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
134 * </dl>
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
135 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
136 * @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
137 * @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
138 * @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
139 */
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
140 public class DragSource : Widget {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
141
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
142 //static Callback dragSource2Args, dragSource3Args, dragSource4Args, dragSource5Args;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
143 static const String DWT_OBJECT = "DWT_OBJECT";
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
144
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
145 static this () {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
146 String className = "SWTDragSourceDelegate";
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 // TODO: These should either move out of Display or be accessible to this class.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
149 String types = "*";
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
150 int size = C.PTR_SIZEOF, align_ = C.PTR_SIZEOF is 4 ? 2 : 3;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
151
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
152 objc.IMP proc2 = cast(objc.IMP) &dragSourceProc2;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
153 objc.IMP proc3 = cast(objc.IMP) &dragSourceProc3;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
154 objc.IMP proc4 = cast(objc.IMP) &dragSourceProc4;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
155 objc.IMP proc5 = cast(objc.IMP) &dragSourceProc5;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
156
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
157 objc.Class cls = OS.objc_allocateClassPair(cast(objc.Class) OS.class_NSObject, className, 0);
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
158 OS.class_addIvar(cls, DWT_OBJECT, size, cast(byte)align_, types);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
159
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
160 objc.IMP draggedImage_endedAt_operationProc = OS.draggedImage_endedAt_operation_CALLBACK(proc5);
45
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 // Add the NSDraggingSource callbacks
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
163 OS.class_addMethod(cls, OS.sel_draggingSourceOperationMaskForLocal_, proc3, "@:c");
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
164
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
165 static if ((void*).sizeof > int.sizeof) /* 64bit target */
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
166 {
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
167 OS.class_addMethod(cls, OS.sel_draggedImage_beganAt_, proc4, "@:@{NSPoint=dd}");
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
168 OS.class_addMethod(cls, OS.sel_draggedImage_endedAt_operation_, draggedImage_endedAt_operationProc, "@:@{NSPoint=dd}Q");
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
169 }
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
170
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
171 else
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
172 {
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
173 OS.class_addMethod(cls, OS.sel_draggedImage_beganAt_, proc4, "@:@{NSPoint=ff}");
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
174 OS.class_addMethod(cls, OS.sel_draggedImage_endedAt_operation_, draggedImage_endedAt_operationProc, "@:@{NSPoint=ff}I");
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
175 }
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
176
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
177 OS.class_addMethod(cls, OS.sel_ignoreModifierKeysWhileDragging, proc3, "@:");
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 // Add the NSPasteboard delegate callback
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
180 OS.class_addMethod(cls, OS.sel_pasteboard_provideDataForType_, proc4, "@:@@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
181
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
182 OS.objc_registerClassPair(cls);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
183 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
184
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
185
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
186 // info for registering as a drag source
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
187 Control control;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
188 Listener controlListener;
122
2e671fa40eec Ported dwt.dnd, dwt.opengl, dwt.printing and dwt.program
Jacob Carlborg <doob@me.com>
parents: 115
diff changeset
189 Transfer[] transferAgents;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
190 DragSourceEffect dragEffect;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
191 private int dragOperations;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
192 SWTDragSourceDelegate dragSourceDelegate;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
193
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
194 static final String DEFAULT_DRAG_SOURCE_EFFECT = "DEFAULT_DRAG_SOURCE_EFFECT"; //$NON-NLS-1$
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
195
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
196 bool dragStarted = false;
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
197 private void* delegateJniRef;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
198
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
199 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
200 * Creates a new <code>DragSource</code> to handle dragging from the specified <code>Control</code>.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
201 * Creating an instance of a DragSource may cause system resources to be allocated depending on the platform.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
202 * It is therefore mandatory that the DragSource instance be disposed when no longer required.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
203 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
204 * @param control the <code>Control</code> that the user clicks on to initiate the drag
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
205 * @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
206 * 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
207 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
208 * @exception DWTException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
209 * <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
210 * <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
211 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
212 * @exception DWTError <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
213 * <li>ERROR_CANNOT_INIT_DRAG - unable to initiate drag source; 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
214 * drag source 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
215 * of the drag source</li>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
216 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
217 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
218 * <p>NOTE: ERROR_CANNOT_INIT_DRAG 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
219 * 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
220 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
221 * @see Widget#dispose
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
222 * @see DragSource#checkSubclass
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
223 * @see DND#DROP_NONE
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
224 * @see DND#DROP_COPY
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
225 * @see DND#DROP_MOVE
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
226 * @see DND#DROP_LINK
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
227 */
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
228 public this(Control control, int style) {
122
2e671fa40eec Ported dwt.dnd, dwt.opengl, dwt.printing and dwt.program
Jacob Carlborg <doob@me.com>
parents: 115
diff changeset
229 transferAgents = new Transfer[0];
2e671fa40eec Ported dwt.dnd, dwt.opengl, dwt.printing and dwt.program
Jacob Carlborg <doob@me.com>
parents: 115
diff changeset
230
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
231 super (control, checkStyle(style));
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
232 this.control = control;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
233 if (control.getData(DND.DRAG_SOURCE_KEY) !is null) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
234 DND.error(DND.ERROR_CANNOT_INIT_DRAG);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
235 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
236 control.setData(DND.DRAG_SOURCE_KEY, this);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
237
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
238 controlListener = new class () Listener {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
239 public void handleEvent (Event event) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
240 if (event.type is DWT.Dispose) {
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
241 if (!this.outer.isDisposed()) {
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
242 this.outer.dispose();
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
243 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
244 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
245 if (event.type is DWT.DragDetect) {
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
246 if (!this.outer.isDisposed()) {
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
247 this.outer.drag(event);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
248 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
249 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
250 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
251 };
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
252 control.addListener (DWT.Dispose, controlListener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
253 control.addListener (DWT.DragDetect, controlListener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
254
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
255 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
256 public void handleEvent(Event e) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
257 onDispose();
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
258 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
259 });
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
260
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
261 Object effect = control.getData(DEFAULT_DRAG_SOURCE_EFFECT);
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
262 if (cast(DragSourceEffect) effect) {
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
263 dragEffect = cast(DragSourceEffect) effect;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
264 } else if (cast(Tree) control) {
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
265 dragEffect = new TreeDragSourceEffect(cast(Tree) control);
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
266 } else if (cast(Table) control) {
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
267 dragEffect = new TableDragSourceEffect(cast(Table) control);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
268 }
45
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 // Create a delegate, but then stuff a pointer back to this object so callbacks will have
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
271 // access to this object's data.
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
272 dragSourceDelegate = cast(SWTDragSourceDelegate)(new SWTDragSourceDelegate()).alloc().init();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
273 delegateJniRef = OS.NewGlobalRef(this);
122
2e671fa40eec Ported dwt.dnd, dwt.opengl, dwt.printing and dwt.program
Jacob Carlborg <doob@me.com>
parents: 115
diff changeset
274 if (delegateJniRef is null) DWT.error(DWT.ERROR_NO_HANDLES);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
275 OS.object_setInstanceVariable(dragSourceDelegate.id, DWT_OBJECT, delegateJniRef);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
276 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
277
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
278 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
279 * Adds the listener to the collection of listeners who will
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
280 * be notified when a drag and drop operation is in progress, by sending
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
281 * it one of the messages defined in the <code>DragSourceListener</code>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
282 * interface.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
283 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
284 * <p><ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
285 * <li><code>dragStart</code> is called when the user has begun the actions required to drag the widget.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
286 * This event gives the application the chance to decide if a drag should be started.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
287 * <li><code>dragSetData</code> is called when the data is required from the drag source.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
288 * <li><code>dragFinished</code> is called when the drop has successfully completed (mouse up
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
289 * over a valid target) or has been terminated (such as hitting the ESC key). Perform cleanup
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
290 * such as removing data from the source side on a successful move operation.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
291 * </ul></p>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
292 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
293 * @param listener the listener which should be notified
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 * @exception IllegalArgumentException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
296 * <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
297 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
298 * @exception DWTException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
299 * <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
300 * <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
301 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
302 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
303 * @see DragSourceListener
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
304 * @see #getDragListeners
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
305 * @see #removeDragListener
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
306 * @see DragSourceEvent
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
307 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
308 public void addDragListener(DragSourceListener listener) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
309 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
310 DNDListener typedListener = new DNDListener (listener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
311 typedListener.dndWidget = this;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
312 addListener (DND.DragStart, typedListener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
313 addListener (DND.DragSetData, typedListener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
314 addListener (DND.DragEnd, typedListener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
315 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
316
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
317 protected void checkSubclass () {
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
318 String name = this.classinfo.name;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
319 String validName = DragSource.classinfo.name;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
320 if (!validName.equals(name)) {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
321 DND.error (DWT.ERROR_INVALID_SUBCLASS);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
322 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
323 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
324
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
325 static int checkStyle (int style) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
326 if (style is DWT.NONE) return DND.DROP_MOVE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
327 return style;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
328 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
329
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
330 void drag(Event dragEvent) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
331 DNDEvent event = new DNDEvent();
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
332 event.widget = this;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
333 event.x = dragEvent.x;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
334 event.y = dragEvent.y;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
335 event.time = dragEvent.time;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
336 event.doit = true;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
337 notifyListeners(DND.DragStart, event);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
338 if (!event.doit || transferAgents is null || transferAgents.length is 0) return;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
339
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
340 NSPasteboard dragBoard = NSPasteboard.pasteboardWithName(OS.NSDragPboard);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
341 NSMutableArray nativeTypeArray = NSMutableArray.arrayWithCapacity(10);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
342
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
343 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
344 Transfer transfer = transferAgents[i];
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
345 if (transfer !is null) {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
346 String[] typeNames = transfer.getTypeNames();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
347
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
348 for (int j = 0; j < typeNames.length; j++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
349 nativeTypeArray.addObject(NSString.stringWith(typeNames[j]));
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
350 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
351 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
352 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
353
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
354 if (nativeTypeArray !is null)
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
355 dragBoard.declareTypes(nativeTypeArray, dragSourceDelegate);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
356
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
357 // Start the drag here from the Control's view.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
358 NSEvent currEvent = NSApplication.sharedApplication().currentEvent();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
359 NSPoint pt = currEvent.locationInWindow();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
360 NSPoint viewPt = control.view.convertPoint_fromView_(pt, null);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
361
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
362 // Save off the drag operations -- AppKit will call back to us to request them during the drag.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
363 dragOperations = opToOsOp(getStyle());
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
364
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
365 // Get the image for the drag. The drag should happen from the middle of the image.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
366 NSImage dragImage = null;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
367 Image newImage = null;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
368 try {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
369 Image image = event.image;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
370
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
371 // If no image was provided, just create a trivial image. dragImage requires a non-null image.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
372 if (image is null) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
373 newImage = new Image(Display.getCurrent(), 1, 1);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
374 image = newImage;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
375 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
376
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
377 dragImage = image.handle;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
378
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
379 NSSize imageSize = dragImage.size();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
380 viewPt.x -= (imageSize.width / 2);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
381 viewPt.y -= (imageSize.height / 2);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
382
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
383 // The third argument to dragImage is ignored as of 10.4.
46
cfa563df4fdd Updated Widget and Display to 3.514
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
384 NSSize ignored = NSSize();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
385 ignored.width = 0;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
386 ignored.height = 0;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
387
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
388 dragStarted = false;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
389 control.view.dragImage(dragImage, viewPt, ignored, NSApplication.sharedApplication().currentEvent(), dragBoard, dragSourceDelegate, true);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
390
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
391 // If we actually dragged, dragStarted will be set to true in dragImage:beganAt:
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
392 // If not, send a DragEnd indicating nothing happened.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
393 if (!dragStarted) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
394 event = new DNDEvent();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
395 event.widget = this;
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
396 event.time = cast(int)System.currentTimeMillis();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
397 event.doit = false;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
398 event.detail = DND.DROP_NONE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
399 notifyListeners(DND.DragEnd, event);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
400 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
401 } finally {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
402 if (newImage !is null) newImage.dispose();
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
403 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
404 }
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 void draggedImage_beganAt(NSImage image) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
407 this.dragStarted = true;
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
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
410 void draggedImage_endedAt_operation(NSImage image, NSPoint location, NSDragOperation operation) {
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
411 int swtOperation = osOpToOp(cast(NSDragOperation) operation);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
412 Event event = new DNDEvent();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
413 event.widget = this;
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
414 event.time = cast(int)System.currentTimeMillis();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
415 event.doit = swtOperation !is DND.DROP_NONE;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
416 event.detail = swtOperation;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
417 notifyListeners(DND.DragEnd, event);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
418 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
419
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 * Cocoa NSDraggingSource implementations
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
422 */
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
423 int draggingSourceOperationMaskForLocal(bool flag) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
424 // Drag operations are same for local or remote drags.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
425 return dragOperations;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
426 }
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
427 extern (C) {
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
428 static objc.id dragSourceProc2(objc.id id, objc.SEL sel) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
429 Display display = Display.findDisplay(Thread.getThis());
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
430 if (display is null || display.isDisposed()) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
431 Widget widget = display.findWidget(id);
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
432 if (widget is null) return null;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
433 DragSource ds = cast(DragSource)widget.getData(DND.DRAG_SOURCE_KEY);
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
434 if (ds is null) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
435
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
436 if (sel is OS.sel_ignoreModifierKeysWhileDragging) {
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
437 return (ds.ignoreModifierKeysWhileDragging() ? cast(objc.id ) 1 : null);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
438 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
439
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
440 return null;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
441 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
442
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
443 static objc.id dragSourceProc3(objc.id id, objc.SEL sel, objc.id arg0) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
444 Display display = Display.findDisplay(Thread.getThis());
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
445 if (display is null || display.isDisposed()) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
446 Widget widget = display.findWidget(id);
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
447 if (widget is null) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
448 DragSource ds = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
449
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
450 if (cast(DragSource) widget)
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
451 ds = cast(DragSource)widget;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
452
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
453 if (ds is null) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
454
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
455 if (sel is OS.sel_draggingSourceOperationMaskForLocal_) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
456 return cast(objc.id) ds.draggingSourceOperationMaskForLocal(arg0 is cast(objc.id) 1);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
457 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
458
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
459 return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
460 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
461
122
2e671fa40eec Ported dwt.dnd, dwt.opengl, dwt.printing and dwt.program
Jacob Carlborg <doob@me.com>
parents: 115
diff changeset
462 static objc.id dragSourceProc4(objc.id id, objc.SEL sel, objc.id arg0, objc.id arg1) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
463 Display display = Display.findDisplay(Thread.getThis());
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
464 if (display is null || display.isDisposed()) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
465 Widget widget = display.findWidget(id);
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
466 if (widget is null) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
467 DragSource ds = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
468
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
469 if (cast(DragSource) widget)
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
470 ds = cast(DragSource)widget;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
471
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
472 if (ds is null) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
473
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
474 if (sel is OS.sel_draggedImage_beganAt_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
475 NSImage image = new NSImage(arg0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
476 // I am deliberately ignoring arg1 (an NSPoint). It's not needed for our purposes.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
477 ds.draggedImage_beganAt(image);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
478 } else if (sel is OS.sel_pasteboard_provideDataForType_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
479 NSPasteboard pb = new NSPasteboard(arg0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
480 NSString type = new NSString(arg1);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
481 ds.pasteboard_provideDataForType(pb, type);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
482 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
483
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
484 return null;
45
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
122
2e671fa40eec Ported dwt.dnd, dwt.opengl, dwt.printing and dwt.program
Jacob Carlborg <doob@me.com>
parents: 115
diff changeset
487 static objc.id dragSourceProc5(objc.id id, objc.SEL sel, objc.id arg0, objc.id arg1, NSDragOperation arg2) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
488 Display display = Display.findDisplay(Thread.getThis());
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
489 if (display is null || display.isDisposed()) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
490 Widget widget = display.findWidget(id);
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
491 if (widget is null) return null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
492 DragSource ds = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
493
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
494 if (cast(DragSource) widget)
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
495 ds = cast(DragSource)widget;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
496
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
497 if (ds is null) return null;
45
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 if (sel is OS.sel_draggedImage_endedAt_operation_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
500 NSImage image = new NSImage(arg0);
46
cfa563df4fdd Updated Widget and Display to 3.514
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
501 NSPoint point = NSPoint();
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
502 OS.memmove(&point, arg1, NSPoint.sizeof);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
503 ds.draggedImage_endedAt_operation(image, point, arg2);
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
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
506 return null;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
507 }}
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
508
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
509 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
510 * Returns the Control which is registered for this DragSource. This is the control that the
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
511 * user clicks in to initiate dragging.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
512 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
513 * @return the Control which is registered for this DragSource
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
514 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
515 public Control getControl () {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
516 return control;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
517 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
518
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
519 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
520 * Returns an array of listeners who will be notified when a drag and drop
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
521 * operation is in progress, by sending it one of the messages defined in
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
522 * the <code>DragSourceListener</code> interface.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
523 *
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
524 * @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
525 * operation is in progress
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
526 *
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
527 * @exception DWTException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
528 * <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
529 * <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
530 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
531 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
532 * @see DragSourceListener
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
533 * @see #addDragListener
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
534 * @see #removeDragListener
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
535 * @see DragSourceEvent
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
536 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
537 * @since 3.4
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
538 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
539 public DragSourceListener[] getDragListeners() {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
540 Listener[] listeners = getListeners(DND.DragStart);
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
541 int length_ = listeners.length;
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
542 DragSourceListener[] dragListeners = new DragSourceListener[length_];
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
543 int count = 0;
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
544 for (int i = 0; i < length_; i++) {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
545 Listener listener = listeners[i];
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
546 if (cast(DNDListener) listener) {
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
547 dragListeners[count] = cast(DragSourceListener) (cast(DNDListener) listener).getEventListener();
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
548 count++;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
549 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
550 }
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
551 if (count is length_) return dragListeners;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
552 DragSourceListener[] result = new DragSourceListener[count];
122
2e671fa40eec Ported dwt.dnd, dwt.opengl, dwt.printing and dwt.program
Jacob Carlborg <doob@me.com>
parents: 115
diff changeset
553 SimpleType!(DragSourceListener).arraycopy(dragListeners, 0, result, 0, count);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
554 return result;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
555 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
556
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
557 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
558 * Returns the drag effect that is registered for this DragSource. This drag
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
559 * effect will be used during a drag and drop operation.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
560 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
561 * @return the drag effect that is registered for this DragSource
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
562 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
563 * @since 3.3
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
564 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
565 public DragSourceEffect getDragSourceEffect() {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
566 return dragEffect;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
567 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
568
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
569 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
570 * Returns the list of data types that can be transferred by this DragSource.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
571 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
572 * @return the list of data types that can be transferred by this DragSource
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
573 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
574 public Transfer[] getTransfer(){
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
575 return transferAgents;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
576 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
577
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
578 /**
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
579 * We always want the modifier keys to potentially update the drag.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
580 */
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
581 bool ignoreModifierKeysWhileDragging() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
582 return false;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
583 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
584
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
585 void onDispose() {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
586 if (control is null)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
587 return;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
588 if (controlListener !is null) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
589 control.removeListener(DWT.Dispose, controlListener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
590 control.removeListener(DWT.DragDetect, controlListener);
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 controlListener = null;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
593 control.setData(DND.DRAG_SOURCE_KEY, null);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
594 control = null;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
595 transferAgents = null;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
596
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
597 //if (delegateJniRef !is null) OS.DeleteGlobalRef(delegateJniRef);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
598 if (dragSourceDelegate !is null) dragSourceDelegate.release();
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
599 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
600
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
601 int opToOsOp(int operation) {
115
a2d82e6fd054 Ported dwt.dnd
Jacob Carlborg <doob@me.com>
parents: 95
diff changeset
602 NSDragOperation osOperation;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
603 if ((operation & DND.DROP_COPY) !is 0){
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
604 osOperation |= OS.NSDragOperationCopy;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
605 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
606 if ((operation & DND.DROP_LINK) !is 0) {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
607 osOperation |= OS.NSDragOperationLink;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
608 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
609 if ((operation & DND.DROP_MOVE) !is 0) {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
610 osOperation |= OS.NSDragOperationMove;
0
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 if ((operation & DND.DROP_TARGET_MOVE) !is 0) {
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
613 osOperation |= OS.NSDragOperationDelete;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
614 }
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
615 return cast(int) osOperation;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
616 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
617
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
618 int osOpToOp(NSDragOperation osOperation){
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
619 int operation = 0;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
620 if ((osOperation & OS.NSDragOperationCopy) !is 0){
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
621 operation |= DND.DROP_COPY;
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 if ((osOperation & OS.NSDragOperationLink) !is 0) {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
624 operation |= DND.DROP_LINK;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
625 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
626 if ((osOperation & OS.NSDragOperationDelete) !is 0) {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
627 operation |= DND.DROP_TARGET_MOVE;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
628 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
629 if ((osOperation & OS.NSDragOperationMove) !is 0) {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
630 operation |= DND.DROP_MOVE;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
631 }
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
632 if (osOperation is OS.NSDragOperationEvery) {
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
633 operation = 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
634 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
635 return operation;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
636 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
637
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
638 void pasteboard_provideDataForType(NSPasteboard pasteboard, NSString dataType) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
639 if (pasteboard is null || dataType is null) return;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
640 TransferData transferData = new TransferData();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
641 transferData.type = Transfer.registerType(dataType.getString());
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
642 DNDEvent event = new DNDEvent();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
643 event.widget = this;
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
644 event.time = cast(int)System.currentTimeMillis();
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
645 event.dataType = transferData;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
646 notifyListeners(DND.DragSetData, event);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
647 Transfer transfer = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
648 for (int i = 0; i < transferAgents.length; i++) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
649 Transfer transferAgent = transferAgents[i];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
650 if (transferAgent !is null && transferAgent.isSupportedType(transferData)) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
651 transfer = transferAgent;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
652 break;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
653 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
654 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
655 if (transfer is null) return;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
656 transfer.javaToNative(event.data, transferData);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
657 if (transferData.data is null) return;
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 NSObject tdata = transferData.data;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
660
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
661 if (dataType.isEqual(OS.NSStringPboardType) ||
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
662 dataType.isEqual(OS.NSHTMLPboardType) ||
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
663 dataType.isEqual(OS.NSRTFPboardType)) {
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
664 pasteboard.setString(cast(NSString) tdata, dataType);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
665 } else if (dataType.isEqual(OS.NSURLPboardType)) {
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
666 NSURL url = cast(NSURL) tdata;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
667 url.writeToPasteboard(pasteboard);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
668 } else if (dataType.isEqual(OS.NSFilenamesPboardType)) {
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
669 pasteboard.setPropertyList(cast(NSArray) tdata, dataType);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
670 } else {
95
52007db1276d Ported dwt.dnd.DragSource
Jacob Carlborg <doob@me.com>
parents: 46
diff changeset
671 pasteboard.setData(cast(NSData) tdata, dataType);
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
672 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
673 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
674
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
675 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
676 * 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
677 * 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
678 *
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
679 * @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
680 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
681 * @exception IllegalArgumentException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
682 * <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
683 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
684 * @exception DWTException <ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
685 * <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
686 * <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
687 * </ul>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
688 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
689 * @see DragSourceListener
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
690 * @see #addDragListener
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 8
diff changeset
691 * @see #getDragListeners
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
692 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
693 public void removeDragListener(DragSourceListener listener) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
694 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
695 removeListener (DND.DragStart, listener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
696 removeListener (DND.DragSetData, listener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
697 removeListener (DND.DragEnd, listener);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
698 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
699
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
700 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
701 * Specifies the drag effect for this DragSource. This drag effect will be
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
702 * used during a drag and drop operation.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
703 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
704 * @param effect the drag effect that is registered for this DragSource
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
705 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
706 * @since 3.3
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
707 */
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
708 public void setDragSourceEffect(DragSourceEffect effect) {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
709 dragEffect = effect;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
710 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
711 /**
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
712 * Specifies the list of data types that can be transferred by this DragSource.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
713 * The application must be able to provide data to match each of these types when
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
714 * a successful drop has occurred.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
715 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
716 * @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
717 * dragged from this source
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 public void setTransfer(Transfer[] transferAgents){
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
720 this.transferAgents = transferAgents;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
721 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
722
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
723 }