/*
* ARX: Powerful Data Anonymization
* Copyright 2012 - 2017 Fabian Prasser, Florian Kohlmayer and contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.deidentifier.arx.gui.view.impl.common.table;
import org.eclipse.nebula.widgets.nattable.layer.IUniqueIndexLayer;
import org.eclipse.nebula.widgets.nattable.search.config.DefaultSearchBindings;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
import org.eclipse.nebula.widgets.nattable.selection.action.SelectCellAction;
import org.eclipse.nebula.widgets.nattable.selection.config.DefaultMoveSelectionConfiguration;
import org.eclipse.nebula.widgets.nattable.selection.config.DefaultSelectionBindings;
import org.eclipse.nebula.widgets.nattable.selection.config.DefaultSelectionStyleConfiguration;
import org.eclipse.nebula.widgets.nattable.tickupdate.config.DefaultTickUpdateConfiguration;
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.MouseEventMatcher;
import org.eclipse.nebula.widgets.nattable.viewport.action.ViewportSelectColumnAction;
import org.eclipse.nebula.widgets.nattable.viewport.action.ViewportSelectRowAction;
import org.eclipse.swt.SWT;
/**
* A selection layer for table views.
*
* @author Fabian Prasser
*/
public class LayerSelection extends SelectionLayer implements CTComponent {
/** TODO */
private final CTConfiguration config;
/**
* Creates a new instance.
*
* @param underlyingLayer
* @param config
*/
public LayerSelection(IUniqueIndexLayer underlyingLayer,
CTConfiguration config) {
super(underlyingLayer, false);
this.config = config;
addConfiguration(new DefaultSelectionStyleConfiguration());
addConfiguration(new DefaultSelectionBindings(){
/** Override some default behavior */
protected void configureBodyMouseClickBindings(UiBindingRegistry uiBindingRegistry) {
IMouseAction action = new SelectCellAction();
uiBindingRegistry.registerMouseDownBinding(MouseEventMatcher.bodyLeftClick(SWT.NONE), action);
}
/** Override some default behavior */
protected void configureBodyMouseDragMode(UiBindingRegistry uiBindingRegistry) {
// Ignore
}
/** Override some default behavior */
protected void configureColumnHeaderMouseClickBindings(UiBindingRegistry uiBindingRegistry) {
uiBindingRegistry.registerSingleClickBinding(MouseEventMatcher.columnHeaderLeftClick(SWT.NONE), new ViewportSelectColumnAction(false, false));
}
/** Override some default behavior */
protected void configureRowHeaderMouseClickBindings(UiBindingRegistry uiBindingRegistry) {
uiBindingRegistry.registerMouseDownBinding(MouseEventMatcher.rowHeaderLeftClick(SWT.NONE), new ViewportSelectRowAction(false, false));
}
});
addConfiguration(new DefaultSearchBindings());
addConfiguration(new DefaultTickUpdateConfiguration());
addConfiguration(new DefaultMoveSelectionConfiguration());
}
@Override
public CTConfiguration getConfig() {
return config;
}
@Override
public boolean isCellPositionSelected(int columnPosition, int rowPosition) {
return getConfig().isCellSelectionEnabled() && super.isCellPositionSelected(columnPosition, rowPosition);
}
@Override
public boolean isColumnPositionFullySelected(int columnPosition) {
return getConfig().isColumnSelectionEnabled() && super.isColumnPositionFullySelected(columnPosition);
}
@Override
public boolean isColumnPositionSelected(int columnPosition) {
return false;
}
@Override
public boolean isRowPositionFullySelected(int rowPosition) {
return getConfig().isRowSelectionEnabled() && super.isRowPositionFullySelected(rowPosition);
}
@Override
public boolean isRowPositionSelected(int rowPosition) {
return false;
}
}