Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 197965 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jface/viewers/ViewerDropAdapter.java (-13 / +37 lines)
Lines 173-188 Link Here
173
     * that it is still enabled.
173
     * that it is still enabled.
174
     */
174
     */
175
    private void doDropValidation(DropTargetEvent event) {
175
    private void doDropValidation(DropTargetEvent event) {
176
        //update last valid operation
176
        currentOperation= determineOperation(currentTarget, lastValidOperation, event.currentDataType);
177
        if (event.detail != DND.DROP_NONE) {
178
            lastValidOperation = event.detail;
179
        }
180
        //valid drop and set event detail accordingly
181
        if (validateDrop(currentTarget, event.detail, event.currentDataType)) {
182
            currentOperation = lastValidOperation;
183
        } else {
184
            currentOperation = DND.DROP_NONE;
185
        }
186
        event.detail = currentOperation;
177
        event.detail = currentOperation;
187
    }
178
    }
188
179
Lines 193-198 Link Here
193
     */
184
     */
194
    public void dragEnter(DropTargetEvent event) {
185
    public void dragEnter(DropTargetEvent event) {
195
        currentTarget = determineTarget(event);
186
        currentTarget = determineTarget(event);
187
        lastValidOperation = event.detail;
196
        doDropValidation(event);
188
        doDropValidation(event);
197
    }
189
    }
198
190
Lines 203-208 Link Here
203
     */
195
     */
204
    public void dragOperationChanged(DropTargetEvent event) {
196
    public void dragOperationChanged(DropTargetEvent event) {
205
        currentTarget = determineTarget(event);
197
        currentTarget = determineTarget(event);
198
        lastValidOperation = event.detail;
206
        doDropValidation(event);
199
        doDropValidation(event);
207
    }
200
    }
208
201
Lines 247-255 Link Here
247
     * Last chance for the action to disable itself
240
     * Last chance for the action to disable itself
248
     */
241
     */
249
    public void dropAccept(DropTargetEvent event) {
242
    public void dropAccept(DropTargetEvent event) {
250
        if (!validateDrop(currentTarget, event.detail, event.currentDataType)) {
243
        event.detail= determineOperation(currentTarget, event.detail, event.currentDataType);
251
            event.detail = DND.DROP_NONE;
252
        }
253
    }
244
    }
254
245
255
    /**
246
    /**
Lines 484-487 Link Here
484
     */
475
     */
485
    public abstract boolean validateDrop(Object target, int operation,
476
    public abstract boolean validateDrop(Object target, int operation,
486
            TransferData transferType);
477
            TransferData transferType);
478
    
479
    /**
480
     * Determine the operation which should be executed given the target and the operation
481
     * requested by the user. This method is called whenever some aspect of the drop operation 
482
     * changes. The operation is one of DND#DROP_DEFAULT, DND#DROP_COPY, DND#DROP_MOVE, DND#DROP_LINK.
483
     * <p>
484
     * The method returns the operation valid in the given context. The result is one of
485
     * DND#DROP_NONE, DND#DROP_COPY, DND#DROP_MOVE, DND#DROP_LINK, DND#DROP_DEFAULT.
486
     * </p>
487
     * <p>
488
     * Subclasses can overwrite this method to define which operation does make
489
     * sense in the given context.
490
     * </p>
491
     * 
492
     * @param target the object that the mouse is currently hovering over, or
493
     *   <code>null</code> if the mouse is hovering over empty space
494
     * @param operation the current drag operation (copy, move, etc.)
495
     * @param transferType the current transfer type
496
     * @return the operation which will be executed if no modifier key is pressed
497
     * 		by the user
498
     * 
499
     * @see DND#DROP_NONE
500
	 * @see DND#DROP_MOVE
501
	 * @see DND#DROP_COPY
502
	 * @see DND#DROP_LINK
503
     */
504
    protected int determineOperation(Object target, int operation, TransferData transferType) {
505
    	if (!validateDrop(target, operation, transferType)) {
506
    		return DND.DROP_NONE;
507
    	}
508
509
    	return operation;
510
    }
487
}
511
}

Return to bug 197965