| package org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode |
| |
| import java.util.Map |
| import org.eclipse.swt.events.FocusEvent |
| import org.eclipse.swt.events.FocusListener |
| import org.eclipse.swt.events.KeyEvent |
| import org.eclipse.swt.events.KeyListener |
| import org.eclipse.swt.events.MouseEvent |
| import org.eclipse.swt.events.MouseListener |
| import org.eclipse.swt.events.MouseMoveListener |
| import org.eclipse.swt.widgets.Control |
| |
| /** |
| * Modal event handler for NatTable. This class acts as a proxy event listener. |
| * It manages a set of IModeEventHandler instances which control the actual |
| * event handling for a given mode. This allows the event handling behavior for |
| * different modes to be grouped together and isolated from each other. |
| */ |
| class ModeSwitcher implements KeyListener, MouseListener, MouseMoveListener, FocusListener { |
| |
| val Map<String, Mode> modalEventHandlerMap = newHashMap |
| |
| Mode currentMode |
| |
| new(Control control) { |
| control.addKeyListener(this) |
| control.addMouseListener(this) |
| control.addMouseMoveListener(this) |
| control.addFocusListener(this) |
| } |
| |
| /** |
| * Register an event handler to handle events for a given mode. |
| * |
| * @param mode |
| * The mode. |
| * @param modeEventHandler |
| * An IModeEventHandler instance that will handle events in the |
| * given mode. |
| * |
| * @see IModeEventHandler |
| */ |
| def void registerMode(String modeName, Mode mode) { |
| modalEventHandlerMap.put(modeName, mode) |
| } |
| |
| /** |
| * Switch to the given mode. |
| * |
| * @param mode |
| * The target mode to switch to. |
| */ |
| def void switchToMode(String modeName) { |
| currentMode = modalEventHandlerMap.get(modeName) |
| currentMode.modeSwitcher = this |
| } |
| |
| def void switchToMode(Mode mode) { |
| currentMode = mode |
| currentMode.modeSwitcher = this |
| } |
| |
| // KeyListener interface |
| |
| override keyPressed(KeyEvent event) { currentMode.keyPressed(event) } |
| override keyReleased(KeyEvent event) { currentMode.keyReleased(event) } |
| |
| // MouseListener interface |
| |
| override mouseDoubleClick(MouseEvent event) { currentMode.mouseDoubleClick(event) } |
| override mouseDown(MouseEvent event) { currentMode.mouseDown(event) } |
| override mouseUp(MouseEvent event) { currentMode.mouseUp(event) } |
| |
| // MouseMotionListener interface |
| |
| override mouseMove(MouseEvent event) { currentMode.mouseMove(event) } |
| |
| // FocusListener interface |
| |
| override focusGained(FocusEvent event) { currentMode.focusGained(event) } |
| override focusLost(FocusEvent event) { currentMode.focusLost(event) } |
| |
| } |