private void bind() {
		HasAllMouseHandlers canvas = automatonView.getHandlerCanvas();
		canvas.addMouseDownHandler(new MouseDownHandler() {
			@Override
			public void onMouseDown(MouseDownEvent event) {
				StateView stateView = findStateAt(event.getX(), event.getY());
				if (stateView != null) {
					moveState = stateView;
					disableMoveMode();
					return;
				}
				moveCanvas = true;
			}
		});
		canvas.addMouseUpHandler(new MouseUpHandler() {
			@Override
			public void onMouseUp(MouseUpEvent event) {
				disableMoveMode();
				moveState = null;
			}
		});
		canvas.addMouseOutHandler(new MouseOutHandler() {
			@Override
			public void onMouseOut(MouseOutEvent event) {
				disableMoveMode();
				moveState = null;
			}
		});
		canvas.addMouseMoveHandler(new MouseMoveHandler() {
			@Override
			public void onMouseMove(MouseMoveEvent event) {
				if (moveCanvas) {
					if (lastPosition != null) {
						double x = event.getX() - lastPosition.x;
						double y = event.getY() - lastPosition.y;
						automatonView.offset.plus(x, y);

						overView.draw();
					}

					lastPosition = new Vector(event.getX(), event.getY());
				} else if (moveState != null) {
					moveState.setWorldPosition(event.getX(), event.getY());

					overView.draw();
				}
			}
		});
	}