/******************************************************************************* * Copyright (c) 2012, 2013 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.selection.config; import org.eclipse.nebula.widgets.nattable.config.AbstractUiBindingConfiguration; import org.eclipse.nebula.widgets.nattable.copy.action.CopyDataAction; import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.MoveDirectionEnum; import org.eclipse.nebula.widgets.nattable.selection.action.CellSelectionDragMode; import org.eclipse.nebula.widgets.nattable.selection.action.MoveSelectionAction; import org.eclipse.nebula.widgets.nattable.selection.action.MoveToFirstColumnAction; import org.eclipse.nebula.widgets.nattable.selection.action.MoveToFirstRowAction; import org.eclipse.nebula.widgets.nattable.selection.action.MoveToLastColumnAction; import org.eclipse.nebula.widgets.nattable.selection.action.MoveToLastRowAction; import org.eclipse.nebula.widgets.nattable.selection.action.PageDownAction; import org.eclipse.nebula.widgets.nattable.selection.action.PageUpAction; import org.eclipse.nebula.widgets.nattable.selection.action.SelectAllAction; import org.eclipse.nebula.widgets.nattable.selection.action.SelectCellAction; 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.nebula.widgets.nattable.ui.matcher.KeyEventMatcher; import org.eclipse.nebula.widgets.nattable.ui.matcher.MouseEventMatcher; import org.eclipse.nebula.widgets.nattable.viewport.action.ViewportSelectColumnAction; import org.eclipse.nebula.widgets.nattable.viewport.action.ViewportSelectRowAction; import org.eclipse.swt.SWT; public class DefaultSelectionBindings extends AbstractUiBindingConfiguration { @Override public void configureUiBindings(UiBindingRegistry uiBindingRegistry) { // Move up configureMoveUpBindings(uiBindingRegistry, new MoveSelectionAction(MoveDirectionEnum.UP)); // Move down configureMoveDownBindings(uiBindingRegistry, new MoveSelectionAction(MoveDirectionEnum.DOWN)); // Move left configureMoveLeftBindings(uiBindingRegistry, new MoveSelectionAction(MoveDirectionEnum.LEFT)); // Move right configureMoveRightBindings(uiBindingRegistry, new MoveSelectionAction(MoveDirectionEnum.RIGHT)); // Page Up configurePageUpButtonBindings(uiBindingRegistry, new PageUpAction()); // Page down configurePageDownButtonBindings(uiBindingRegistry, new PageDownAction()); // Home - Move to first column configureHomeButtonBindings(uiBindingRegistry, new MoveToFirstColumnAction()); // End - Move to last column configureEndButtonBindings(uiBindingRegistry, new MoveToLastColumnAction()); // Select all uiBindingRegistry.registerKeyBinding(new KeyEventMatcher(SWT.MOD1, 'a'), new SelectAllAction()); // Copy uiBindingRegistry.registerKeyBinding(new KeyEventMatcher(SWT.MOD1, 'c'), new CopyDataAction()); // Mouse bindings - select Cell configureBodyMouseClickBindings(uiBindingRegistry); // Mouse bindings - select columns configureColumnHeaderMouseClickBindings(uiBindingRegistry); // Mouse bindings - select rows configureRowHeaderMouseClickBindings(uiBindingRegistry); // Mouse bindings - Drag configureBodyMouseDragMode(uiBindingRegistry); } // *** pg. up, pg. down, home, end keys selection bindings *** protected void configureEndButtonBindings(UiBindingRegistry uiBindingRegistry, IKeyAction action) { uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.NONE, SWT.END), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2, SWT.END), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD1, SWT.END), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2 | SWT.MOD1, SWT.END), action); } protected void configureHomeButtonBindings(UiBindingRegistry uiBindingRegistry, IKeyAction action) { uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.NONE, SWT.HOME), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2, SWT.HOME), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD1, SWT.HOME), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2 | SWT.MOD1, SWT.HOME), action); } protected void configurePageDownButtonBindings(UiBindingRegistry uiBindingRegistry, IKeyAction action) { uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.NONE, SWT.PAGE_DOWN), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2, SWT.PAGE_DOWN), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD1, SWT.PAGE_DOWN), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2 | SWT.MOD1, SWT.PAGE_DOWN), action); } protected void configurePageUpButtonBindings(UiBindingRegistry uiBindingRegistry, PageUpAction action) { uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.NONE, SWT.PAGE_UP), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2, SWT.PAGE_UP), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD1, SWT.PAGE_UP), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2 | SWT.MOD1, SWT.PAGE_UP), action); } // *** Arrow keys selection bindings *** protected void configureMoveRightBindings(UiBindingRegistry uiBindingRegistry, IKeyAction action) { uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.NONE, SWT.ARROW_RIGHT), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2, SWT.ARROW_RIGHT), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD1, SWT.ARROW_RIGHT), new MoveToLastColumnAction()); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2 | SWT.MOD1, SWT.ARROW_RIGHT), new MoveToLastColumnAction()); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.NONE, SWT.TAB), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD1, SWT.TAB), action); } protected void configureMoveLeftBindings(UiBindingRegistry uiBindingRegistry, IKeyAction action) { uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.NONE, SWT.ARROW_LEFT), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2, SWT.ARROW_LEFT), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD1, SWT.ARROW_LEFT), new MoveToFirstColumnAction()); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2 | SWT.MOD1, SWT.ARROW_LEFT), new MoveToFirstColumnAction()); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2, SWT.TAB), new MoveSelectionAction(MoveDirectionEnum.LEFT, false, false)); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2 | SWT.MOD1, SWT.TAB), action); } protected void configureMoveDownBindings(UiBindingRegistry uiBindingRegistry, IKeyAction action) { uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.NONE, SWT.ARROW_DOWN), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2, SWT.ARROW_DOWN), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD1, SWT.ARROW_DOWN), new MoveToLastRowAction()); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2 | SWT.MOD1, SWT.ARROW_DOWN), new MoveToLastRowAction()); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.NONE, SWT.CR), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD1, SWT.CR), action); } protected void configureMoveUpBindings(UiBindingRegistry uiBindingRegistry, IKeyAction action) { uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.NONE, SWT.ARROW_UP), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2, SWT.ARROW_UP), action); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD1, SWT.ARROW_UP), new MoveToFirstRowAction()); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2 | SWT.MOD1, SWT.ARROW_UP), new MoveToFirstRowAction()); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2, SWT.CR), new MoveSelectionAction(MoveDirectionEnum.UP, false, false)); uiBindingRegistry.registerKeyBinding( new KeyEventMatcher(SWT.MOD2 | SWT.MOD1, SWT.CR), action); } // *** Mouse bindings *** protected void configureBodyMouseClickBindings(UiBindingRegistry uiBindingRegistry) { IMouseAction action = new SelectCellAction(); uiBindingRegistry.registerMouseDownBinding( MouseEventMatcher.bodyLeftClick(SWT.NONE), action); uiBindingRegistry.registerMouseDownBinding( MouseEventMatcher.bodyLeftClick(SWT.MOD2), action); uiBindingRegistry.registerMouseDownBinding( MouseEventMatcher.bodyLeftClick(SWT.MOD1), action); uiBindingRegistry.registerMouseDownBinding( MouseEventMatcher.bodyLeftClick(SWT.MOD2 | SWT.MOD1), action); } protected void configureColumnHeaderMouseClickBindings(UiBindingRegistry uiBindingRegistry) { uiBindingRegistry.registerSingleClickBinding( MouseEventMatcher.columnHeaderLeftClick(SWT.NONE), new ViewportSelectColumnAction(false, false)); uiBindingRegistry.registerSingleClickBinding( MouseEventMatcher.columnHeaderLeftClick(SWT.MOD2), new ViewportSelectColumnAction(true, false)); uiBindingRegistry.registerSingleClickBinding( MouseEventMatcher.columnHeaderLeftClick(SWT.MOD1), new ViewportSelectColumnAction(false, true)); uiBindingRegistry.registerSingleClickBinding( MouseEventMatcher.columnHeaderLeftClick(SWT.MOD2 | SWT.MOD1), new ViewportSelectColumnAction(true, true)); } protected void configureRowHeaderMouseClickBindings(UiBindingRegistry uiBindingRegistry) { uiBindingRegistry.registerMouseDownBinding( MouseEventMatcher.rowHeaderLeftClick(SWT.NONE), new ViewportSelectRowAction(false, false)); uiBindingRegistry.registerMouseDownBinding( MouseEventMatcher.rowHeaderLeftClick(SWT.MOD2), new ViewportSelectRowAction(true, false)); uiBindingRegistry.registerMouseDownBinding( MouseEventMatcher.rowHeaderLeftClick(SWT.MOD1), new ViewportSelectRowAction(false, true)); uiBindingRegistry.registerMouseDownBinding( MouseEventMatcher.rowHeaderLeftClick(SWT.MOD2 | SWT.MOD1), new ViewportSelectRowAction(true, true)); } protected void configureBodyMouseDragMode(UiBindingRegistry uiBindingRegistry) { CellSelectionDragMode dragMode = new CellSelectionDragMode(); uiBindingRegistry.registerMouseDragMode( MouseEventMatcher.bodyLeftClick(SWT.NONE), dragMode); uiBindingRegistry.registerMouseDragMode( MouseEventMatcher.bodyLeftClick(SWT.MOD2), dragMode); uiBindingRegistry.registerMouseDragMode( MouseEventMatcher.bodyLeftClick(SWT.MOD1), dragMode); uiBindingRegistry.registerMouseDragMode( MouseEventMatcher.bodyLeftClick(SWT.MOD2 | SWT.MOD1), dragMode); } }