Skip to content
Snippets Groups Projects
Commit f9faca4f authored by Florian Hölzl's avatar Florian Hölzl
Browse files

fixed data dictionary editor DND and partial rework of kernel DND.

refs 346
parent 8e8af6e3
No related branches found
No related tags found
No related merge requests found
Showing
with 152 additions and 101 deletions
...@@ -15,7 +15,8 @@ Export-Package: org.fortiss.tooling.base.ui, ...@@ -15,7 +15,8 @@ Export-Package: org.fortiss.tooling.base.ui,
org.fortiss.tooling.base.ui.compose, org.fortiss.tooling.base.ui.compose,
org.fortiss.tooling.base.ui.contentprovider, org.fortiss.tooling.base.ui.contentprovider,
org.fortiss.tooling.base.ui.databinding, 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.editor,
org.fortiss.tooling.base.ui.editpart, org.fortiss.tooling.base.ui.editpart,
org.fortiss.tooling.base.ui.editpart.anchor, org.fortiss.tooling.base.ui.editpart.anchor,
......
...@@ -21,7 +21,7 @@ import org.eclipse.draw2d.geometry.Point; ...@@ -21,7 +21,7 @@ import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPart;
import org.eclipse.gef.commands.Command; 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.base.ui.editpart.policy.ConnectionGraphicalNodeEditPolicy;
import org.fortiss.tooling.kernel.service.IConnectionCompositorService; import org.fortiss.tooling.kernel.service.IConnectionCompositorService;
......
...@@ -27,7 +27,7 @@ import org.fortiss.tooling.base.model.element.IConnection; ...@@ -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.IConnector;
import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IHierarchicElement;
import org.fortiss.tooling.base.model.element.IModelElementSpecification; 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.base.ui.editpart.FreeConnectorEditPartBase;
import org.fortiss.tooling.kernel.extension.IConnectionCompositor; import org.fortiss.tooling.kernel.extension.IConnectionCompositor;
import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext; import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext;
......
...@@ -23,8 +23,8 @@ import org.fortiss.tooling.base.model.element.IConnection; ...@@ -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.IConnector;
import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IHierarchicElement;
import org.fortiss.tooling.base.model.element.IModelElementSpecification; 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.dnd.ElementDropContext; import org.fortiss.tooling.base.ui.dnd.gef.ElementDropContext;
import org.fortiss.tooling.base.ui.editpart.DiagramEditPartBase; import org.fortiss.tooling.base.ui.editpart.DiagramEditPartBase;
import org.fortiss.tooling.kernel.extension.IConnectionCompositor; import org.fortiss.tooling.kernel.extension.IConnectionCompositor;
import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext; import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext;
......
...@@ -15,7 +15,7 @@ $Id$ ...@@ -15,7 +15,7 @@ $Id$
| See the License for the specific language governing permissions and | | See the License for the specific language governing permissions and |
| limitations under the License. | | 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.EditPartViewer;
import org.eclipse.gef.Request; import org.eclipse.gef.Request;
......
...@@ -15,7 +15,7 @@ $Id$ ...@@ -15,7 +15,7 @@ $Id$
| See the License for the specific language governing permissions and | | See the License for the specific language governing permissions and |
| limitations under the License. | | 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.draw2d.geometry.Point;
import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPart;
......
...@@ -15,7 +15,7 @@ $Id$ ...@@ -15,7 +15,7 @@ $Id$
| See the License for the specific language governing permissions and | | See the License for the specific language governing permissions and |
| limitations under the License. | | 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.draw2d.geometry.Point;
import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPart;
......
...@@ -15,7 +15,7 @@ $Id$ ...@@ -15,7 +15,7 @@ $Id$
| See the License for the specific language governing permissions and | | See the License for the specific language governing permissions and |
| limitations under the License. | | 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.EditPartViewer;
import org.eclipse.gef.Request; import org.eclipse.gef.Request;
......
...@@ -15,7 +15,7 @@ $Id$ ...@@ -15,7 +15,7 @@ $Id$
| See the License for the specific language governing permissions and | | See the License for the specific language governing permissions and |
| limitations under the License. | | 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.draw2d.geometry.Point;
import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPart;
......
/*--------------------------------------------------------------------------+
$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();
}
}
...@@ -76,7 +76,7 @@ import org.eclipse.ui.IWorkbenchPart; ...@@ -76,7 +76,7 @@ import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException; import org.eclipse.ui.PartInitException;
import org.fortiss.tooling.base.layout.DefaultLayoutConstants; import org.fortiss.tooling.base.layout.DefaultLayoutConstants;
import org.fortiss.tooling.base.ui.ToolingBaseUIActivator; 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.ConnectorEditPartBase;
import org.fortiss.tooling.base.ui.editpart.ExtendedLayerRootEditPart; import org.fortiss.tooling.base.ui.editpart.ExtendedLayerRootEditPart;
import org.fortiss.tooling.base.ui.editpart.figure.EVisualStyle; import org.fortiss.tooling.base.ui.editpart.figure.EVisualStyle;
......
...@@ -27,19 +27,11 @@ import org.eclipse.emf.ecore.util.EContentAdapter; ...@@ -27,19 +27,11 @@ import org.eclipse.emf.ecore.util.EContentAdapter;
import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.TreeViewer; 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.Composite;
import org.eclipse.swt.widgets.Menu; 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.extension.base.EditorBase;
import org.fortiss.tooling.kernel.ui.util.DragAndDropUtils;
import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils; import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils;
/** /**
...@@ -76,11 +68,10 @@ public abstract class TreeViewerEditorBase<T extends EObject> extends ...@@ -76,11 +68,10 @@ public abstract class TreeViewerEditorBase<T extends EObject> extends
setupTreeViewer(treeViewer); setupTreeViewer(treeViewer);
// FIXME (FH): use new kernel DND mechanism ViewerElementCompositionDropAdapter dndAdapter = new ViewerElementCompositionDropAdapter(
treeViewer.addDropSupport( treeViewer);
DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK, treeViewer.addDropSupport(dndAdapter.getSupportedDNDOperations(),
new Transfer[] { LocalSelectionTransfer.getTransfer() }, dndAdapter.getPreferredTransfers(), dndAdapter);
new TreeDropAdapter(treeViewer));
treeViewer.setInput(editedObject); treeViewer.setInput(editedObject);
getEditorSite().setSelectionProvider(treeViewer); getEditorSite().setSelectionProvider(treeViewer);
...@@ -135,71 +126,4 @@ public abstract class TreeViewerEditorBase<T extends EObject> extends ...@@ -135,71 +126,4 @@ public abstract class TreeViewerEditorBase<T extends EObject> extends
public void setFocus() { public void setFocus() {
treeViewer.getTree().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;
}
}
} }
...@@ -25,7 +25,7 @@ import org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy; ...@@ -25,7 +25,7 @@ import org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy;
import org.eclipse.gef.requests.CreateConnectionRequest; import org.eclipse.gef.requests.CreateConnectionRequest;
import org.eclipse.gef.requests.ReconnectRequest; import org.eclipse.gef.requests.ReconnectRequest;
import org.fortiss.tooling.base.ui.command.ConnectionCommand; 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 * This is the edit policy to be installed on edit parts that allow creation of
......
...@@ -25,8 +25,8 @@ import org.eclipse.gef.Request; ...@@ -25,8 +25,8 @@ import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command; import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editpolicies.LayoutEditPolicy; import org.eclipse.gef.editpolicies.LayoutEditPolicy;
import org.eclipse.gef.requests.CreateRequest; import org.eclipse.gef.requests.CreateRequest;
import org.fortiss.tooling.base.ui.dnd.ConnectionDropContext; import org.fortiss.tooling.base.ui.dnd.gef.ConnectionDropContext;
import org.fortiss.tooling.base.ui.dnd.ElementDropContext; 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.CreateConnectionCompositionRequest;
import org.fortiss.tooling.base.ui.editpart.request.CreateElementCompositionRequest; import org.fortiss.tooling.base.ui.editpart.request.CreateElementCompositionRequest;
import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext; import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext;
......
...@@ -26,7 +26,7 @@ import org.fortiss.tooling.base.layout.DefaultLayoutConstants; ...@@ -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.EOrientation;
import org.fortiss.tooling.base.model.layout.ILayoutedModelElement; import org.fortiss.tooling.base.model.layout.ILayoutedModelElement;
import org.fortiss.tooling.base.model.layout.OffsetOrientation; 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; import org.fortiss.tooling.base.utils.LayoutModelElementFactory;
/** /**
......
...@@ -37,8 +37,6 @@ import org.fortiss.tooling.kernel.service.IElementCompositorService; ...@@ -37,8 +37,6 @@ import org.fortiss.tooling.kernel.service.IElementCompositorService;
public abstract class ElementCompositionDropTargetAdapter extends public abstract class ElementCompositionDropTargetAdapter extends
DropTargetAdapter { DropTargetAdapter {
// TODO @review CD: Again: This class sure is useful yet has never been
// implemented. Has it ever been tested?
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public void drop(DropTargetEvent event) { public void drop(DropTargetEvent event) {
...@@ -57,13 +55,12 @@ public abstract class ElementCompositionDropTargetAdapter extends ...@@ -57,13 +55,12 @@ public abstract class ElementCompositionDropTargetAdapter extends
event.detail = DND.DROP_NONE; event.detail = DND.DROP_NONE;
return; return;
} }
// TODO @review CD: abort when canCompose succeeds?
if (IElementCompositorService.INSTANCE.canCompose(target, if (IElementCompositorService.INSTANCE.canCompose(target,
dragSource.getDesignatedElement(), null)) { dragSource.getDesignatedElement(), null)) {
event.detail = DND.DROP_NONE; event.detail = DND.DROP_COPY;
return; return;
} }
event.detail = DND.DROP_COPY; event.detail = DND.DROP_NONE;
} }
/** Returns the current target element. */ /** Returns the current target element. */
......
...@@ -19,7 +19,9 @@ package org.fortiss.tooling.kernel.ui.util; ...@@ -19,7 +19,9 @@ package org.fortiss.tooling.kernel.ui.util;
import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.IStructuredSelection; 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.extension.data.Prototype;
import org.fortiss.tooling.kernel.ui.dnd.CompositionServiceLocalTransfer;
import org.fortiss.tooling.kernel.ui.dnd.ElementCompositionSource; import org.fortiss.tooling.kernel.ui.dnd.ElementCompositionSource;
/** /**
...@@ -52,4 +54,18 @@ public final class DragAndDropUtils { ...@@ -52,4 +54,18 @@ public final class DragAndDropUtils {
} }
return null; 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() };
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment