/******************************************************************************* * Copyright (c) 2012 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.edit.action; import org.eclipse.nebula.widgets.nattable.NatTable; import org.eclipse.nebula.widgets.nattable.edit.command.UpdateDataCommand; import org.eclipse.nebula.widgets.nattable.layer.IUniqueIndexLayer; import org.eclipse.nebula.widgets.nattable.layer.LayerUtil; import org.eclipse.nebula.widgets.nattable.painter.cell.ColumnHeaderCheckBoxPainter; import org.eclipse.nebula.widgets.nattable.ui.action.IMouseAction; import org.eclipse.swt.events.MouseEvent; public class ToggleCheckBoxColumnAction implements IMouseAction { private final ColumnHeaderCheckBoxPainter columnHeaderCheckBoxPainter; private final IUniqueIndexLayer bodyDataLayer; public ToggleCheckBoxColumnAction( ColumnHeaderCheckBoxPainter columnHeaderCheckBoxPainter, IUniqueIndexLayer bodyDataLayer) { this.columnHeaderCheckBoxPainter = columnHeaderCheckBoxPainter; this.bodyDataLayer = bodyDataLayer; } @Override public void run(NatTable natTable, MouseEvent event) { int sourceColumnPosition = natTable.getColumnPositionByX(event.x); int columnPosition = LayerUtil.convertColumnPosition(natTable, sourceColumnPosition, this.bodyDataLayer); int checkedCellsCount = this.columnHeaderCheckBoxPainter .getCheckedCellsCount(columnPosition, natTable.getConfigRegistry()); boolean targetState = checkedCellsCount < this.bodyDataLayer.getRowCount(); for (int rowPosition = 0; rowPosition < this.bodyDataLayer.getRowCount(); rowPosition++) { this.bodyDataLayer.doCommand(new UpdateDataCommand(this.bodyDataLayer, columnPosition, rowPosition, targetState)); } } }