blob: da279f8eda15b8fb78c983150addd7e0bbf31b6e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2014 Original authors and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Original authors and others - initial API and implementation
* Dirk Fauth <dirk.fauth@googlemail.com> - Bug 453882
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.ui.action;
import org.eclipse.nebula.widgets.nattable.NatTable;
import org.eclipse.nebula.widgets.nattable.ui.mode.AbstractModeEventHandler;
import org.eclipse.nebula.widgets.nattable.ui.mode.Mode;
import org.eclipse.nebula.widgets.nattable.ui.mode.ModeSupport;
import org.eclipse.nebula.widgets.nattable.ui.mode.MouseModeEventHandler;
import org.eclipse.nebula.widgets.nattable.ui.util.MouseEventHelper;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.MouseEvent;
public class DragModeEventHandler extends AbstractModeEventHandler {
private final IDragMode dragMode;
private final MouseModeEventHandler parentModeEventHandler;
private final MouseEvent mouseDownEvent;
private boolean realDrag = false;
public DragModeEventHandler(
ModeSupport modeSupport,
NatTable natTable,
IDragMode dragMode,
MouseModeEventHandler parentModeEventHandler,
MouseEvent mouseDownEvent) {
super(modeSupport, natTable);
this.dragMode = dragMode;
this.parentModeEventHandler = parentModeEventHandler;
this.mouseDownEvent = mouseDownEvent;
}
@Override
public void mouseMove(MouseEvent event) {
this.dragMode.mouseMove(this.natTable, event);
if (!this.realDrag
&& !MouseEventHelper.treatAsClick(this.mouseDownEvent, event)) {
this.realDrag = true;
}
}
@Override
public void mouseUp(MouseEvent event) {
this.dragMode.mouseUp(this.natTable, event);
switchMode(Mode.NORMAL_MODE);
// Bug 379884
// check if the drag operation started and ended within the same cell
// in that case the registered click operation is executed also
if (!this.realDrag
&& MouseEventHelper.eventOnSameCell(this.natTable, this.mouseDownEvent, event)) {
this.parentModeEventHandler.mouseUp(event);
}
}
@Override
public void focusLost(FocusEvent event) {
// Bug 453882
// NatTable lost the focus while a drag operation was active
// so we simple skip the drag operation by calling mouseUp using the
// initial mouseDown event
mouseUp(this.mouseDownEvent);
}
}