diff --git a/org.eclipse.gef.examples.logic/src/org/eclipse/gef/examples/logicdesigner/LogicEditor.java b/org.eclipse.gef.examples.logic/src/org/eclipse/gef/examples/logicdesigner/LogicEditor.java index a80791c..afd8f2f 100644 --- a/org.eclipse.gef.examples.logic/src/org/eclipse/gef/examples/logicdesigner/LogicEditor.java +++ b/org.eclipse.gef.examples.logic/src/org/eclipse/gef/examples/logicdesigner/LogicEditor.java @@ -122,6 +122,7 @@ import org.eclipse.gef.ui.rulers.RulerComposite; import org.eclipse.gef.examples.logicdesigner.actions.IncrementDecrementAction; +import org.eclipse.gef.examples.logicdesigner.dnd.ResourceTransferDropTargetListener; import org.eclipse.gef.examples.logicdesigner.dnd.TextTransferDropTargetListener; import org.eclipse.gef.examples.logicdesigner.edit.GraphicalPartFactory; import org.eclipse.gef.examples.logicdesigner.edit.TreePartFactory; @@ -638,6 +639,10 @@ (TransferDropTargetListener) new TextTransferDropTargetListener( getGraphicalViewer(), TextTransfer .getInstance())); + getGraphicalViewer() + .addDropTargetListener( + (TransferDropTargetListener) new ResourceTransferDropTargetListener( + getGraphicalViewer())); } protected void createActions() { diff --git a/org.eclipse.gef.examples.logic/src/org/eclipse/gef/examples/logicdesigner/dnd/ResourceTransferDropTargetListener.java b/org.eclipse.gef.examples.logic/src/org/eclipse/gef/examples/logicdesigner/dnd/ResourceTransferDropTargetListener.java new file mode 100644 index 0000000..8b149a1 --- /dev/null +++ b/org.eclipse.gef.examples.logic/src/org/eclipse/gef/examples/logicdesigner/dnd/ResourceTransferDropTargetListener.java @@ -0,0 +1,46 @@ +package org.eclipse.gef.examples.logicdesigner.dnd; + +import org.eclipse.swt.dnd.DND; + +import org.eclipse.ui.part.ResourceTransfer; + +import org.eclipse.gef.EditPartViewer; +import org.eclipse.gef.Request; +import org.eclipse.gef.dnd.AbstractTransferDropTargetListener; +import org.eclipse.gef.requests.CreateRequest; +import org.eclipse.gef.requests.SimpleFactory; + +import org.eclipse.gef.examples.logicdesigner.model.LogicLabel; + +public class ResourceTransferDropTargetListener extends + AbstractTransferDropTargetListener { + public ResourceTransferDropTargetListener(EditPartViewer viewer) { + super(viewer, ResourceTransfer.getInstance()); + } + + protected Request createTargetRequest() { + CreateRequest request = new CreateRequest(); + request.setFactory(new SimpleFactory((Class) (Object) LogicLabel.class)); + return request; + } + + protected final CreateRequest getCreateRequest() { + return ((CreateRequest) getTargetRequest()); + } + + protected void handleDragOperationChanged() { + getCurrentEvent().detail = DND.DROP_COPY; + super.handleDragOperationChanged(); + } + + protected void handleDragOver() { + getCurrentEvent().detail = DND.DROP_COPY; + getCurrentEvent().feedback = DND.FEEDBACK_SCROLL | DND.FEEDBACK_EXPAND; + super.handleDragOver(); + } + + protected void updateTargetRequest() { + CreateRequest request = getCreateRequest(); + request.setLocation(getDropLocation()); + } +}