annotate dwtx/jface/viewers/ViewerDropAdapter.d @ 10:b6c35faf97c8

Viewers
author Frank Benoit <benoit@tionex.de>
date Mon, 31 Mar 2008 00:47:19 +0200
parents
children ea8ff534f622
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2007 IBM Corporation and others.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.viewers.ViewerDropAdapter;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.viewers.Viewer;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.viewers.IStructuredSelection;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwtx.jface.viewers.ISelection;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwt.dnd.DND;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.dnd.DropTargetAdapter;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.dnd.DropTargetEvent;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.dnd.TransferData;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.graphics.Point;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.graphics.Rectangle;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.widgets.Item;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.widgets.TableItem;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.widgets.TreeItem;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.dwthelper.utils;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 * This adapter class provides generic drag-and-drop support for a viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 * Subclasses must implement the following methods:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * <ul>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 * <li><code>validateDrop</code> - identifies valid drop targets in viewer</li>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 * <li><code>performDrop</code> - carries out a drop into a viewer</li>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * </ul>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * The <code>setFeedbackEnabled</code> method can be called to turn on and off
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * visual insertion feedback (on by default).
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 public abstract class ViewerDropAdapter : DropTargetAdapter {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * Constant describing the position of the cursor relative
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * to the target object. This means the mouse is positioned
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * slightly before the target.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * @see #getCurrentLocation()
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 public static const int LOCATION_BEFORE = 1;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * Constant describing the position of the cursor relative
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * to the target object. This means the mouse is positioned
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * slightly after the target.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * @see #getCurrentLocation()
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 public static const int LOCATION_AFTER = 2;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * Constant describing the position of the cursor relative
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * to the target object. This means the mouse is positioned
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * directly on the target.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * @see #getCurrentLocation()
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 public static const int LOCATION_ON = 3;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 * Constant describing the position of the cursor relative
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * to the target object. This means the mouse is not positioned
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * over or near any valid target.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 * @see #getCurrentLocation()
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 public static const int LOCATION_NONE = 4;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 * The viewer to which this drop support has been added.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 private Viewer viewer;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 * The current operation.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 private int currentOperation = DND.DROP_NONE;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * The last valid operation.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 private int lastValidOperation = DND.DROP_NONE;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 * The data item currently under the mouse.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 private Object currentTarget;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * Information about the position of the mouse relative to the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * target (before, on, or after the target. Location is one of
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * the <code>LOCATION_* </code> constants defined in this type.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 private int currentLocation;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 * A flag that allows adapter users to turn the insertion
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 * feedback on or off. Default is <code>true</code>.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 private bool feedbackEnabled = true;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 * A flag that allows adapter users to turn auto scrolling
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 * and expanding on or off. Default is <code>true</code>.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 private bool scrollExpandEnabled = true;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 * A flag that allows adapter users to turn selection feedback
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 * on or off. Default is <code>true</code>.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 private bool selectFeedbackEnabled = true;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * Creates a new drop adapter for the given viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 * @param viewer the viewer
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 protected this(Viewer viewer) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 this.viewer = viewer;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 * Returns the position of the given event's coordinates relative to its target.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 * The position is determined to be before, after, or on the item, based on
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 * some threshold value.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 * @param event the event
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 * @return one of the <code>LOCATION_* </code>constants defined in this class
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 protected int determineLocation(DropTargetEvent event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 if (!( cast(Item)event.item )) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 return LOCATION_NONE;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 Item item = cast(Item) event.item;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 Point coordinates = new Point(event.x, event.y);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 coordinates = viewer.getControl().toControl(coordinates);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 if (item !is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 Rectangle bounds = getBounds(item);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 if (bounds is null) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 return LOCATION_NONE;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 if ((coordinates.y - bounds.y) < 5) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 return LOCATION_BEFORE;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 if ((bounds.y + bounds.height - coordinates.y) < 5) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 return LOCATION_AFTER;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 return LOCATION_ON;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 * Returns the target item of the given drop event.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 * @param event the event
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 * @return The target of the drop, may be <code>null</code>.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 protected Object determineTarget(DropTargetEvent event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 return event.item is null ? null : event.item.getData();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 * Method declared on DropTargetAdapter.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 * The mouse has moved over the drop target. If the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 * target item has changed, notify the action and check
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 * that it is still enabled.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 private void doDropValidation(DropTargetEvent event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 //update last valid operation
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 if (event.detail !is DND.DROP_NONE) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 lastValidOperation = event.detail;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 //valid drop and set event detail accordingly
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 if (validateDrop(currentTarget, event.detail, event.currentDataType)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 currentOperation = lastValidOperation;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 } else {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 currentOperation = DND.DROP_NONE;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 event.detail = currentOperation;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 * Method declared on DropTargetAdapter.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 * The drag has entered this widget's region. See
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 * if the drop should be allowed.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 public void dragEnter(DropTargetEvent event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 currentTarget = determineTarget(event);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 doDropValidation(event);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 * Method declared on DropTargetAdapter.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 * The drop operation has changed, see if the action
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 * should still be enabled.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 public void dragOperationChanged(DropTargetEvent event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 currentTarget = determineTarget(event);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 doDropValidation(event);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 * Method declared on DropTargetAdapter.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 * The mouse has moved over the drop target. If the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 * target item has changed, notify the action and check
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * that it is still enabled.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 public void dragOver(DropTargetEvent event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 //use newly revealed item as target if scrolling occurs
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 Object target = determineTarget(event);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 //set the location feedback
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 int oldLocation = currentLocation;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 currentLocation = determineLocation(event);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 setFeedback(event, currentLocation);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 //see if anything has really changed before doing validation.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 if (target !is currentTarget || currentLocation !is oldLocation) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 currentTarget = target;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 doDropValidation(event);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 * Method declared on DropTargetAdapter.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 * The user has dropped something on the desktop viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 public void drop(DropTargetEvent event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 currentLocation = determineLocation(event);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 //perform the drop behavior
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 if (!performDrop(event.data)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 event.detail = DND.DROP_NONE;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 currentOperation = event.detail;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 * Method declared on DropTargetAdapter.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 * Last chance for the action to disable itself
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 public void dropAccept(DropTargetEvent event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 if (!validateDrop(currentTarget, event.detail, event.currentDataType)) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 event.detail = DND.DROP_NONE;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 * Returns the bounds of the given DWT tree or table item.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 * @param item the DWT Item
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 * @return the bounds, or <code>null</code> if it is not a known type of item
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 protected Rectangle getBounds(Item item) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 if ( auto i = cast(TreeItem)item ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 return i.getBounds();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 if (auto i = cast(TableItem)item ) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 return i.getBounds(0);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 return null;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 * Returns a constant describing the position of the mouse relative to the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 * target (before, on, or after the target.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 * @return one of the <code>LOCATION_* </code> constants defined in this type
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 protected int getCurrentLocation() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 return currentLocation;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 * Returns the current operation.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 * @return a <code>DROP_*</code> constant from class <code>DND</code>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 * @see DND#DROP_COPY
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 * @see DND#DROP_MOVE
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 * @see DND#DROP_LINK
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 * @see DND#DROP_NONE
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 protected int getCurrentOperation() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 return currentOperation;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 * Returns the target object currently under the mouse.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 * @return the current target object
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 protected Object getCurrentTarget() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 return currentTarget;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 * Returns whether visible insertion feedback should be presented to the user.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 * Typical insertion feedback is the horizontal insertion bars that appear
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 * between adjacent items while dragging.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 * @return <code>true</code> if visual feedback is desired, and <code>false</code> if not
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 public bool getFeedbackEnabled() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 return feedbackEnabled;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 * Returns the object currently selected by the viewer.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 * @return the selected object, or <code>null</code> if either no object or
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 * multiple objects are selected
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 protected Object getSelectedObject() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 ISelection selection = viewer.getSelection();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 if ( null !is cast(IStructuredSelection) selection && !selection.isEmpty()) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 IStructuredSelection structured = cast(IStructuredSelection) selection;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 return structured.getFirstElement();
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 return null;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 * @return the viewer to which this drop support has been added.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 protected Viewer getViewer() {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 return viewer;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 * @deprecated this method should not be used. Exception handling has been
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 * removed from DropTargetAdapter methods overridden by this class.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 * Handles any exception that occurs during callback, including
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 * rethrowing behavior.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 * [Issue: Implementation prints stack trace and eats exception to avoid
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 * crashing VA/J.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 * Consider conditionalizing the implementation to do one thing in VAJ
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 * and something more reasonable in other operating environments.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 * ]
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 * @param exception the exception
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 * @param event the event
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 protected void handleException(Exception exception, DropTargetEvent event) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 // Currently we never rethrow because VA/Java crashes if an DWT
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 // callback throws anything. Generally catching Throwable is bad, but in
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 // this cases it's better than hanging the image.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 ExceptionPrintStackTrace( exception );
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 event.detail = DND.DROP_NONE;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 * Performs any work associated with the drop.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 * Subclasses must implement this method to provide drop behavior.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 * @param data the drop data
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 * @return <code>true</code> if the drop was successful, and
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 * <code>false</code> otherwise
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 public abstract bool performDrop(Object data);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 /* (non-Javadoc)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 * Method declared on DropTargetAdapter.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 * The mouse has moved over the drop target. If the
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 * target item has changed, notify the action and check
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 * that it is still enabled.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 private void setFeedback(DropTargetEvent event, int location) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 if (feedbackEnabled) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 switch (location) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 case LOCATION_BEFORE:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 event.feedback = DND.FEEDBACK_INSERT_BEFORE;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 break;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 case LOCATION_AFTER:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 event.feedback = DND.FEEDBACK_INSERT_AFTER;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 break;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 case LOCATION_ON:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 default:
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 event.feedback = DND.FEEDBACK_SELECT;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 break;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 // Explicitly inhibit SELECT feedback if desired
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 if (!selectFeedbackEnabled) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 event.feedback &= ~DND.FEEDBACK_SELECT;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 if (scrollExpandEnabled) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 event.feedback |= DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 * Sets whether visible insertion feedback should be presented to the user.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 * Typical insertion feedback is the horizontal insertion bars that appear
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 * between adjacent items while dragging.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 * @param value
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 * <code>true</code> if visual feedback is desired, and
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 * <code>false</code> if not
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 public void setFeedbackEnabled(bool value) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 feedbackEnabled = value;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 * Sets whether selection feedback should be provided during dragging.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 * @param value <code>true</code> if selection feedback is desired, and
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 * <code>false</code> if not
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 * @since 3.2
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 public void setSelectionFeedbackEnabled(bool value) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 selectFeedbackEnabled = value;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 * Sets whether auto scrolling and expanding should be provided during dragging.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 * @param value <code>true</code> if scrolling and expanding is desired, and
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 * <code>false</code> if not
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 * @since 2.0
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 public void setScrollExpandEnabled(bool value) {
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 scrollExpandEnabled = value;
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 }
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 /**
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 * Validates dropping on the given object. This method is called whenever some
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 * aspect of the drop operation changes.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 * <p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 * Subclasses must implement this method to define which drops make sense.
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 * </p>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 *
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 * @param target the object that the mouse is currently hovering over, or
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 * <code>null</code> if the mouse is hovering over empty space
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 * @param operation the current drag operation (copy, move, etc.)
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 * @param transferType the current transfer type
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 * @return <code>true</code> if the drop is valid, and <code>false</code>
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459 * otherwise
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 */
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 public abstract bool validateDrop(Object target, int operation,
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 TransferData transferType);
b6c35faf97c8 Viewers
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 }