use of org.knime.workbench.editor2.commands.ChangeNodeBoundsCommand in project knime-core by knime.
the class NewWorkflowXYLayoutPolicy method createChangeConstraintCommand.
/**
* Creates command to move / resize <code>NodeContainer</code> components on
* the project's client area.
*
* {@inheritDoc}
*/
@Override
protected Command createChangeConstraintCommand(final EditPart child, final Object constraint) {
// only rectangular constraints are supported
if (!(constraint instanceof Rectangle)) {
return null;
}
Command command = null;
Rectangle rect = ((Rectangle) constraint).getCopy();
if (child.getModel() instanceof NodeContainerUI) {
NodeContainerUI container = (NodeContainerUI) child.getModel();
if (!Wrapper.wraps(container, NodeContainer.class)) {
// not supported for others than ordinary NodeContainers
return null;
}
NodeContainerEditPart nodePart = (NodeContainerEditPart) child;
command = new ChangeNodeBoundsCommand(Wrapper.unwrapNC(container), (NodeContainerFigure) nodePart.getFigure(), rect);
} else if (child instanceof AbstractWorkflowPortBarEditPart) {
command = new ChangeWorkflowPortBarCommand((AbstractWorkflowPortBarEditPart) child, rect);
} else if (child instanceof AnnotationEditPart) {
AnnotationEditPart annoPart = (AnnotationEditPart) child;
// TODO the workflow annotation could know what its WFM is?
WorkflowRootEditPart root = (WorkflowRootEditPart) annoPart.getParent();
WorkflowManagerUI wm = root.getWorkflowManager();
if (!Wrapper.wraps(wm, WorkflowManager.class)) {
// not supported for others than an ordinary workflow manager
return null;
}
command = new ChangeAnnotationBoundsCommand(Wrapper.unwrapWFM(wm), annoPart, rect);
}
return command;
}
use of org.knime.workbench.editor2.commands.ChangeNodeBoundsCommand in project knime-core by knime.
the class MoveNodeAbstractAction method createCompoundCommand.
/**
* @param nodeParts selected nodes and connections
* @return compound command of all move commands or null if no edit part is selected
*/
public CompoundCommand createCompoundCommand(final NodeContainerEditPart[] nodeParts) {
List<EditPart> selParts = getMoveableSelectedEditParts();
if (selParts.size() < 1) {
return null;
}
// should be initialized from the pref page
// (0, 1) moves down, (-1, 0) moves left
Point offset = getMoveDirection();
int signX = (int) Math.signum(offset.x);
int signY = (int) Math.signum(offset.y);
CompoundCommand compoundCommand = new CompoundCommand();
if (getEditor().getEditorSnapToGrid()) {
// adjust offset to grid size (note: arguments must be not-negative numbers)
offset = new Point(signX * getEditor().getEditorGridXOffset(signX * offset.x), signY * getEditor().getEditorGridYOffset(signY * offset.y));
if (selParts.size() == 1) {
// with one element we move the element onto the grid if it is off
Point refLoc = null;
if (selParts.get(0) instanceof NodeContainerEditPart) {
NodeContainerEditPart node = (NodeContainerEditPart) selParts.get(0);
NodeContainerFigure figure = (NodeContainerFigure) node.getFigure();
Point iconOffset = SnapIconToGrid.getGridRefPointOffset(figure);
refLoc = new Point(figure.getBounds().x, figure.getBounds().y);
refLoc.translate(iconOffset);
} else {
IFigure fig = ((AbstractWorkflowEditPart) selParts.get(0)).getFigure();
refLoc = new Point(fig.getBounds().x, fig.getBounds().y);
}
Point gridLoc = new Point(0, 0);
Point prevGridLoc = getEditor().getPrevGridLocation(refLoc);
Point nextGridLoc = getEditor().getNextGridLocation(refLoc);
boolean toGrid = false;
if (signX < 0) {
gridLoc.x = prevGridLoc.x;
toGrid = (gridLoc.x != refLoc.x);
}
if (signX > 0) {
gridLoc.x = nextGridLoc.x;
toGrid = (gridLoc.x != refLoc.x);
}
if (signY < 0) {
gridLoc.y = prevGridLoc.y;
toGrid = (gridLoc.y != refLoc.y);
}
if (signY > 0) {
gridLoc.y = nextGridLoc.y;
toGrid = (gridLoc.y != refLoc.y);
}
if (toGrid) {
offset = new Point(Math.abs(gridLoc.x - refLoc.x) * signX, Math.abs(gridLoc.y - refLoc.y) * signY);
}
}
}
int noNodes = 0;
// apply the offset to all selected elements
for (EditPart epart : selParts) {
// apply to selected nodes
if (epart instanceof NodeContainerEditPart) {
NodeContainerEditPart node = (NodeContainerEditPart) epart;
noNodes++;
NodeContainerUI nc = node.getNodeContainer();
NodeContainerFigure figure = (NodeContainerFigure) node.getFigure();
Rectangle bounds = figure.getBounds().getCopy();
bounds.translate(offset);
ChangeNodeBoundsCommand cmd = new ChangeNodeBoundsCommand(Wrapper.unwrapNC(nc), figure, bounds);
compoundCommand.add(cmd);
}
// apply to all selected workflow annotations
if ((epart instanceof AnnotationEditPart) && !(epart instanceof NodeAnnotationEditPart)) {
AnnotationEditPart anno = (AnnotationEditPart) epart;
Rectangle bounds = anno.getFigure().getBounds().getCopy();
bounds.translate(offset);
ChangeAnnotationBoundsCommand cmd = new ChangeAnnotationBoundsCommand(getManager(), anno, bounds);
compoundCommand.add(cmd);
}
}
if (noNodes > 1) {
// if multiple nodes are selected/moved we need to move fully contained connections as well
ConnectionContainerEditPart[] conns = WorkflowSelectionDragEditPartsTracker.getEmbracedConnections(selParts);
for (ConnectionContainerEditPart conn : conns) {
ChangeBendPointLocationCommand connCmd = new ChangeBendPointLocationCommand(conn, offset.getCopy(), null);
compoundCommand.add(connCmd);
}
}
return compoundCommand;
}
Aggregations