in ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java [1099:1302]
public void mouseMove(MouseEvent event) {
boolean shift = (event.stateMask & SWT.SHIFT) != 0;
noInputAction = null;
boolean doRedraw = false;
WorkflowHopMeta hop = null;
// disable the tooltip
//
hideToolTips();
// Check to see if we're navigating with the view port
//
if (viewPortNavigation) {
dragViewPort(new Point(event.x, event.y));
return;
}
Point real = screen2real(event.x, event.y);
// Remember the last position of the mouse for paste with keyboard
//
lastMove = real;
if (iconOffset == null) {
iconOffset = new Point(0, 0);
}
Point icon = new Point(real.x - iconOffset.x, real.y - iconOffset.y);
if (noteOffset == null) {
noteOffset = new Point(0, 0);
}
Point note = new Point(real.x - noteOffset.x, real.y - noteOffset.y);
// Moved over an area?
//
AreaOwner areaOwner = getVisibleAreaOwner(real.x, real.y);
// Moved over an hop?
//
if (areaOwner == null) {
hop = findWorkflowHop(real.x, real.y);
}
// Mouse over the name of the action
//
if (!PropsUi.getInstance().useDoubleClick()) {
if (areaOwner != null && areaOwner.getAreaType() == AreaOwner.AreaType.ACTION_NAME) {
if (mouseOverName == null) {
doRedraw = true;
}
mouseOverName = (String) areaOwner.getOwner();
} else {
if (mouseOverName != null) {
doRedraw = true;
}
mouseOverName = null;
}
}
//
// First see if the icon we clicked on was selected.
// If the icon was not selected, we should un-select all other
// icons, selected and move only the one icon
//
if (selectedAction != null && !selectedAction.isSelected()) {
workflowMeta.unselectAll();
selectedAction.setSelected(true);
selectedActions = new ArrayList<>();
selectedActions.add(selectedAction);
previousTransformLocations = new Point[] {selectedAction.getLocation()};
doRedraw = true;
} else if (selectedNote != null && !selectedNote.isSelected()) {
workflowMeta.unselectAll();
selectedNote.setSelected(true);
selectedNotes = new ArrayList<>();
selectedNotes.add(selectedNote);
previousNoteLocations = new Point[] {selectedNote.getLocation()};
doRedraw = true;
} else if (selectionRegion != null && startHopAction == null) {
// Did we select a region...?
//
selectionRegion.width = real.x - selectionRegion.x;
selectionRegion.height = real.y - selectionRegion.y;
doRedraw = true;
} else if (selectedAction != null && lastButton == 1 && !shift && startHopAction == null) {
// Move around actions & notes
//
//
// One or more icons are selected and moved around...
//
// new : new position of the ICON (not the mouse pointer) dx : difference with previous
// position
//
int dx = icon.x - selectedAction.getLocation().x;
int dy = icon.y - selectedAction.getLocation().y;
// See if we have a hop-split candidate
//
WorkflowHopMeta hi = findHop(icon.x + iconSize / 2, icon.y + iconSize / 2, selectedAction);
if (hi != null) {
// OK, we want to split the hop in 2
// Check if we can split A-->--B and insert the selected transform C if
// C-->--A or C-->--B or A-->--C or B-->--C don't exists...
//
if (workflowMeta.findWorkflowHop(selectedAction, hi.getFromAction()) == null
&& workflowMeta.findWorkflowHop(selectedAction, hi.getToAction()) == null
&& workflowMeta.findWorkflowHop(hi.getToAction(), selectedAction) == null
&& workflowMeta.findWorkflowHop(hi.getFromAction(), selectedAction) == null) {
splitHop = true;
lastHopSplit = hi;
hi.split = true;
}
} else {
if (lastHopSplit != null) {
lastHopSplit.split = false;
lastHopSplit = null;
splitHop = false;
}
}
moveSelected(dx, dy);
doRedraw = true;
} else if ((startHopAction != null && endHopAction == null)
|| (endHopAction != null && startHopAction == null)) {
// Are we creating a new hop with the middle button or pressing SHIFT?
//
ActionMeta actionCopy = workflowMeta.getAction(real.x, real.y, iconSize);
endHopLocation = new Point(real.x, real.y);
if (actionCopy != null
&& ((startHopAction != null && !startHopAction.equals(actionCopy))
|| (endHopAction != null && !endHopAction.equals(actionCopy)))) {
if (hopCandidate == null) {
// See if the transform accepts input. If not, we can't create a new hop...
//
if (startHopAction != null) {
if (!actionCopy.isStart()) {
hopCandidate = new WorkflowHopMeta(startHopAction, actionCopy);
endHopLocation = null;
} else {
noInputAction = actionCopy;
toolTip.setText("The start action can only be used at the start of a Workflow");
showToolTip(new org.eclipse.swt.graphics.Point(real.x, real.y));
}
} else if (endHopAction != null) {
hopCandidate = new WorkflowHopMeta(actionCopy, endHopAction);
endHopLocation = null;
}
}
} else {
if (hopCandidate != null) {
hopCandidate = null;
doRedraw = true;
}
}
doRedraw = true;
} else {
// Drag the view around with middle button on the background?
//
if (viewDrag && lastClick != null) {
dragView(viewDragStart, new Point(event.x, event.y));
}
}
// Move around notes & actions
//
if (selectedNote != null && lastButton == 1 && !shift) {
/*
* One or more notes are selected and moved around...
*
* new : new position of the note (not the mouse pointer) dx : difference with previous position
*/
int dx = note.x - selectedNote.getLocation().x;
int dy = note.y - selectedNote.getLocation().y;
moveSelected(dx, dy);
doRedraw = true;
}
Cursor cursor = null;
// Change cursor when dragging view or view port
if (viewDrag || viewPortNavigation) {
cursor = getDisplay().getSystemCursor(SWT.CURSOR_SIZEALL);
}
// Change cursor when selecting a region
else if (selectionRegion != null) {
cursor = getDisplay().getSystemCursor(SWT.CURSOR_CROSS);
}
// Change cursor when hover an hop or an area that support hover
else if (hop != null
|| (areaOwner != null
&& areaOwner.getAreaType() != null
&& areaOwner.getAreaType().isSupportHover())) {
cursor = getDisplay().getSystemCursor(SWT.CURSOR_HAND);
}
setCursor(cursor);
if (doRedraw) {
redraw();
}
}