package org.gwtoolbox.sample.widget.client.table;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.*;
import org.gwtoolbox.commons.types.client.Gender;
import org.gwtoolbox.commons.types.client.Time;
import org.gwtoolbox.commons.util.client.StringUtils;
import org.gwtoolbox.ioc.core.client.annotation.Component;
import org.gwtoolbox.ioc.core.client.annotation.Order;
import org.gwtoolbox.sample.widget.client.SamplePanel;
import org.gwtoolbox.widget.client.button.SimpleButton;
import org.gwtoolbox.widget.client.data.DataTypes;
import org.gwtoolbox.widget.client.data.MapRecord;
import org.gwtoolbox.widget.client.data.Record;
import org.gwtoolbox.widget.client.grid.Column;
import org.gwtoolbox.widget.client.grid.Columns;
import org.gwtoolbox.widget.client.grid.DataGrid;
import org.gwtoolbox.widget.client.grid.selection.MultiRowSelection;
import org.gwtoolbox.widget.client.grid.selection.MultiRowSelectionModel;
import org.gwtoolbox.widget.client.grid.selection.SingleRowSelection;
import org.gwtoolbox.widget.client.grid.selection.SingleRowSelectionModel;
import static com.google.gwt.user.client.ui.HasHorizontalAlignment.ALIGN_CENTER;
import static org.gwtoolbox.widget.client.grid.Column.Feature.HIDABLE;
import static org.gwtoolbox.widget.client.grid.Column.Feature.SORTABLE;
import static org.gwtoolbox.widget.client.panel.LayoutUtils.addGap;
/**
* @author Uri Boness
*/
@Component
@Order(1)
@TableSample
public class DataTableSample extends Composite implements SamplePanel {
public DataTableSample() {
Columns columns = new Columns(
new Column("firstName", "First Name", DataTypes.TEXT, 100),
new Column("lastName", "Last Name", DataTypes.TEXT, 100),
new Column("age", "Age", DataTypes.INT, 100),
new Column("gender", "Gender", DataTypes.GENDER, 100, SORTABLE, HIDABLE).setAlignment(ALIGN_CENTER),
new Column("birthTime", "Birth Time", DataTypes.TIME, 100, SORTABLE, HIDABLE),
new Column("dutch", "Dutch", DataTypes.BOOLEAN, 50, SORTABLE, HIDABLE).setAlignment(ALIGN_CENTER)
);
columns.setFeatures("lastName", SORTABLE, HIDABLE);
columns.setFeatures("age", SORTABLE, HIDABLE);
columns.setAlignment("age", ALIGN_CENTER);
final DataGrid grid = new DataGrid(columns);
grid.setEditInPlace(true);
grid.setSize("100%", "250px");
grid.setSelectionModel(new SingleRowSelectionModel());
Record record = new MapRecord()
.setValue("firstName", "Uri")
.setValue("lastName", "Boness")
.setIntValue("age", 33)
.setValue("gender", Gender.MALE)
.setValue("birthTime", new Time(5))
.setValue("dutch", false);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Daan")
.setValue("lastName", "Boness")
.setIntValue("age", 5)
.setValue("gender", Gender.MALE)
.setValue("birthTime", new Time(5))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
record = new MapRecord()
.setValue("firstName", "Lian")
.setValue("lastName", "Boness")
.setIntValue("age", 2)
.setValue("gender", Gender.FEMALE)
.setValue("birthTime", new Time(10))
.setValue("dutch", true);
grid.addRecord(record);
final Label messageLabel = new Label();
DOM.setStyleAttribute(messageLabel.getElement(), "marginTop", "10px");
SimpleButton singleModelButton = new SimpleButton("Set Single Line Selection", new ClickHandler() {
public void onClick(ClickEvent event) {
SingleRowSelectionModel model = new SingleRowSelectionModel();
model.addListener(new SingleRowSelectionModel.Listener() {
public void selectionCleared() {
messageLabel.setText("Selection cleared.");
}
public void rowSelected(int row, SingleRowSelection selection) {
messageLabel.setText("selected row " + row);
}
});
grid.setSelectionModel(model);
}
});
SimpleButton multiModelButton = new SimpleButton("Set Multi-Line Selection", new ClickHandler() {
public void onClick(ClickEvent event) {
MultiRowSelectionModel model = new MultiRowSelectionModel();
model.addListener(new MultiRowSelectionModel.Listener() {
public void selectionCleared() {
messageLabel.setText("Selection cleared.");
}
public void rowSelected(int row, MultiRowSelection model) {
messageLabel.setText("Selected rows: " + StringUtils.collectionToDelimetedString(model.getSelectedRows(), ", "));
}
public void rowUnselected(int row, MultiRowSelection model) {
messageLabel.setText("Selected rows: " + StringUtils.collectionToDelimetedString(model.getSelectedRows(), ", "));
}
});
grid.setSelectionModel(model);
}
});
SimpleButton clearModelButton = new SimpleButton("Clear Selection Model", new ClickHandler() {
public void onClick(ClickEvent event) {
grid.clearSelectionModel();
}
});
SimpleButton sortByAgeButton = new SimpleButton("Sort By Age (asc)", new ClickHandler() {
public void onClick(ClickEvent event) {
grid.sortByColumn("age", true);
}
});
SimpleButton sortByAgeDescButton = new SimpleButton("Sort By Age (desc)", new ClickHandler() {
public void onClick(ClickEvent event) {
grid.sortByColumn("age", false);
}
});
HorizontalPanel buttons = new HorizontalPanel();
buttons.add(singleModelButton);
addGap(buttons, "10px");
buttons.add(multiModelButton);
addGap(buttons, "10px");
buttons.add(clearModelButton);
addGap(buttons, "10px");
buttons.add(sortByAgeButton);
addGap(buttons, "10px");
buttons.add(sortByAgeDescButton);
DOM.setStyleAttribute(buttons.getElement(), "marginTop", "10px");
FlowPanel main = new FlowPanel();
main.add(grid);
main.add(messageLabel);
main.add(buttons);
SimplePanel sp = new SimplePanel();
sp.setWidget(main);
initWidget(sp);
}
public String getName() {
return "Data Table";
}
public Widget getContentWidget() {
return this;
}
public void reset() {
}
}