/*******************************************************************************
* Copyright (c) 2012, 2013, 2015 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
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.ui.mode;
import org.eclipse.nebula.widgets.nattable.NatTable;
import org.eclipse.nebula.widgets.nattable.ui.NatEventData;
import org.eclipse.nebula.widgets.nattable.ui.action.IDragMode;
import org.eclipse.nebula.widgets.nattable.ui.action.IKeyAction;
import org.eclipse.nebula.widgets.nattable.ui.action.IMouseAction;
import org.eclipse.nebula.widgets.nattable.ui.binding.UiBindingRegistry;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.MouseEvent;
public class ConfigurableModeEventHandler extends AbstractModeEventHandler {
public ConfigurableModeEventHandler(ModeSupport modeSupport, NatTable natTable) {
super(modeSupport, natTable);
}
// Event handling /////////////////////////////////////////////////////////
@Override
public void keyPressed(KeyEvent event) {
IKeyAction keyAction = getUiBindingRegistry().getKeyEventAction(event);
if (keyAction != null) {
this.natTable.forceFocus();
keyAction.run(this.natTable, event);
}
}
@Override
public void mouseDown(MouseEvent event) {
if (this.natTable.commitAndCloseActiveCellEditor()) {
IMouseAction mouseDownAction = getUiBindingRegistry().getMouseDownAction(event);
if (mouseDownAction != null) {
event.data = NatEventData.createInstanceFromEvent(event);
mouseDownAction.run(this.natTable, event);
}
IMouseAction singleClickAction = getUiBindingRegistry().getSingleClickAction(event);
IMouseAction doubleClickAction = getUiBindingRegistry().getDoubleClickAction(event);
IDragMode dragMode = getUiBindingRegistry().getDragMode(event);
if (singleClickAction != null || doubleClickAction != null || dragMode != null) {
switchMode(new MouseModeEventHandler(
getModeSupport(), this.natTable, event,
singleClickAction, doubleClickAction, dragMode));
}
}
}
@Override
public synchronized void mouseMove(MouseEvent event) {
if (event.x >= 0 && event.y >= 0) {
IMouseAction mouseMoveAction = getUiBindingRegistry().getMouseMoveAction(event);
if (mouseMoveAction != null) {
event.data = NatEventData.createInstanceFromEvent(event);
mouseMoveAction.run(this.natTable, event);
} else {
this.natTable.setCursor(null);
}
}
}
@Override
public synchronized void mouseHover(MouseEvent event) {
if (event.x >= 0 && event.y >= 0) {
IMouseAction mouseHoverAction = getUiBindingRegistry().getMouseHoverAction(event);
if (mouseHoverAction != null) {
event.data = NatEventData.createInstanceFromEvent(event);
mouseHoverAction.run(this.natTable, event);
}
}
}
@Override
public synchronized void mouseEnter(MouseEvent event) {
if (event.x >= 0 && event.y >= 0) {
IMouseAction mouseEnterAction = getUiBindingRegistry().getMouseEnterAction(event);
if (mouseEnterAction != null) {
event.data = NatEventData.createInstanceFromEvent(event);
mouseEnterAction.run(this.natTable, event);
} else {
this.natTable.setCursor(null);
}
}
}
@Override
public synchronized void mouseExit(MouseEvent event) {
IMouseAction mouseExitAction = getUiBindingRegistry().getMouseExitAction(event);
if (mouseExitAction != null) {
event.data = NatEventData.createInstanceFromEvent(event);
mouseExitAction.run(this.natTable, event);
} else {
this.natTable.setCursor(null);
}
}
private UiBindingRegistry getUiBindingRegistry() {
return this.natTable.getUiBindingRegistry();
}
}