第一步 增加Palette项:
moveTool = new PanningSelectionTool() {
private Point viewLocation;
protected Cursor getDefaultCursor() {
return new Cursor(PlatformUI.createDisplay(), Activator
.getImage("icons/pan.gif").getImageData(), 0, 0);
}
public boolean handleButtonDown(int which) {
if (which == 1
&& getCurrentViewer().getControl() instanceof FigureCanvas) {
viewLocation = ((FigureCanvas) getCurrentViewer()
.getControl()).getViewport().getViewLocation();
return true;
}
return super.handleButtonDown(which);
}
protected boolean handleDrag() {
if (getCurrentViewer().getControl() instanceof FigureCanvas) {
FigureCanvas canvas = (FigureCanvas) getCurrentViewer()
.getControl();
canvas.scrollTo(viewLocation.x - getDragMoveDelta().width,
viewLocation.y - getDragMoveDelta().height);
return true;
} else {
return super.handleDragInProgress();
}
}
};
ToolEntry moveToolEntry = new ToolEntry("Panning", "Drag", Activator
.getImageDescriptor("icons/pan.gif"), Activator
.getImageDescriptor("icons/pan.gif")) {
public Tool createTool() {
return moveTool;
}
};
第二步 增加监听:
private void initListeners() {
getGraphicalControl().addMouseListener(new MouseListener() {
public void mouseDoubleClick(MouseEvent me) {
}
public void mouseDown(MouseEvent me) {
EditPart editPart = getGraphicalViewer().findObjectAt(
new Point(me.x, me.y));
if (editPart instanceof JavaProjectEditPart) {
isMouseDown = true;
updateActiveTool(me);
}
}
public void mouseUp(MouseEvent me) {
isMouseDown = false;
isMouseMoved = false;
if (isHandled) {
getEditDomain().setActiveTool(
getEditDomain().getDefaultTool());
}
isHandled = false;
}
});
getGraphicalControl().addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent me) {
if (isMouseDown) {
isMouseMoved = true;
}
}
});
}
private boolean isMouseDown = false;
private boolean isMouseMoved = false;
private boolean isHandled = false;
protected void updateActiveTool(final MouseEvent me) {
new Thread() {
public void run() {
try {
sleep(200);
} catch (InterruptedException e) {
}
if (isMouseDown && !isMouseMoved) {
isHandled = true;
Display.getDefault().asyncExec(new Runnable() {
public void run() {
moveTool.mouseDown(me, getGraphicalViewer());
getEditDomain().setActiveTool(moveTool);
moveTool.setViewer(null);
};
});
}
}
}.start();
}