public void installEventHandlersForCanvas() {
    installUserInputHandlers();

    final OverviewCanvas overview = diagramPane.getOverview();

    canvas.addHandler(diagramPane.getOverview(), ViewChangeEvent.TYPE);

    // highlight linked objects
    SelectionEventHandler selectionHandler =
        new SelectionEventHandler() {

          @Override
          public void onSelectionChanged(SelectionEvent e) {
            hiliteAndCentreObjects(e);
            overview.setSelectedObjects(e.getSelectedObjects());
            overview.update();
          }
        };

    diagramPane.addSelectionEventHandler(selectionHandler);
  }
  public void installOverviewEventHandler() {
    final OverviewCanvas overview = diagramPane.getOverview();

    // To catch overview dragging
    ViewChangeEventHandler overviewEventHandler =
        new ViewChangeEventHandler() {
          @Override
          public void onViewChange(ViewChangeEvent event) {
            double dx = event.getTranslationEvent().getTranslateX();
            double dy = event.getTranslationEvent().getTranslateY();
            double scale = event.getZoomEvent().getScale();
            double canvasScale = canvas.getScale();

            // System.out.println("responding to overview click");

            diagramPane.translate(-dx / scale * canvasScale, -dy / scale * canvasScale);
            diagramPane.update();
            overview.setIsFromOverview(false); // Overview Canvas can now respond to ViewChangeEvent
            // now that it's own event firing has finished
          }
        };

    overview.addHandler(overviewEventHandler, ViewChangeEvent.TYPE);
  }