/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.gwt2.example.base.client.page.overview;
import java.util.Comparator;
import java.util.List;
import org.geomajas.gwt2.example.base.client.ExampleBase;
import org.geomajas.gwt2.example.base.client.resource.DataGridResource;
import org.geomajas.gwt2.example.base.client.sample.ShowcaseSampleDefinition;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiFactory;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;
/**
* Sample view that displays all samples in a list.
*
* @author Pieter De Graef
*/
public class SampleListView extends Composite implements HasSamples {
/**
* UI binder interface this widget.
*
* @author Pieter De Graef
*/
interface MyUiBinder extends UiBinder<Widget, SampleListView> {
}
private static final MyUiBinder UIBINDER = GWT.create(MyUiBinder.class);
private static final DataGridResource RESOURCE = GWT.create(DataGridResource.class);
private final ListHandler<ShowcaseSampleDefinition> sortHandler;
private final ListDataProvider<ShowcaseSampleDefinition> dataProvider;
@UiField
protected DataGrid<ShowcaseSampleDefinition> grid;
public SampleListView(List<ShowcaseSampleDefinition> data, final SampleOverviewPage overviewPage) {
initWidget(UIBINDER.createAndBindUi(this));
ProvidesKey<ShowcaseSampleDefinition> sampleKeyProvider = new ProvidesKey<ShowcaseSampleDefinition>() {
public Object getKey(ShowcaseSampleDefinition item) {
return item.getTitle();
}
};
// We fill the grid through a list of SamplePanelFactory objects:
dataProvider = new ListDataProvider<ShowcaseSampleDefinition>(sampleKeyProvider);
dataProvider.addDataDisplay(grid);
// Selection: show sample on click
final SingleSelectionModel<ShowcaseSampleDefinition> selectionModel;
selectionModel = new SingleSelectionModel<ShowcaseSampleDefinition>(sampleKeyProvider);
grid.setSelectionModel(selectionModel);
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
public void onSelectionChange(SelectionChangeEvent event) {
ExampleBase.showSample(selectionModel.getSelectedObject());
}
});
// Add a sort handler:
sortHandler = new ListHandler<ShowcaseSampleDefinition>(dataProvider.getList());
grid.addColumnSortHandler(sortHandler);
// Initialize the grid columns:
initColumns();
// Apply the entire data-set:
setData(data);
}
public void setData(List<ShowcaseSampleDefinition> data) {
dataProvider.getList().clear();
dataProvider.getList().addAll(data);
dataProvider.flush();
}
@UiFactory
protected DataGrid<ShowcaseSampleDefinition> createGrid() {
return new DataGrid<ShowcaseSampleDefinition>(1000, RESOURCE);
}
private void initColumns() {
// Column1: Title
final TextColumn<ShowcaseSampleDefinition> titleColumn = new TextColumn<ShowcaseSampleDefinition>() {
public String getValue(ShowcaseSampleDefinition object) {
return object.getTitle();
}
};
titleColumn.setSortable(true);
grid.addColumn(titleColumn, "Title");
grid.setColumnWidth(titleColumn, 300, Unit.PX);
sortHandler.setComparator(titleColumn, new Comparator<ShowcaseSampleDefinition>() {
public int compare(ShowcaseSampleDefinition one, ShowcaseSampleDefinition two) {
return titleColumn.getValue(one).compareTo(titleColumn.getValue(two));
}
});
// Column2: Category
final TextColumn<ShowcaseSampleDefinition> categoryColumn = new TextColumn<ShowcaseSampleDefinition>() {
public String getValue(ShowcaseSampleDefinition object) {
return object.getCategory();
}
};
categoryColumn.setSortable(true);
grid.addColumn(categoryColumn, "Category");
grid.setColumnWidth(categoryColumn, 250, Unit.PX);
sortHandler.setComparator(categoryColumn, new Comparator<ShowcaseSampleDefinition>() {
public int compare(ShowcaseSampleDefinition one, ShowcaseSampleDefinition two) {
return categoryColumn.getValue(one).compareTo(categoryColumn.getValue(two));
}
});
// Column3: Description
final TextColumn<ShowcaseSampleDefinition> descriptionColumn = new TextColumn<ShowcaseSampleDefinition>() {
public String getValue(ShowcaseSampleDefinition object) {
return object.getShortDescription();
}
};
descriptionColumn.setSortable(true);
grid.addColumn(descriptionColumn, "Description");
sortHandler.setComparator(descriptionColumn, new Comparator<ShowcaseSampleDefinition>() {
public int compare(ShowcaseSampleDefinition one, ShowcaseSampleDefinition two) {
return descriptionColumn.getValue(one).compareTo(descriptionColumn.getValue(two));
}
});
}
}