2
* Copyright (c) 2005-2010 Laf-Widget Kirill Grouchnikov. All Rights Reserved.
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are met:
7
* o Redistributions of source code must retain the above copyright notice,
8
* this list of conditions and the following disclaimer.
10
* o Redistributions in binary form must reproduce the above copyright notice,
11
* this list of conditions and the following disclaimer in the documentation
12
* and/or other materials provided with the distribution.
14
* o Neither the name of Laf-Widget Kirill Grouchnikov nor the names of
15
* its contributors may be used to endorse or promote products derived
16
* from this software without specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
package org.pushingpixels.lafwidget.tree.dnd;
32
import java.awt.Point;
33
import java.awt.dnd.*;
37
class AutoScrollingTreeDropTarget extends DropTarget {
38
private JViewport viewport;
39
private int scrollUnits;
42
AutoScrollingTreeDropTarget(JTree aTree, DropTargetListener listener) {
43
super(aTree, DnDConstants.ACTION_COPY_OR_MOVE, listener);
44
this.viewport = (JViewport) SwingUtilities.getAncestorOfClass(
45
JViewport.class, aTree);
46
this.scrollUnits = Math.max(aTree.getRowHeight(), 16);
50
private Point lastDragCursorLocn = new Point(0, 0);
53
protected void updateAutoscroll(Point dragCursorLocn) {
54
if (this.lastDragCursorLocn.equals(dragCursorLocn))
57
this.lastDragCursorLocn.setLocation(dragCursorLocn);
58
this.doAutoscroll(dragCursorLocn);
62
protected void initializeAutoscrolling(Point p) {
67
protected void clearAutoscroll() {
70
private static final int AUTOSCROLL_MARGIN = 16;
72
protected void doAutoscroll(Point aPoint) {
73
if (this.viewport == null)
76
Point treePosition = this.viewport.getViewPosition();
77
int vH = this.viewport.getExtentSize().height;
78
int vW = this.viewport.getExtentSize().width;
79
Point nextPoint = null;
80
if ((aPoint.y - treePosition.y) < AutoScrollingTreeDropTarget.AUTOSCROLL_MARGIN) {
81
nextPoint = new Point(treePosition.x, Math.max(treePosition.y
82
- this.scrollUnits, 0));
83
} else if (treePosition.y + vH - aPoint.y < AutoScrollingTreeDropTarget.AUTOSCROLL_MARGIN) {
84
nextPoint = new Point(treePosition.x, Math.min(aPoint.y
85
+ AutoScrollingTreeDropTarget.AUTOSCROLL_MARGIN, this.tree
88
} else if (aPoint.x - treePosition.x < AutoScrollingTreeDropTarget.AUTOSCROLL_MARGIN) {
89
nextPoint = new Point(Math.max(treePosition.x
90
- AutoScrollingTreeDropTarget.AUTOSCROLL_MARGIN, 0),
92
} else if (treePosition.x + vW - aPoint.x < AutoScrollingTreeDropTarget.AUTOSCROLL_MARGIN) {
93
nextPoint = new Point(Math.min(treePosition.x
94
+ AutoScrollingTreeDropTarget.AUTOSCROLL_MARGIN, this.tree
96
- vW), treePosition.y);
98
if (nextPoint != null)
99
this.viewport.setViewPosition(nextPoint);
b'\\ No newline at end of file'