use of org.eclipse.gef.editparts.ScalableFreeformRootEditPart in project tdi-studio-se by Talend.
the class ComponentChooseDialog method dragOver.
@Override
public void dragOver(DropTargetEvent event) {
// multi-drag for job,context, sqlPattern.
IStructuredSelection selection = getSelection();
if (selection.size() > 1) {
boolean allowed = true;
Item temItem = null;
Iterator iter = selection.iterator();
while (iter.hasNext()) {
Object next = iter.next();
if (next instanceof RepositoryNode) {
RepositoryNode sourceNode = (RepositoryNode) next;
IRepositoryViewObject object = sourceNode.getObject();
if (object != null) {
Item selectItem = object.getProperty().getItem();
if (temItem == null) {
temItem = selectItem;
continue;
}
if (selectItem instanceof ProcessItem && !(temItem instanceof ProcessItem)) {
allowed = false;
} else if (selectItem instanceof ContextItem && !(temItem instanceof ContextItem)) {
allowed = false;
} else if (selectItem instanceof SQLPatternItem && !(temItem instanceof SQLPatternItem)) {
allowed = false;
}
}
}
}
if (!allowed) {
event.detail = DND.DROP_NONE;
}
} else {
CreateRequest req = ((CreateRequest) getTargetRequest());
Object o = null;
try {
o = req.getNewObject();
} catch (Exception e) {
return;
}
if (!(o instanceof Node)) {
return;
}
RootEditPart rep = editor.getViewer().getRootEditPart().getRoot();
Point viewOriginalPosition = new Point();
if (rep instanceof ScalableFreeformRootEditPart) {
ScalableFreeformRootEditPart root = (ScalableFreeformRootEditPart) rep;
Viewport viewport = (Viewport) root.getFigure();
viewOriginalPosition = viewport.getViewLocation();
}
org.eclipse.swt.graphics.Point swtLocation = new org.eclipse.swt.graphics.Point(event.x + viewOriginalPosition.x, event.y + viewOriginalPosition.y);
Canvas canvas = (Canvas) editor.getViewer().getControl();
swtLocation = canvas.toControl(swtLocation);
// System.out.println("topLeft:" + topLeftpoint + " / event:" + swtLocation);
org.eclipse.draw2d.geometry.Point draw2dPosition = new org.eclipse.draw2d.geometry.Point(swtLocation.x, swtLocation.y);
double zoom = 1.0;
if (editor.getViewer().getRootEditPart() instanceof TalendScalableFreeformRootEditPart) {
ZoomManager zoomManager = ((TalendScalableFreeformRootEditPart) editor.getViewer().getRootEditPart()).getZoomManager();
zoom = zoomManager.getZoom();
}
List<ConnectionPart> connectionParts = CreateComponentOnLinkHelper.getConnectionParts(editor.getProcessPart(), draw2dPosition, (Node) o);
double minDistance = 1000000000;
for (ConnectionPart part : connectionParts) {
if (part.getFigure() instanceof PolylineConnection) {
PolylineConnection connection = (PolylineConnection) part.getFigure();
double distance = CreateComponentOnLinkHelper.getDistanceOrthogonal(draw2dPosition.x, draw2dPosition.y, connection, zoom);
if (distance < minDistance) {
selectedConnectionPart = part;
minDistance = Math.min(distance, minDistance);
}
}
}
if (selectedConnectionPart != null && minDistance < 15) {
for (Object child : editor.getProcessPart().getChildren()) {
if (child instanceof SubjobContainerPart) {
CreateComponentOnLinkHelper.unselectAllConnections((SubjobContainerPart) child);
}
}
CreateComponentOnLinkHelper.selectConnection(selectedConnectionPart);
} else {
if (selectedConnectionPart != null) {
CreateComponentOnLinkHelper.unselectConnection(selectedConnectionPart);
}
selectedConnectionPart = null;
}
}
}
use of org.eclipse.gef.editparts.ScalableFreeformRootEditPart in project tdi-studio-se by Talend.
the class ComponentChooseDialog method createComponentOnLink.
private boolean createComponentOnLink(Node node, Point originalPoint) {
boolean executed = false;
RootEditPart rep = editor.getViewer().getRootEditPart().getRoot();
Point viewOriginalPosition = new Point();
if (rep instanceof ScalableFreeformRootEditPart) {
ScalableFreeformRootEditPart root = (ScalableFreeformRootEditPart) rep;
Viewport viewport = (Viewport) root.getFigure();
viewOriginalPosition = viewport.getViewLocation();
}
Point point = new Point(originalPoint.x + viewOriginalPosition.x, originalPoint.y + viewOriginalPosition.y);
point.x = (int) (point.x / AnimatableZoomManager.currentZoom);
point.y = (int) (point.y / AnimatableZoomManager.currentZoom);
org.talend.designer.core.ui.editor.connections.Connection targetConnection = null;
if (selectedConnectionPart != null) {
targetConnection = (org.talend.designer.core.ui.editor.connections.Connection) selectedConnectionPart.getModel();
}
if (targetConnection != null) {
IProcess2 p = editor.getProcess();
NodeContainer nodeContainer = ((Process) node.getProcess()).loadNodeContainer(node, false);
// TDI-21099
if (p instanceof Process) {
CreateNodeContainerCommand createCmd = new CreateNodeContainerCommand((Process) p, nodeContainer, point);
execCommandStack(createCmd);
// reconnect the node
Node originalTarget = (Node) targetConnection.getTarget();
EConnectionType connectionType = EConnectionType.FLOW_MAIN;
if (GlobalServiceRegister.getDefault().isServiceRegistered(ICamelDesignerCoreService.class)) {
ICamelDesignerCoreService camelService = (ICamelDesignerCoreService) GlobalServiceRegister.getDefault().getService(ICamelDesignerCoreService.class);
if (camelService.isRouteBuilderNode(node)) {
connectionType = camelService.getTargetConnectionType(node);
}
}
INodeConnector targetConnector = node.getConnectorFromType(connectionType);
for (INodeConnector connector : node.getConnectorsFromType(connectionType)) {
if (connector.getMaxLinkOutput() != 0) {
targetConnector = connector;
break;
}
}
ConnectionCreateCommand.setCreatingConnection(true);
// bug 21411
if (PluginChecker.isJobLetPluginLoaded()) {
IJobletProviderService service = (IJobletProviderService) GlobalServiceRegister.getDefault().getService(IJobletProviderService.class);
if (service != null && service.isJobletComponent(targetConnection.getTarget())) {
if (targetConnection.getTarget() instanceof Node) {
NodeContainer jobletContainer = ((Node) targetConnection.getTarget()).getNodeContainer();
// remove the old connection in the container
jobletContainer.getInputs().remove(targetConnection);
}
}
}
ConnectionReconnectCommand cmd2 = new ConnectionReconnectCommand(targetConnection);
cmd2.setNewTarget(node);
execCommandStack(cmd2);
List<Object> nodeArgs = CreateComponentOnLinkHelper.getTargetArgs(targetConnection, node);
ConnectionCreateCommand nodeCmd = new ConnectionCreateCommand(node, targetConnector.getName(), nodeArgs, false);
nodeCmd.setTarget(originalTarget);
execCommandStack(nodeCmd);
// Setting,such as the target is TMap
if (node.getOutgoingConnections().size() > 0) {
if (node.getExternalNode() instanceof MapperExternalNode) {
CreateComponentOnLinkHelper.setupTMap(node);
}
if (originalTarget.getExternalNode() instanceof MapperExternalNode) {
CreateComponentOnLinkHelper.updateTMap(originalTarget, targetConnection, node.getOutgoingConnections().get(0));
}
originalTarget.renameData(targetConnection.getName(), node.getOutgoingConnections().get(0).getName());
}
if (!ConnectionCreateCommand.isCreatingConnection()) {
return true;
}
executed = true;
}
}
return executed;
}
use of org.eclipse.gef.editparts.ScalableFreeformRootEditPart in project knime-core by knime.
the class WorkflowGraphicalViewerCreator method createViewer.
/**
* Creates the viewer control, and connect it to a root edit part Additionally the viewer gets the edit part factory
* and a drop-listener.
*
* @param parent Parent composite
* @return The viewer
*/
protected GraphicalViewer createViewer(final Composite parent) {
ScrollingGraphicalViewer viewer = new ScrollingGraphicalViewer();
viewer.createControl(parent);
// configure the m_viewer
viewer.getControl().setBackground(ColorConstants.white);
ScalableFreeformRootEditPart part = new ConnectionSelectingScalableFreeformRootEditPart();
viewer.setRootEditPart(part);
viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer));
// Add drop listeners
viewer.addDropTargetListener(new NodeDropTargetListener(viewer));
viewer.addDropTargetListener(new MetaNodeDropTargetListener(viewer));
viewer.addDropTargetListener(new WorkflowEditorFileDropTargetListener(viewer));
viewer.addDropTargetListener(new WorkflowEditorSelectionDropListener(viewer));
// DO NOT Add drag listener
/* Don't add any drag listener here. Processing of drag events seems
* to influence GEF events (resize, node move, create connection).
* See bug 2844 for details (linux only) */
MetaNodeTemplateDropTargetListener metaNodeTemplateDropListener = new MetaNodeTemplateDropTargetListener(viewer);
viewer.addDropTargetListener(metaNodeTemplateDropListener);
// configure context menu
viewer.setContextMenu(new WorkflowContextMenuProvider(m_actionRegistry, viewer));
m_editorSite.registerContextMenu(viewer.getContextMenu(), viewer, false);
// set the factory that is able to create the edit parts to be
// used in the viewer
viewer.setEditPartFactory(new WorkflowEditPartFactory());
return viewer;
}
use of org.eclipse.gef.editparts.ScalableFreeformRootEditPart in project knime-core by knime.
the class AddMetaNodeWizard method createMetaNodeFromPorts.
private void createMetaNodeFromPorts(final PortType[] inPorts, final PortType[] outPorts, final String name) {
Viewport viewPort = ((ScalableFreeformRootEditPart) m_wfEditor.getViewer().getRootEditPart()).getZoomManager().getViewport();
// get the currently visible area
Rectangle rect = viewPort.getClientArea();
// translate it to absolute coordinates (with respect to the scrolled
// editor viewer)
viewPort.translateToAbsolute(rect.getLocation());
// now we have an absolute point for the new metanode location
org.eclipse.draw2d.geometry.Point location = new org.eclipse.draw2d.geometry.Point(rect.x + (rect.width / 2), rect.y + (rect.height / 2));
// in order to get a local (relative position we have to substract the
// invisible offset
Point adaptedLoc = new Point(location.x - rect.x, location.y - rect.y);
EditPart ep;
// iterate until we have found a free place on the editor
do {
// we have to use the adaptedLoc (which is the relative position)
ep = m_wfEditor.getViewer().findObjectAt(adaptedLoc);
if (ep instanceof NodeContainerEditPart) {
// offset the absolute location
location.x += ((NodeContainerEditPart) ep).getFigure().getBounds().width;
location.y += ((NodeContainerEditPart) ep).getFigure().getBounds().height;
// offset the relative position
adaptedLoc.x += ((NodeContainerEditPart) ep).getFigure().getBounds().width;
adaptedLoc.y += ((NodeContainerEditPart) ep).getFigure().getBounds().height;
}
} while (ep instanceof NodeContainerEditPart);
AddNewMetaNodeCommand cmd = new AddNewMetaNodeCommand(m_wfEditor.getWorkflowManager().get(), inPorts, outPorts, name, location);
m_wfEditor.getViewer().getEditDomain().getCommandStack().execute(cmd);
}
use of org.eclipse.gef.editparts.ScalableFreeformRootEditPart in project yamcs-studio by yamcs.
the class OPIEditor method getAdapter.
@Override
public Object getAdapter(@SuppressWarnings("rawtypes") Class type) {
if (type == IPropertySheetPage.class)
return getPropertySheetPage();
else if (type == ZoomManager.class)
return ((ScalableFreeformRootEditPart) getGraphicalViewer().getRootEditPart()).getZoomManager();
else // return getOverviewOutlinePage();
if (type == IContentOutlinePage.class) {
outlinePage = new OutlinePage(new TreeViewer());
return outlinePage;
} else if (type.equals(IContextProvider.class)) {
if (helpContextProvider == null)
helpContextProvider = new OPIHelpContextProvider(getGraphicalViewer());
return helpContextProvider;
} else if (type.equals(IGotoMarker.class)) {
return new IGotoMarker() {
@Override
public void gotoMarker(IMarker marker) {
try {
String wuid = (String) marker.getAttribute(AbstractWidgetModel.PROP_WIDGET_UID);
if (wuid == null) {
// if wuid is not stored in the marker try to find it based on character
Integer charStart = (Integer) marker.getAttribute(IMarker.CHAR_START);
if (charStart == null) {
return;
}
// Get the closest widget to charStart position
wuid = XMLUtil.findClosestWidgetUid(getInputStream(), charStart);
if (wuid == null) {
return;
}
}
AbstractWidgetModel widget = getDisplayModel().getWidgetFromWUID(wuid);
if (widget == null) {
return;
}
// Get the widget editPart
Object obj = getGraphicalViewer().getEditPartRegistry().get(widget);
if (obj != null && obj instanceof AbstractBaseEditPart) {
EditPart widgetEditPart = (AbstractBaseEditPart) obj;
// Reveal the widget
getGraphicalViewer().reveal(widgetEditPart);
// Find the closest selectable part
while (widgetEditPart != null && !widgetEditPart.isSelectable()) {
widgetEditPart = widgetEditPart.getParent();
}
if (widgetEditPart != null) {
// Select the widget in OPI
SelectionManager selectionManager = getGraphicalViewer().getSelectionManager();
selectionManager.deselectAll();
selectionManager.appendSelection(widgetEditPart);
}
}
} catch (IOException e) {
MessageDialog.openError(getSite().getShell(), "IO Error", e.getMessage());
OPIBuilderPlugin.getLogger().log(Level.WARNING, "File open error", // $NON-NLS-1$
e);
} catch (CoreException e) {
MessageDialog.openError(getSite().getShell(), "Core Error", e.getMessage());
OPIBuilderPlugin.getLogger().log(Level.WARNING, "File open error", // $NON-NLS-1$
e);
}
}
};
}
return super.getAdapter(type);
}
Aggregations