/*******************************************************************************
* 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.resize.command;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.nebula.widgets.nattable.command.AbstractMultiColumnCommand;
import org.eclipse.nebula.widgets.nattable.command.LayerCommandUtil;
import org.eclipse.nebula.widgets.nattable.coordinate.ColumnPositionCoordinate;
import org.eclipse.nebula.widgets.nattable.layer.ILayer;
public class MultiColumnResizeCommand extends AbstractMultiColumnCommand {
private int commonColumnWidth = -1;
protected Map<ColumnPositionCoordinate, Integer> colPositionToWidth = new HashMap<ColumnPositionCoordinate, Integer>();
/**
* All columns are being resized to the same size e.g. during a drag resize
*/
public MultiColumnResizeCommand(ILayer layer, int[] columnPositions,
int commonColumnWidth) {
super(layer, columnPositions);
this.commonColumnWidth = commonColumnWidth;
}
/**
* Each column is being resized to a different size e.g. during auto resize
*/
public MultiColumnResizeCommand(ILayer layer, int[] columnPositions,
int[] columnWidths) {
super(layer, columnPositions);
for (int i = 0; i < columnPositions.length; i++) {
this.colPositionToWidth.put(new ColumnPositionCoordinate(layer,
columnPositions[i]), Integer.valueOf(columnWidths[i]));
}
}
protected MultiColumnResizeCommand(MultiColumnResizeCommand command) {
super(command);
this.commonColumnWidth = command.commonColumnWidth;
this.colPositionToWidth = new HashMap<ColumnPositionCoordinate, Integer>(
command.colPositionToWidth);
}
public int getCommonColumnWidth() {
return this.commonColumnWidth;
}
public int getColumnWidth(int columnPosition) {
for (ColumnPositionCoordinate columnPositionCoordinate : this.colPositionToWidth
.keySet()) {
if (columnPositionCoordinate.getColumnPosition() == columnPosition) {
return this.colPositionToWidth.get(columnPositionCoordinate)
.intValue();
}
}
return this.commonColumnWidth;
}
/**
* Convert the column positions to the target layer. Ensure that the width
* associated with the column is now associated with the converted column
* position.
*/
@Override
public boolean convertToTargetLayer(ILayer targetLayer) {
Map<ColumnPositionCoordinate, Integer> newColPositionToWidth = new HashMap<ColumnPositionCoordinate, Integer>();
for (ColumnPositionCoordinate columnPositionCoordinate : this.colPositionToWidth
.keySet()) {
ColumnPositionCoordinate convertedColumnPositionCoordinate = LayerCommandUtil
.convertColumnPositionToTargetContext(
columnPositionCoordinate, targetLayer);
if (convertedColumnPositionCoordinate != null) {
newColPositionToWidth.put(convertedColumnPositionCoordinate,
this.colPositionToWidth.get(columnPositionCoordinate));
}
}
if (super.convertToTargetLayer(targetLayer)) {
this.colPositionToWidth = newColPositionToWidth;
return true;
} else {
return false;
}
}
@Override
public MultiColumnResizeCommand cloneCommand() {
return new MultiColumnResizeCommand(this);
}
}