package com.smartgwt.sample.showcase.client.grid;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.types.DragDataAction;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.TransferImgButton;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.layout.HStack;
import com.smartgwt.client.widgets.layout.LayoutSpacer;
import com.smartgwt.client.widgets.layout.VStack;
import com.smartgwt.sample.showcase.client.PanelFactory;
import com.smartgwt.sample.showcase.client.ShowcasePanel;
import com.smartgwt.sample.showcase.client.data.EmployeeXmlDS;
import com.smartgwt.sample.showcase.client.data.TeamMembersXmlDS;
public class GridDataBoundDragDropSample extends ShowcasePanel {
private static final String DESCRIPTION = "<p>Drag employee records into the Project Team Members list. Smart GWT recognizes that the two dataSources are linked by a " +
"foreign key relationship, and automatically uses that relationship to populate values in the record that is added when you drop. " +
"Smart GWT also populates fields based on current criteria and maps explicit titleFields as necessary.</p>" +
"<p>In this example, note that Smart GWT is automatically populating all three of the fields in the teamMembers dataSource, even though none of " +
"those fields is present in the employees dataSource we are dragging from. Change the \"Team for Project\" " +
"select box, then try dragging employees across; note that the Project Code column is being correctly populated for the dropped records.</p>";
public static class Factory implements PanelFactory {
private String id;
public Canvas create() {
GridDataBoundDragDropSample panel = new GridDataBoundDragDropSample();
id = panel.getID();
return panel;
}
public String getID() {
return id;
}
public String getDescription() {
return DESCRIPTION;
}
}
@Override
protected boolean isTopIntro() {
return true;
}
public Canvas getViewPanel() {
String[] projects = new String[] {
"New Costing System", "Warehousing Improvements", "Evaluate AJAX Frameworks", "Upgrade Postgres", "Online Billing"
};
DataSource employeesDS = EmployeeXmlDS.getInstance();
final ListGrid employeesGrid = new ListGrid();
employeesGrid.setWidth(300);
employeesGrid.setHeight(224);
employeesGrid.setDataSource(employeesDS);
employeesGrid.setCanDragRecordsOut(true);
employeesGrid.setDragDataAction(DragDataAction.COPY);
employeesGrid.setAutoFetchData(false);
ListGridField employeeIdField = new ListGridField("EmployeeId");
employeeIdField.setWidth("25%");
ListGridField nameField = new ListGridField("Name");
employeesGrid.setFields(employeeIdField, nameField);
DataSource teamMembersDS = TeamMembersXmlDS.getInstance();
final ListGrid projectGrid = new ListGrid();
projectGrid.setWidth(300);
projectGrid.setHeight(264);
projectGrid.setDataSource(teamMembersDS);
projectGrid.setCanAcceptDroppedRecords(true);
projectGrid.setCanRemoveRecords(true);
projectGrid.setAutoFetchData(false);
projectGrid.setPreventDuplicates(true);
ListGridField employeeIdField2 = new ListGridField("employeeId");
employeeIdField2.setWidth("20%");
ListGridField employeeNameField2 = new ListGridField("employeeName");
employeeNameField2.setWidth("40%");
ListGridField projectCodeField2 = new ListGridField("projectCode");
projectGrid.setFields(employeeIdField2, employeeNameField2, projectCodeField2);
HStack hStack = new HStack(10);
hStack.setHeight(160);
VStack vStack = new VStack();
LayoutSpacer spacer = new LayoutSpacer();
spacer.setHeight(30);
vStack.addMember(spacer);
vStack.addMember(employeesGrid);
hStack.addMember(vStack);
TransferImgButton arrowImg = new TransferImgButton(TransferImgButton.RIGHT);
arrowImg.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
projectGrid.transferSelectedData(employeesGrid);
}
});
hStack.addMember(arrowImg);
VStack vStack2 = new VStack();
final DynamicForm projectSelectorForm = new DynamicForm();
projectSelectorForm.setWidth(300);
projectSelectorForm.setHeight(30);
SelectItem selectItem = new SelectItem("projectCode", "Team for Project");
selectItem.setDefaultValue(projects[0]);
selectItem.setValueMap(projects);
selectItem.addChangedHandler(new ChangedHandler() {
public void onChanged(ChangedEvent event) {
Criteria criteria = projectSelectorForm.getValuesAsCriteria();
projectGrid.fetchData(criteria);
}
});
projectSelectorForm.setFields(selectItem);
vStack2.addMember(projectSelectorForm);
vStack2.addMember(projectGrid);
hStack.addMember(vStack2);
projectGrid.fetchData(projectSelectorForm.getValuesAsCriteria());
employeesGrid.fetchData();
return hStack;
}
public String getIntro() {
return DESCRIPTION;
}
}