/******************************************************************************* | |
* Copyright (c) 2013 Dirk Fauth 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: | |
* Dirk Fauth <dirk.fauth@gmail.com> - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.nebula.widgets.nattable.examples._500_Layers; | |
import java.util.HashMap; | |
import java.util.List; | |
import java.util.Map; | |
import org.eclipse.nebula.widgets.nattable.NatTable; | |
import org.eclipse.nebula.widgets.nattable.data.IDataProvider; | |
import org.eclipse.nebula.widgets.nattable.examples.AbstractNatExample; | |
import org.eclipse.nebula.widgets.nattable.examples.data.person.Person; | |
import org.eclipse.nebula.widgets.nattable.examples.data.person.PersonService; | |
import org.eclipse.nebula.widgets.nattable.examples.runner.StandaloneNatExampleRunner; | |
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultBodyDataProvider; | |
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultColumnHeaderDataProvider; | |
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultCornerDataProvider; | |
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultRowHeaderDataProvider; | |
import org.eclipse.nebula.widgets.nattable.grid.layer.ColumnHeaderLayer; | |
import org.eclipse.nebula.widgets.nattable.grid.layer.CornerLayer; | |
import org.eclipse.nebula.widgets.nattable.grid.layer.DefaultColumnHeaderDataLayer; | |
import org.eclipse.nebula.widgets.nattable.grid.layer.DefaultRowHeaderDataLayer; | |
import org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer; | |
import org.eclipse.nebula.widgets.nattable.grid.layer.RowHeaderLayer; | |
import org.eclipse.nebula.widgets.nattable.layer.DataLayer; | |
import org.eclipse.nebula.widgets.nattable.layer.ILayer; | |
import org.eclipse.nebula.widgets.nattable.reorder.RowReorderLayer; | |
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer; | |
import org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.swt.widgets.Control; | |
/** | |
* Simple example showing how to add the {@link RowReorderLayer} to the layer | |
* composition of a grid. | |
* | |
* @author Dirk Fauth | |
* | |
*/ | |
public class _542_RowReorderExample extends AbstractNatExample { | |
public static void main(String[] args) throws Exception { | |
StandaloneNatExampleRunner.run(800, 400, new _542_RowReorderExample()); | |
} | |
@Override | |
public String getDescription() { | |
return "This example shows the usage of the RowReorderLayer within a grid. Using this" | |
+ " layer allows you to drag and drop rows in the grid."; | |
} | |
@Override | |
public Control createExampleControl(Composite parent) { | |
//property names of the Person class | |
String[] propertyNames = {"firstName", "lastName", "gender", "married", "birthday"}; | |
//mapping from property to label, needed for column header labels | |
Map<String, String> propertyToLabelMap = new HashMap<String, String>(); | |
propertyToLabelMap.put("firstName", "Firstname"); | |
propertyToLabelMap.put("lastName", "Lastname"); | |
propertyToLabelMap.put("gender", "Gender"); | |
propertyToLabelMap.put("married", "Married"); | |
propertyToLabelMap.put("birthday", "Birthday"); | |
//build the body layer stack | |
//Usually you would create a new layer stack by extending AbstractIndexLayerTransform and | |
//setting the ViewportLayer as underlying layer. But in this case using the ViewportLayer | |
//directly as body layer is also working. | |
final List<Person> contents = PersonService.getPersons(10); | |
IDataProvider bodyDataProvider = new DefaultBodyDataProvider<Person>(contents, propertyNames); | |
final DataLayer bodyDataLayer = new DataLayer(bodyDataProvider); | |
final RowReorderLayer rowReorderLayer = new RowReorderLayer(bodyDataLayer); | |
final SelectionLayer selectionLayer = new SelectionLayer(rowReorderLayer); | |
ViewportLayer viewportLayer = new ViewportLayer(selectionLayer); | |
//build the column header layer | |
IDataProvider columnHeaderDataProvider = new DefaultColumnHeaderDataProvider(propertyNames, propertyToLabelMap); | |
DataLayer columnHeaderDataLayer = new DefaultColumnHeaderDataLayer(columnHeaderDataProvider); | |
ILayer columnHeaderLayer = new ColumnHeaderLayer(columnHeaderDataLayer, viewportLayer, selectionLayer); | |
//build the row header layer | |
IDataProvider rowHeaderDataProvider = new DefaultRowHeaderDataProvider(bodyDataProvider); | |
DataLayer rowHeaderDataLayer = new DefaultRowHeaderDataLayer(rowHeaderDataProvider); | |
ILayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer, viewportLayer, selectionLayer); | |
//build the corner layer | |
IDataProvider cornerDataProvider = new DefaultCornerDataProvider(columnHeaderDataProvider, rowHeaderDataProvider); | |
DataLayer cornerDataLayer = new DataLayer(cornerDataProvider); | |
ILayer cornerLayer = new CornerLayer(cornerDataLayer, rowHeaderLayer, columnHeaderLayer); | |
//build the grid layer | |
GridLayer gridLayer = new GridLayer(viewportLayer, columnHeaderLayer, rowHeaderLayer, cornerLayer); | |
return new NatTable(parent, gridLayer); | |
} | |
} |