|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.openide.explorer.view;
import java.awt.dnd.*;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.*;
import org.openide.nodes.Node;
import org.openide.explorer.ExplorerManager;
/** Support for the drag operations in the TreeView.
*
* @author Dafe Simonek, Jiri Rechtacek
*/
final class TreeViewDragSupport extends ExplorerDragSupport {
// Attributes
// Associations
/** The view that manages viewing the data in a tree. */
protected TreeView view;
/** The tree which we are supporting (our client) */
private JTree tree;
/** Cell renderer - PENDING - do we need it? */
//protected DnDTreeViewCellRenderer cellRenderer;
// Operations
/** Creates new TreeViewDragSupport, initializes gesture */
public TreeViewDragSupport(TreeView view, JTree tree) {
this.view = view;
this.comp = tree;
this.tree = tree;
}
public void dragGestureRecognized (DragGestureEvent dge) {
super.dragGestureRecognized (dge);
// notify tree cell editor that DnD operationm is active
if (exDnD.isDnDActive ()) {
TreeCellEditor tce = ((JTree)tree).getCellEditor ();
if (tce instanceof TreeViewCellEditor)
((TreeViewCellEditor)tce).setDnDActive (true);
}
}
public void dragDropEnd (DragSourceDropEvent dsde) {
// get the droped nodes
Node[] dropedNodes = exDnD.getDraggedNodes ();
super.dragDropEnd (dsde);
// if any original glass pane was stored (the DnD was broken e.g. by Esc)
if (DropGlassPane.isOriginalPaneStored ()) {
// give back the orig glass pane
DropGlassPane.putBackOriginal ();
// DnD is not active
exDnD.setDnDActive (false);
}
// select the droped nodes
try {
if (dropedNodes!=null) {
ExplorerManager.Provider panel = (ExplorerManager.Provider)SwingUtilities
.getAncestorOfClass(ExplorerManager.Provider.class, view);
if (panel!=null) {
panel.getExplorerManager ().setSelectedNodes (dropedNodes);
}
}
} catch (Exception e) {
// don't care
}
// notify tree cell editor that DnD operationm is active
// no more
TreeCellEditor tce = tree.getCellEditor();
if (tce instanceof TreeViewCellEditor)
((TreeViewCellEditor)tce).setDnDActive (false);
}
/** Utility method. Returns either selected nodes in tree
* (if cursor hotspot is above some selected node) or the node
* the cursor points to.
* @return Node array or null if position of the cursor points
* to no node.
*/
Node[] obtainNodes (DragGestureEvent dge) {
TreePath[] tps = tree.getSelectionPaths ();
if (tps == null) return null;
Node[] result = new Node[tps.length];
int cnt = 0;
for (int i = 0; i < tps.length; i++) {
if (tree.getPathBounds (tps[i]).contains (
dge.getDragOrigin ()
)) {
cnt++;
}
result[i] = DragDropUtilities.secureFindNode (tps[i].getLastPathComponent ());
}
// #41954:
// if the drag source is not at all in path location, do not return
// any nodes
return cnt == 0 ? null : result;
}
} /* end class TreeViewDragSupport */
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.