[jboss-cvs] jbosside/core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/packages/ui/dnd ...

Marshall Culpepper mculpepper at jboss.com
Mon Nov 6 16:36:51 EST 2006


  User: mculpepper
  Date: 06/11/06 16:36:51

  Added:       core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/packages/ui/dnd  
                        PackageNodeDragSource.java PackageDropTarget.java
  Log:
  initial commit of the new "packages" tooling ui plugin
  
  Revision  Changes    Path
  1.1      date: 2006/11/06 21:36:51;  author: mculpepper;  state: Exp;jbosside/core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/packages/ui/dnd/PackageNodeDragSource.java
  
  Index: PackageNodeDragSource.java
  ===================================================================
  package org.jboss.ide.eclipse.packages.ui.dnd;
  
  import java.util.Iterator;
  
  import org.eclipse.jface.util.LocalSelectionTransfer;
  import org.eclipse.jface.viewers.ITreeSelection;
  import org.eclipse.jface.viewers.TreeViewer;
  import org.eclipse.swt.dnd.DND;
  import org.eclipse.swt.dnd.DragSourceEvent;
  import org.eclipse.swt.dnd.DragSourceListener;
  import org.eclipse.swt.dnd.Transfer;
  import org.jboss.ide.eclipse.packages.core.model.IPackage;
  import org.jboss.ide.eclipse.packages.core.model.internal.PackageNodeImpl;
  import org.jboss.ide.eclipse.packages.core.model.internal.PackagesModel;
  
  public class PackageNodeDragSource implements DragSourceListener {
  
  	private TreeViewer viewer;
  	private ITreeSelection selection;
  	
  	public PackageNodeDragSource(TreeViewer viewer)
  	{
  		this.viewer = viewer;
  		
  		viewer.addDragSupport(DND.DROP_COPY | DND.DROP_MOVE,
  			new Transfer[] { LocalSelectionTransfer.getTransfer() }, this);
  	}
  
  	public void dragStart(DragSourceEvent event) {
  		event.doit = true;
  	}
  	
  	public void dragSetData(DragSourceEvent event) {
  		selection = (ITreeSelection) viewer.getSelection();
  		
  		if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType))
  		{
  			LocalSelectionTransfer.getTransfer().setSelection(selection);
  		}
  	}
  
  	
  	public void dragFinished(DragSourceEvent event) {
  		if (event.detail == DND.DROP_MOVE)
  		{
  			for (Iterator iter = selection.iterator(); iter.hasNext(); )
  			{
  				PackageNodeImpl node = (PackageNodeImpl) iter.next();
  				
  				if (node.getParent() != null)
  				{
  					PackageNodeImpl parent = (PackageNodeImpl) node.getParent();
  					parent.removeChild(node);
  				}
  				else {
  					PackagesModel.instance().removePackage((IPackage)node);
  				}
  				viewer.refresh();
  			}
  		}
  	}
  }
  
  
  
  1.1      date: 2006/11/06 21:36:51;  author: mculpepper;  state: Exp;jbosside/core/plugins/org.jboss.ide.eclipse.packages.ui/src/main/org/jboss/ide/eclipse/packages/ui/dnd/PackageDropTarget.java
  
  Index: PackageDropTarget.java
  ===================================================================
  package org.jboss.ide.eclipse.packages.ui.dnd;
  
  import java.util.Iterator;
  
  import org.eclipse.core.resources.IFile;
  import org.eclipse.core.resources.IFolder;
  import org.eclipse.core.resources.IResource;
  import org.eclipse.jface.util.LocalSelectionTransfer;
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.jface.viewers.TreeViewer;
  import org.eclipse.swt.dnd.DND;
  import org.eclipse.swt.dnd.DropTargetAdapter;
  import org.eclipse.swt.dnd.DropTargetEvent;
  import org.eclipse.swt.dnd.Transfer;
  import org.eclipse.swt.graphics.Point;
  import org.eclipse.swt.widgets.TreeItem;
  import org.eclipse.ui.part.ResourceTransfer;
  import org.jboss.ide.eclipse.packages.core.model.IPackageNode;
  import org.jboss.ide.eclipse.packages.core.model.IPackageNodeWorkingCopy;
  import org.jboss.ide.eclipse.packages.core.model.internal.PackageFileSetImpl;
  import org.jboss.ide.eclipse.packages.core.model.internal.PackageNodeImpl;
  import org.jboss.ide.eclipse.packages.core.model.internal.xb.XbFileSet;
  
  public class PackageDropTarget extends DropTargetAdapter {
  
  	private TreeViewer viewer;
  	
  	public PackageDropTarget(TreeViewer viewer) {
  		this.viewer = viewer;
  		
  		viewer.addDropSupport(DND.DROP_MOVE | DND.DROP_COPY,
  				new Transfer[] { LocalSelectionTransfer.getTransfer(), ResourceTransfer.getInstance() }, this);
  	}
  	
  	private PackageNodeImpl getDropTarget (DropTargetEvent event)
  	{
  		Point p = viewer.getTree().getDisplay().map(null, viewer.getTree(), event.x, event.y);
  		TreeItem dropTarget = viewer.getTree().getItem(p);
  		if (dropTarget == null)
  			return null;
  		
  		Object data = dropTarget.getData();
  		
  		if (data instanceof PackageNodeImpl)
  			return (PackageNodeImpl) data;
  		else return null;
  	}
  	
  	public void dragEnter(DropTargetEvent event) {
  		// convert the drop to a "copy" event so it doesn't get actually deleted in the file system (resources only)
  		if (ResourceTransfer.getInstance().isSupportedType(event.currentDataType))
  		{
  			if (event.detail == DND.DROP_MOVE || event.detail == DND.DROP_DEFAULT)
  			{
  				if ((event.operations & DND.DROP_COPY) != 0)
  					event.detail = DND.DROP_COPY;
  				else
  					event.detail = DND.DROP_NONE;
  			}
  		}
  		
  		PackageNodeImpl node = getDropTarget(event);
  		if (node == null || node.getNodeType() == IPackageNode.TYPE_PACKAGE_FILESET)
  		{
  			event.detail = DND.DROP_NONE;
  		}
  	}
  	
  	public void drop(DropTargetEvent event) {
  		PackageNodeImpl target = getDropTarget(event);
  		
  		if (target == null)
  			return;
  		
  		if (ResourceTransfer.getInstance().isSupportedType(event.currentDataType)
  			&& (event.data instanceof IResource[]))
  		{
  			IResource[] resources = (IResource[]) event.data;
  			
  			for (int i = 0; i < resources.length; i++)
  			{
  				IResource resource = resources[i];;
  				
  				if (resource.getType() == IResource.FILE)
  				{	
  					PackageFileSetImpl fileset = new PackageFileSetImpl(target.getProject(), new XbFileSet());
  					fileset.setSingleFile((IFile)resource);
  					if (!resource.getProject().equals(target.getProject()))
  					{
  						fileset.setSourceProject(resource.getProject());
  					}
  					
  					target.addChild(fileset);
  				}
  				else if (resource.getType() == IResource.FOLDER)
  				{
  					PackageFileSetImpl fileset = new PackageFileSetImpl(target.getProject(), new XbFileSet());
  					fileset.setSourceContainer((IFolder)resource);
  					fileset.setIncludesPattern("**/*");
  					if (!resource.getProject().equals(target.getProject()))
  					{
  						fileset.setSourceProject(resource.getProject());
  					}
  					
  					target.addChild(fileset);
  				}
  			}
  			
  			viewer.refresh();
  			event.detail = DND.DROP_COPY;
  		}
  		
  		else if (LocalSelectionTransfer.getTransfer().isSupportedType(event.currentDataType)
  			&& (LocalSelectionTransfer.getTransfer().getSelection() != null))
  		{
  			IStructuredSelection selection = (IStructuredSelection) LocalSelectionTransfer.getTransfer().getSelection();
  			
  			for (Iterator iter = selection.iterator(); iter.hasNext(); )
  			{
  				IPackageNodeWorkingCopy node = (IPackageNodeWorkingCopy) iter.next();
  				target.addChild(node);
  			}
  		}
  	}
  }
  
  
  



More information about the jboss-cvs-commits mailing list