blob: 79d83ef41123a394ea9dfcb19d8ebea6eefcf35a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2020 Original authors and others.
*
* 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:
* Original authors and others - initial API and implementation
* Roman Flueckiger <roman.flueckiger@mac.com> - Bug 451486
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.columnChooser.command;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.nebula.widgets.nattable.columnChooser.ColumnChooser;
import org.eclipse.nebula.widgets.nattable.command.AbstractLayerCommandHandler;
import org.eclipse.nebula.widgets.nattable.grid.layer.ColumnHeaderLayer;
import org.eclipse.nebula.widgets.nattable.group.ColumnGroupHeaderLayer;
import org.eclipse.nebula.widgets.nattable.group.ColumnGroupModel;
import org.eclipse.nebula.widgets.nattable.hideshow.ColumnHideShowLayer;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
public class DisplayColumnChooserCommandHandler extends AbstractLayerCommandHandler<DisplayColumnChooserCommand> {
private final ColumnHideShowLayer columnHideShowLayer;
private final ColumnGroupHeaderLayer columnGroupHeaderLayer;
private final ColumnGroupModel columnGroupModel;
private final SelectionLayer selectionLayer;
private final DataLayer columnHeaderDataLayer;
private final ColumnHeaderLayer columnHeaderLayer;
private final boolean sortAvailableColumns;
private final boolean preventHidingAllColumns;
private IDialogSettings dialogSettings;
private List<Integer> nonModifiableColumns = new ArrayList<Integer>();
private final org.eclipse.nebula.widgets.nattable.group.performance.ColumnGroupHeaderLayer cghLayer;
public DisplayColumnChooserCommandHandler(SelectionLayer selectionLayer,
ColumnHideShowLayer columnHideShowLayer,
ColumnHeaderLayer columnHeaderLayer,
DataLayer columnHeaderDataLayer,
ColumnGroupHeaderLayer cgHeader,
ColumnGroupModel columnGroupModel) {
this(selectionLayer, columnHideShowLayer, columnHeaderLayer, columnHeaderDataLayer, cgHeader, columnGroupModel, false, false);
}
public DisplayColumnChooserCommandHandler(
SelectionLayer selectionLayer,
ColumnHideShowLayer columnHideShowLayer,
ColumnHeaderLayer columnHeaderLayer,
DataLayer columnHeaderDataLayer,
ColumnGroupHeaderLayer cgHeader,
ColumnGroupModel columnGroupModel,
boolean sortAvailableColumns) {
this(selectionLayer, columnHideShowLayer, columnHeaderLayer, columnHeaderDataLayer, cgHeader, columnGroupModel, sortAvailableColumns, false);
}
public DisplayColumnChooserCommandHandler(
SelectionLayer selectionLayer,
ColumnHideShowLayer columnHideShowLayer,
ColumnHeaderLayer columnHeaderLayer,
DataLayer columnHeaderDataLayer,
ColumnGroupHeaderLayer cgHeader,
ColumnGroupModel columnGroupModel,
boolean sortAvalableColumns,
boolean preventHidingAllColumns) {
this.selectionLayer = selectionLayer;
this.columnHideShowLayer = columnHideShowLayer;
this.columnHeaderLayer = columnHeaderLayer;
this.columnHeaderDataLayer = columnHeaderDataLayer;
this.columnGroupHeaderLayer = cgHeader;
this.columnGroupModel = columnGroupModel;
this.sortAvailableColumns = sortAvalableColumns;
this.preventHidingAllColumns = preventHidingAllColumns;
this.cghLayer = null;
}
/**
* Create the {@link DisplayColumnChooserCommandHandler} for the new
* performance column grouping feature showing the columns in the available
* tree unsorted.
*
* @param columnHideShowLayer
* The {@link ColumnHideShowLayer} for hide/show support.
* @param columnHeaderLayer
* The {@link ColumnHeaderLayer} for retrieving column header
* information.
* @param columnHeaderDataLayer
* The {@link DataLayer} of the column header region for
* retrieving column header information.
* @param cgHeader
* The new performance
* {@link org.eclipse.nebula.widgets.nattable.group.performance.ColumnGroupHeaderLayer}
* to support column grouping. Cannot be <code>null</code>.
* @throws IllegalArgumentException
* if cgHeader is null
*
* @since 1.6
*/
public DisplayColumnChooserCommandHandler(
ColumnHideShowLayer columnHideShowLayer,
ColumnHeaderLayer columnHeaderLayer,
DataLayer columnHeaderDataLayer,
org.eclipse.nebula.widgets.nattable.group.performance.ColumnGroupHeaderLayer cgHeader) {
this(columnHideShowLayer, columnHeaderLayer, columnHeaderDataLayer, cgHeader, false);
}
/**
* Create the {@link DisplayColumnChooserCommandHandler} for the new
* performance column grouping feature.
*
* @param columnHideShowLayer
* The {@link ColumnHideShowLayer} for hide/show support.
* @param columnHeaderLayer
* The {@link ColumnHeaderLayer} for retrieving column header
* information.
* @param columnHeaderDataLayer
* The {@link DataLayer} of the column header region for
* retrieving column header information.
* @param cgHeader
* The new performance
* {@link org.eclipse.nebula.widgets.nattable.group.performance.ColumnGroupHeaderLayer}
* to support column grouping. Cannot be <code>null</code>.
* @param sortAvailableColumns
* Flag to configure if entries in the available tree should be
* displayed in sorted order.
* @throws IllegalArgumentException
* if cgHeader is null
*
* @since 1.6
*/
public DisplayColumnChooserCommandHandler(
ColumnHideShowLayer columnHideShowLayer,
ColumnHeaderLayer columnHeaderLayer,
DataLayer columnHeaderDataLayer,
org.eclipse.nebula.widgets.nattable.group.performance.ColumnGroupHeaderLayer cgHeader,
boolean sortAvailableColumns) {
if (cgHeader == null) {
throw new IllegalArgumentException("cgHeader cannot be null"); //$NON-NLS-1$
}
this.selectionLayer = null;
this.columnHideShowLayer = columnHideShowLayer;
this.columnHeaderLayer = columnHeaderLayer;
this.columnHeaderDataLayer = columnHeaderDataLayer;
this.columnGroupHeaderLayer = null;
this.columnGroupModel = null;
this.sortAvailableColumns = sortAvailableColumns;
this.preventHidingAllColumns = false;
this.cghLayer = cgHeader;
}
@Override
public boolean doCommand(DisplayColumnChooserCommand command) {
ColumnChooser columnChooser = this.cghLayer == null
? new ColumnChooser(
command.getNatTable().getShell(),
this.selectionLayer,
this.columnHideShowLayer,
this.columnHeaderLayer,
this.columnHeaderDataLayer,
this.columnGroupHeaderLayer,
this.columnGroupModel,
this.sortAvailableColumns,
this.preventHidingAllColumns)
: new ColumnChooser(
command.getNatTable().getShell(),
this.columnHideShowLayer,
this.columnHeaderLayer,
this.columnHeaderDataLayer,
this.cghLayer,
this.sortAvailableColumns);
columnChooser.setDialogSettings(this.dialogSettings);
columnChooser.addNonModifiableColumn(this.nonModifiableColumns.toArray(new Integer[] {}));
columnChooser.openDialog();
return true;
}
public void setDialogSettings(IDialogSettings dialogSettings) {
this.dialogSettings = dialogSettings;
}
public void addNonModifiableColumn(Integer... columnIndexes) {
for (Integer column : columnIndexes) {
this.nonModifiableColumns.add(column);
}
}
public void removeNonModifiableColumn(Integer... columnIndexes) {
for (Integer column : columnIndexes) {
this.nonModifiableColumns.remove(column);
}
}
@Override
public Class<DisplayColumnChooserCommand> getCommandClass() {
return DisplayColumnChooserCommand.class;
}
}