/**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#keyUp(org.eclipse.swt.events.KeyEvent,
   *     org.eclipse.gef.EditPartViewer)
   */
  @Override
  public void keyUp(KeyEvent i_evt, EditPartViewer i_viewer) {

    super.keyUp(i_evt, i_viewer);

    m_handler.setScene(getScene());
    m_handler.keyUp(i_evt);
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#mouseWheelScrolled(org.eclipse.swt.widgets.Event,
   *     org.eclipse.gef.EditPartViewer)
   */
  @Override
  public void mouseWheelScrolled(Event i_event, EditPartViewer i_viewer) {

    super.mouseWheelScrolled(i_event, i_viewer);

    m_handler.setScene(getScene());
    m_handler.mouseWheelScrolled(i_event.count);
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#handleKeyUp(org.eclipse.swt.events.KeyEvent)
   */
  @Override
  protected boolean handleKeyUp(KeyEvent i_e) {

    m_handler.setScene(getScene());
    m_handler.keyUp(i_e);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see
   *     org.eclipse.gef.tools.AbstractTool#handleNativeDragStarted(org.eclipse.swt.dnd.DragSourceEvent)
   */
  @Override
  protected boolean handleNativeDragStarted(DragSourceEvent i_event) {

    setCursor(SWT.CURSOR_CROSS);
    m_handler.setScene(getScene());

    Input3D input = getCurrentInput3D();
    m_handler.nativeDragStarted(input.getRealMouseLocation().x, input.getRealMouseLocation().y);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see
   *     org.eclipse.gef.tools.AbstractTool#handleNativeDragFinished(org.eclipse.swt.dnd.DragSourceEvent)
   */
  @Override
  protected boolean handleNativeDragFinished(DragSourceEvent i_event) {

    restoreCursor();
    m_handler.setScene(getScene());

    Input3D input = getCurrentInput3D();
    m_handler.nativeDragFinished(input.getRealMouseLocation().x, input.getRealMouseLocation().y);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#handleDrag()
   */
  @Override
  protected boolean handleDrag() {

    m_handler.setScene(getScene());

    Input3D input = getCurrentInput3D();
    m_handler.mouseMove(
        getStateMask(input), input.getRealMouseLocation().x, input.getRealMouseLocation().y);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#handleDoubleClick(int)
   */
  @Override
  protected boolean handleDoubleClick(int i_button) {

    m_handler.setScene(getScene());
    Input3D input = getCurrentInput3D();
    m_handler.doubleClick(
        i_button,
        getStateMask(input),
        input.getRealMouseLocation().x,
        input.getRealMouseLocation().y);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#handleButtonUp(int)
   */
  @Override
  protected boolean handleButtonUp(int i_button) {

    restoreCursor();
    m_handler.setScene(getScene());

    Input3D input = getCurrentInput3D();
    m_handler.buttonUp(
        i_button,
        getStateMask(input),
        input.getRealMouseLocation().x,
        input.getRealMouseLocation().y);

    return true;
  }
  /**
   * {@inheritDoc}
   *
   * @see org.eclipse.gef.tools.AbstractTool#handleButtonDown(int)
   */
  @Override
  protected boolean handleButtonDown(int i_button) {

    setCursor(SWT.CURSOR_CROSS);
    m_handler.setScene(getScene());

    Input3D input = getCurrentInput3D();
    m_handler.buttonDown(
        i_button,
        getStateMask(input),
        input.getRealMouseLocation().x,
        input.getRealMouseLocation().y);

    return true;
  }