/* * 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-2000 Sun * Microsystems, Inc. All Rights Reserved. */ package org.openide.explorer.view; import java.awt.dnd.*; import java.awt.Point; import javax.swing.JList; import org.openide.nodes.Node; /** * * @author Dafe Simonek, Jiri Rechtacek */ class ListViewDragSupport extends ExplorerDragSupport { // Attributes /** Holds selected indices - it's here only * as a workaround for sun's bug */ /*int[] oldSelection; int[] curSelection;*/ // Associations /** The view that manages viewing the data in a tree. */ protected ListView view; /** The tree which we are supporting (our client) */ protected JList list; // Operations /** Creates new TreeViewDragSupport, initializes gesture */ public ListViewDragSupport (ListView view, JList list) { this.comp = list; this.view = view; this.list = list; } /** Initiating the drag */ public void dragGestureRecognized (DragGestureEvent dge) { super.dragGestureRecognized (dge); } /** Utility method. Returns either selected nodes in the list * (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) { Point dragOrigin = dge.getDragOrigin(); int index = list.locationToIndex(dge.getDragOrigin()); Object obj = list.getModel().getElementAt(index); if( obj instanceof VisualizerNode ) obj = ((VisualizerNode) obj).node; // check conditions if( (index < 0) ) return null; if( !( obj instanceof Node) ) return null; Node[] result = null; if (list.isSelectedIndex(index)) { // cursor is above selection, so return all selected indices Object[] selected = list.getSelectedValues(); result = new Node[selected.length]; for (int i = 0; i < selected.length; i++) { if( selected[i] instanceof VisualizerNode ) result[i] = ((VisualizerNode) selected[i]).node; else { if (!( selected[i] instanceof Node)) return null; result[i] = (Node)selected[i]; } } } else { // return only the node the cursor is above result = new Node[] { (Node)obj }; } return result; } } // end of ListViewDragSupport