From f9faca4f7fbbedd387d4d89046092bcf3dddcb53 Mon Sep 17 00:00:00 2001 From: Florian Hoelzl <hoelzl@fortiss.org> Date: Mon, 12 Dec 2011 15:12:58 +0000 Subject: [PATCH] fixed data dictionary editor DND and partial rework of kernel DND. refs 346 --- .../trunk/META-INF/MANIFEST.MF | 3 +- .../base/ui/command/ConnectionCommand.java | 2 +- .../ConnectorConnectionCompositorBase.java | 2 +- ...archicElementConnectionCompositorBase.java | 4 +- ...nnectionCompositionDropTargetListener.java | 2 +- .../dnd/{ => gef}/ConnectionDragContext.java | 2 +- .../dnd/{ => gef}/ConnectionDropContext.java | 2 +- .../ElementCompositionDropTargetListener.java | 2 +- .../ui/dnd/{ => gef}/ElementDropContext.java | 2 +- .../ViewerElementCompositionDropAdapter.java | 113 ++++++++++++++++++ .../base/ui/editor/DiagramEditorBase.java | 2 +- .../base/ui/editor/TreeViewerEditorBase.java | 86 +------------ .../ConnectionGraphicalNodeEditPolicy.java | 2 +- .../RelayCreateCommandEditPolicyBase.java | 4 +- .../base/ui/utils/RectangleLayoutUtils.java | 2 +- .../ElementCompositionDropTargetAdapter.java | 7 +- .../kernel/ui/util/DragAndDropUtils.java | 16 +++ 17 files changed, 152 insertions(+), 101 deletions(-) rename org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/{ => gef}/ConnectionCompositionDropTargetListener.java (98%) rename org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/{ => gef}/ConnectionDragContext.java (98%) rename org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/{ => gef}/ConnectionDropContext.java (98%) rename org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/{ => gef}/ElementCompositionDropTargetListener.java (98%) rename org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/{ => gef}/ElementDropContext.java (98%) create mode 100644 org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/jface/ViewerElementCompositionDropAdapter.java diff --git a/org.fortiss.tooling.base.ui/trunk/META-INF/MANIFEST.MF b/org.fortiss.tooling.base.ui/trunk/META-INF/MANIFEST.MF index 1b301674c..6b838be09 100644 --- a/org.fortiss.tooling.base.ui/trunk/META-INF/MANIFEST.MF +++ b/org.fortiss.tooling.base.ui/trunk/META-INF/MANIFEST.MF @@ -15,7 +15,8 @@ Export-Package: org.fortiss.tooling.base.ui, org.fortiss.tooling.base.ui.compose, org.fortiss.tooling.base.ui.contentprovider, org.fortiss.tooling.base.ui.databinding, - org.fortiss.tooling.base.ui.dnd, + org.fortiss.tooling.base.ui.dnd.gef, + org.fortiss.tooling.base.ui.dnd.jface, org.fortiss.tooling.base.ui.editor, org.fortiss.tooling.base.ui.editpart, org.fortiss.tooling.base.ui.editpart.anchor, diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/command/ConnectionCommand.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/command/ConnectionCommand.java index 097523ba5..6e4b30a5f 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/command/ConnectionCommand.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/command/ConnectionCommand.java @@ -21,7 +21,7 @@ import org.eclipse.draw2d.geometry.Point; import org.eclipse.emf.ecore.EObject; import org.eclipse.gef.EditPart; import org.eclipse.gef.commands.Command; -import org.fortiss.tooling.base.ui.dnd.ConnectionDragContext; +import org.fortiss.tooling.base.ui.dnd.gef.ConnectionDragContext; import org.fortiss.tooling.base.ui.editpart.policy.ConnectionGraphicalNodeEditPolicy; import org.fortiss.tooling.kernel.service.IConnectionCompositorService; diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/ConnectorConnectionCompositorBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/ConnectorConnectionCompositorBase.java index 6f9f291bf..6baf83d31 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/ConnectorConnectionCompositorBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/ConnectorConnectionCompositorBase.java @@ -27,7 +27,7 @@ import org.fortiss.tooling.base.model.element.IConnection; import org.fortiss.tooling.base.model.element.IConnector; import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IModelElementSpecification; -import org.fortiss.tooling.base.ui.dnd.ConnectionDragContext; +import org.fortiss.tooling.base.ui.dnd.gef.ConnectionDragContext; import org.fortiss.tooling.base.ui.editpart.FreeConnectorEditPartBase; import org.fortiss.tooling.kernel.extension.IConnectionCompositor; import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext; diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/HierarchicElementConnectionCompositorBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/HierarchicElementConnectionCompositorBase.java index 8640db7fc..3e899772c 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/HierarchicElementConnectionCompositorBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/HierarchicElementConnectionCompositorBase.java @@ -23,8 +23,8 @@ import org.fortiss.tooling.base.model.element.IConnection; import org.fortiss.tooling.base.model.element.IConnector; import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IModelElementSpecification; -import org.fortiss.tooling.base.ui.dnd.ConnectionDragContext; -import org.fortiss.tooling.base.ui.dnd.ElementDropContext; +import org.fortiss.tooling.base.ui.dnd.gef.ConnectionDragContext; +import org.fortiss.tooling.base.ui.dnd.gef.ElementDropContext; import org.fortiss.tooling.base.ui.editpart.DiagramEditPartBase; import org.fortiss.tooling.kernel.extension.IConnectionCompositor; import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext; diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ConnectionCompositionDropTargetListener.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ConnectionCompositionDropTargetListener.java similarity index 98% rename from org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ConnectionCompositionDropTargetListener.java rename to org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ConnectionCompositionDropTargetListener.java index 5f3ebcc20..58ac7b506 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ConnectionCompositionDropTargetListener.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ConnectionCompositionDropTargetListener.java @@ -15,7 +15,7 @@ $Id$ | See the License for the specific language governing permissions and | | limitations under the License. | +--------------------------------------------------------------------------*/ -package org.fortiss.tooling.base.ui.dnd; +package org.fortiss.tooling.base.ui.dnd.gef; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.Request; diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ConnectionDragContext.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ConnectionDragContext.java similarity index 98% rename from org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ConnectionDragContext.java rename to org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ConnectionDragContext.java index e1406cd7a..bf2594268 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ConnectionDragContext.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ConnectionDragContext.java @@ -15,7 +15,7 @@ $Id$ | See the License for the specific language governing permissions and | | limitations under the License. | +--------------------------------------------------------------------------*/ -package org.fortiss.tooling.base.ui.dnd; +package org.fortiss.tooling.base.ui.dnd.gef; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.EditPart; diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ConnectionDropContext.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ConnectionDropContext.java similarity index 98% rename from org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ConnectionDropContext.java rename to org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ConnectionDropContext.java index cbb2c1477..ac58c5052 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ConnectionDropContext.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ConnectionDropContext.java @@ -15,7 +15,7 @@ $Id$ | See the License for the specific language governing permissions and | | limitations under the License. | +--------------------------------------------------------------------------*/ -package org.fortiss.tooling.base.ui.dnd; +package org.fortiss.tooling.base.ui.dnd.gef; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.EditPart; diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ElementCompositionDropTargetListener.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ElementCompositionDropTargetListener.java similarity index 98% rename from org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ElementCompositionDropTargetListener.java rename to org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ElementCompositionDropTargetListener.java index e91c75ed4..32fc03fea 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ElementCompositionDropTargetListener.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ElementCompositionDropTargetListener.java @@ -15,7 +15,7 @@ $Id$ | See the License for the specific language governing permissions and | | limitations under the License. | +--------------------------------------------------------------------------*/ -package org.fortiss.tooling.base.ui.dnd; +package org.fortiss.tooling.base.ui.dnd.gef; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.Request; diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ElementDropContext.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ElementDropContext.java similarity index 98% rename from org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ElementDropContext.java rename to org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ElementDropContext.java index 54159005c..d657631f5 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/ElementDropContext.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/gef/ElementDropContext.java @@ -15,7 +15,7 @@ $Id$ | See the License for the specific language governing permissions and | | limitations under the License. | +--------------------------------------------------------------------------*/ -package org.fortiss.tooling.base.ui.dnd; +package org.fortiss.tooling.base.ui.dnd.gef; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.EditPart; diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/jface/ViewerElementCompositionDropAdapter.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/jface/ViewerElementCompositionDropAdapter.java new file mode 100644 index 000000000..baa3e9b8e --- /dev/null +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/dnd/jface/ViewerElementCompositionDropAdapter.java @@ -0,0 +1,113 @@ +/*--------------------------------------------------------------------------+ +$Id$ +| | +| Copyright 2011 ForTISS GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.tooling.base.ui.dnd.jface; + +import static org.fortiss.tooling.kernel.ui.util.DragAndDropUtils.extractDroppedEObject; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerDropAdapter; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.DropTargetEvent; +import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.dnd.TransferData; +import org.fortiss.tooling.kernel.service.IElementCompositorService; +import org.fortiss.tooling.kernel.ui.dnd.CompositionServiceLocalTransfer; +import org.fortiss.tooling.kernel.ui.dnd.ElementCompositionDropTargetAdapter; +import org.fortiss.tooling.kernel.ui.util.DragAndDropUtils; +import org.fortiss.tooling.kernel.utils.ModelUtils; + +/** + * {@link ElementCompositionDropTargetAdapter} implementation for a JFace + * {@link TreeViewer}. + * + * @author hoelzl + * @author $Author$ + * @version $Rev$ + * @ConQAT.Rating RED Hash: + */ +public class ViewerElementCompositionDropAdapter extends ViewerDropAdapter { + + /** Remember the last target. */ + Object lastTarget = null; + + /** Constructor. */ + public ViewerElementCompositionDropAdapter(Viewer viewer) { + super(viewer); + setExpandEnabled(true); + } + + /** {@inheritDoc} */ + @Override + public boolean validateDrop(Object target, int operation, + TransferData transferType) { + if (target == null) { + target = getViewer().getInput(); + } + lastTarget = target; + + if (lastTarget instanceof EObject) { + EObject dropped = extractDroppedEObject(CompositionServiceLocalTransfer + .getInstance().getObject()); + + return IElementCompositorService.INSTANCE.canCompose( + (EObject) lastTarget, dropped, null); + } + return false; + } + + /** {@inheritDoc} */ + @Override + public boolean performDrop(Object data) { + if (lastTarget instanceof EObject) { + final EObject target = (EObject) lastTarget; + final EObject dropped = DragAndDropUtils + .extractDroppedEObject(data); + if (IElementCompositorService.INSTANCE.canCompose(target, dropped, + null)) { + ModelUtils.runAsCommand(target, new Runnable() { + @Override + public void run() { + IElementCompositorService.INSTANCE.compose(target, + dropped, null); + } + }); + return true; + } + } + return false; + } + + /** Returns the supported DND operations as defined in {@link DND}. */ + public int getSupportedDNDOperations() { + return DND.DROP_COPY; + } + + /** {@inheritDoc} */ + @Override + public void dragEnter(DropTargetEvent event) { + event.detail = DND.DROP_COPY; + super.dragEnter(event); + } + + /** Returns the preferred transfer for the DND operation. */ + public Transfer[] getPreferredTransfers() { + return DragAndDropUtils.getCompositionServiceTransfers(); + } +} diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/DiagramEditorBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/DiagramEditorBase.java index 6e5dc8eba..a578af775 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/DiagramEditorBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/DiagramEditorBase.java @@ -76,7 +76,7 @@ import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.fortiss.tooling.base.layout.DefaultLayoutConstants; import org.fortiss.tooling.base.ui.ToolingBaseUIActivator; -import org.fortiss.tooling.base.ui.dnd.ElementCompositionDropTargetListener; +import org.fortiss.tooling.base.ui.dnd.gef.ElementCompositionDropTargetListener; import org.fortiss.tooling.base.ui.editpart.ConnectorEditPartBase; import org.fortiss.tooling.base.ui.editpart.ExtendedLayerRootEditPart; import org.fortiss.tooling.base.ui.editpart.figure.EVisualStyle; diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/TreeViewerEditorBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/TreeViewerEditorBase.java index 0ef53ab5b..cb0e34d3e 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/TreeViewerEditorBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/TreeViewerEditorBase.java @@ -27,19 +27,11 @@ import org.eclipse.emf.ecore.util.EContentAdapter; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerDropAdapter; -import org.eclipse.swt.dnd.DND; -import org.eclipse.swt.dnd.DropTargetEvent; -import org.eclipse.swt.dnd.Transfer; -import org.eclipse.swt.dnd.TransferData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; -import org.fortiss.tooling.kernel.service.IElementCompositorService; +import org.fortiss.tooling.base.ui.dnd.jface.ViewerElementCompositionDropAdapter; import org.fortiss.tooling.kernel.ui.extension.base.EditorBase; -import org.fortiss.tooling.kernel.ui.util.DragAndDropUtils; import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils; /** @@ -76,11 +68,10 @@ public abstract class TreeViewerEditorBase<T extends EObject> extends setupTreeViewer(treeViewer); - // FIXME (FH): use new kernel DND mechanism - treeViewer.addDropSupport( - DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK, - new Transfer[] { LocalSelectionTransfer.getTransfer() }, - new TreeDropAdapter(treeViewer)); + ViewerElementCompositionDropAdapter dndAdapter = new ViewerElementCompositionDropAdapter( + treeViewer); + treeViewer.addDropSupport(dndAdapter.getSupportedDNDOperations(), + dndAdapter.getPreferredTransfers(), dndAdapter); treeViewer.setInput(editedObject); getEditorSite().setSelectionProvider(treeViewer); @@ -135,71 +126,4 @@ public abstract class TreeViewerEditorBase<T extends EObject> extends public void setFocus() { treeViewer.getTree().setFocus(); } - - /** The drop adapter for the tree. */ - private class TreeDropAdapter extends ViewerDropAdapter { - - /** Remember the last target. */ - Object lastTarget = null; - - /** Constructor. */ - private TreeDropAdapter(Viewer viewer) { - super(viewer); - setExpandEnabled(true); - } - - /** - * {@inheritDoc} - * <p> - * Hook this method to set a "valid" details field. - */ - @Override - public void dragEnter(DropTargetEvent event) { - event.detail = DND.DROP_COPY; - // event.data = LocalSelectionTransfer.getTransfer().getSelection(); - super.dragEnter(event); - } - - /** {@inheritDoc} */ - @Override - public boolean validateDrop(Object target, int operation, - TransferData transferType) { - if (target == null) { - target = treeViewer.getInput(); - } - lastTarget = target; - - if (lastTarget instanceof EObject) { - - EObject dropped = DragAndDropUtils - .extractDroppedEObject(LocalSelectionTransfer - .getTransfer().getSelection()); - - return IElementCompositorService.INSTANCE.canCompose( - (EObject) lastTarget, dropped, null); - } - return false; - } - - /** {@inheritDoc} */ - @Override - public boolean performDrop(Object data) { - if (lastTarget instanceof EObject) { - final EObject dropped = DragAndDropUtils - .extractDroppedEObject(data); - if (IElementCompositorService.INSTANCE.canCompose( - (EObject) lastTarget, dropped, null)) { - TreeViewerEditorBase.this.executeCommand(new Runnable() { - @Override - public void run() { - IElementCompositorService.INSTANCE.compose( - (EObject) lastTarget, dropped, null); - } - }); - return true; - } - } - return false; - } - } } diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/ConnectionGraphicalNodeEditPolicy.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/ConnectionGraphicalNodeEditPolicy.java index 82bf15034..72b36b90c 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/ConnectionGraphicalNodeEditPolicy.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/ConnectionGraphicalNodeEditPolicy.java @@ -25,7 +25,7 @@ import org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy; import org.eclipse.gef.requests.CreateConnectionRequest; import org.eclipse.gef.requests.ReconnectRequest; import org.fortiss.tooling.base.ui.command.ConnectionCommand; -import org.fortiss.tooling.base.ui.dnd.ConnectionDragContext; +import org.fortiss.tooling.base.ui.dnd.gef.ConnectionDragContext; /** * This is the edit policy to be installed on edit parts that allow creation of diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/RelayCreateCommandEditPolicyBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/RelayCreateCommandEditPolicyBase.java index 4ac294512..d7b3102e8 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/RelayCreateCommandEditPolicyBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/RelayCreateCommandEditPolicyBase.java @@ -25,8 +25,8 @@ import org.eclipse.gef.Request; import org.eclipse.gef.commands.Command; import org.eclipse.gef.editpolicies.LayoutEditPolicy; import org.eclipse.gef.requests.CreateRequest; -import org.fortiss.tooling.base.ui.dnd.ConnectionDropContext; -import org.fortiss.tooling.base.ui.dnd.ElementDropContext; +import org.fortiss.tooling.base.ui.dnd.gef.ConnectionDropContext; +import org.fortiss.tooling.base.ui.dnd.gef.ElementDropContext; import org.fortiss.tooling.base.ui.editpart.request.CreateConnectionCompositionRequest; import org.fortiss.tooling.base.ui.editpart.request.CreateElementCompositionRequest; import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext; diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/utils/RectangleLayoutUtils.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/utils/RectangleLayoutUtils.java index 20df2784e..219da0805 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/utils/RectangleLayoutUtils.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/utils/RectangleLayoutUtils.java @@ -26,7 +26,7 @@ import org.fortiss.tooling.base.layout.DefaultLayoutConstants; import org.fortiss.tooling.base.model.layout.EOrientation; import org.fortiss.tooling.base.model.layout.ILayoutedModelElement; import org.fortiss.tooling.base.model.layout.OffsetOrientation; -import org.fortiss.tooling.base.ui.dnd.ElementDropContext; +import org.fortiss.tooling.base.ui.dnd.gef.ElementDropContext; import org.fortiss.tooling.base.utils.LayoutModelElementFactory; /** diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionDropTargetAdapter.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionDropTargetAdapter.java index dad97433e..49bf542d9 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionDropTargetAdapter.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/dnd/ElementCompositionDropTargetAdapter.java @@ -37,8 +37,6 @@ import org.fortiss.tooling.kernel.service.IElementCompositorService; public abstract class ElementCompositionDropTargetAdapter extends DropTargetAdapter { - // TODO @review CD: Again: This class sure is useful yet has never been - // implemented. Has it ever been tested? /** {@inheritDoc} */ @Override public void drop(DropTargetEvent event) { @@ -57,13 +55,12 @@ public abstract class ElementCompositionDropTargetAdapter extends event.detail = DND.DROP_NONE; return; } - // TODO @review CD: abort when canCompose succeeds? if (IElementCompositorService.INSTANCE.canCompose(target, dragSource.getDesignatedElement(), null)) { - event.detail = DND.DROP_NONE; + event.detail = DND.DROP_COPY; return; } - event.detail = DND.DROP_COPY; + event.detail = DND.DROP_NONE; } /** Returns the current target element. */ diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/util/DragAndDropUtils.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/util/DragAndDropUtils.java index d092835a6..6f57012c8 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/util/DragAndDropUtils.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/util/DragAndDropUtils.java @@ -19,7 +19,9 @@ package org.fortiss.tooling.kernel.ui.util; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.dnd.Transfer; import org.fortiss.tooling.kernel.extension.data.Prototype; +import org.fortiss.tooling.kernel.ui.dnd.CompositionServiceLocalTransfer; import org.fortiss.tooling.kernel.ui.dnd.ElementCompositionSource; /** @@ -52,4 +54,18 @@ public final class DragAndDropUtils { } return null; } + + /** Returns the transfered element composition source. */ + public static ElementCompositionSource getElementCompositionSourceFromTransfer() { + return (ElementCompositionSource) CompositionServiceLocalTransfer + .getInstance().getObject(); + } + + /** + * Returns the preferred transfer for the DND operation via composition + * service. + */ + public static Transfer[] getCompositionServiceTransfers() { + return new Transfer[] { CompositionServiceLocalTransfer.getInstance() }; + } } -- GitLab