PhpRiot
News Archive
PhpRiot Newsletter
Your Email Address:

More information

GEF: Creating a connection on mouse drag

Note: This article was originally published at Planet PHP on 23 September 2010.
Planet PHP
This tip shows how to implement a connection creation when dragging a mouse from EditPart, thus saving user's time (one click instead of three: activating connection creation tool, clicking on EditPart, restoring selection tool).

What you need is to return a ConnectionDragCreationTool from your EditPart:

public DragTracker getDragTracker(Request request) {
return new ConnectionDragCreationTool();
}

The problem begins if your EditPart has a Direct Edit policy, Direct Edit commands won't be handled anymore. The following solution supports both: creating a connection on mouse drag and Direct Edit:

Create a proxy that implements DragTracker by delegating to ConnectionDragCreationTool and to SelectEditPartTracker:

public class DragConnectionCreationProxy implements DragTracker {

private ConnectionDragCreationTool connectionTool;
private SelectEditPartTracker editPartTracker;

public DragConnectionCreation(EditPart editPart) {
this.connectionTool = new ConnectionDragCreationTool();
this.editPartTracker = new SelectEditPartTracker(editPart);
}

public void commitDrag() {
connectionTool.commitDrag();
editPartTracker.commitDrag();
}

// Implement all other methods ...
}

Then return this class instance from your EditPart:

public DragTracker getDragTracker(Request request) {
return new DragConnectionCreationProxy(this);
}