blob: 0f407d08ea53019d2b5e6ae33f98709ddf0c2c61 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2020 Roman Flueckiger, Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Roman Flueckiger <roman.flueckiger@mac.com> - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.tree.config;
import static org.eclipse.nebula.widgets.nattable.tree.config.DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE;
import static org.eclipse.nebula.widgets.nattable.tree.config.DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE;
import static org.eclipse.nebula.widgets.nattable.ui.matcher.SelectionAnchorCellLabelKeyEventMatcher.anchorLabel;
import org.eclipse.nebula.widgets.nattable.config.AbstractUiBindingConfiguration;
import org.eclipse.nebula.widgets.nattable.layer.IUniqueIndexLayer;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
import org.eclipse.nebula.widgets.nattable.tree.action.TreeExpandCollapseKeyAction;
import org.eclipse.nebula.widgets.nattable.ui.binding.UiBindingRegistry;
import org.eclipse.nebula.widgets.nattable.ui.matcher.KeyEventMatcher;
import org.eclipse.swt.SWT;
/**
* A default configuration that can be used as an addition for a NatTable with
* both a {@link org.eclipse.nebula.widgets.nattable.tree.TreeLayer} and a
* {@link SelectionLayer}, where also an alternative tree layer implementation
* can be used. It adds the key bindings that allows the space bar to be pressed
* to expand/collapse tree nodes.
*/
public class TreeLayerExpandCollapseKeyBindings extends AbstractUiBindingConfiguration {
protected final IUniqueIndexLayer treeLayer;
protected final SelectionLayer selectionLayer;
/**
* @param treeLayer
* provides the necessary labels to detect tree nodes that can be
* expanded/collapsed.
* @param selectionLayer
* the {@link SelectionLayer} - provides the selection anchor
* (the context for the action).
* @since 1.6
*/
public TreeLayerExpandCollapseKeyBindings(IUniqueIndexLayer treeLayer, SelectionLayer selectionLayer) {
if (treeLayer == null) {
throw new IllegalArgumentException("treeLayer must not be null."); //$NON-NLS-1$
}
if (selectionLayer == null) {
throw new IllegalArgumentException("selectionLayer must not be null."); //$NON-NLS-1$
}
this.treeLayer = treeLayer;
this.selectionLayer = selectionLayer;
}
@Override
public void configureUiBindings(UiBindingRegistry uiBindingRegistry) {
TreeExpandCollapseKeyAction action = new TreeExpandCollapseKeyAction(this.selectionLayer);
uiBindingRegistry.registerFirstKeyBinding(anchorLabel(this.selectionLayer, this.treeLayer, TREE_EXPANDED_CONFIG_TYPE, new KeyEventMatcher(SWT.NONE, 32)), action);
uiBindingRegistry.registerFirstKeyBinding(anchorLabel(this.selectionLayer, this.treeLayer, TREE_COLLAPSED_CONFIG_TYPE, new KeyEventMatcher(SWT.NONE, 32)), action);
}
}