package com.smartgwt.sample.showcase.client.tree;

import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.form.SearchForm;
import com.smartgwt.client.widgets.form.fields.IPickTreeItem;
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.layout.VLayout;
import com.smartgwt.client.widgets.tree.TreeGrid;
import com.smartgwt.client.widgets.tree.TreeGridField;
import com.smartgwt.sample.showcase.client.PanelFactory;
import com.smartgwt.sample.showcase.client.ShowcasePanel;
import com.smartgwt.sample.showcase.client.data.EmployeeXmlDS;

public class TreeEditingSample extends ShowcasePanel {
    
	private static final String DESCRIPTION = "" +
            "<p>First choose an employee via the menu to see that employee's direct reports in the ListGrid.</p>" +
            "<p>Click on employees in the tree to edit them, and drag and drop employees to rearrange them. " +
            "<p>Changing an employee's salary in the grid will be automatically reflected in the tree.</p>" +
            "<p>Dragging an employee to another manager in the tree will make that employee appear or disappear " +
            "in the grid if the grid is showing the original or new manager's employees.</p>" +
            "<p>Changes made in the tree or ListGrid are automatically saved to the server and reflected in the other components.</p>";

	public static class Factory implements PanelFactory {
		private String id;

		public ShowcasePanel create() {
			TreeEditingSample panel = new TreeEditingSample();
			id = panel.getID();
			return panel;
		}

		public String getID() {
			return id;
		}

		public String getDescription() {
			return DESCRIPTION;
		}
	}

	public Canvas getViewPanel() {
		TreeGridField fieldName = new TreeGridField("Name", 150);
		TreeGridField fieldJob = new TreeGridField("Job", 150);
		TreeGridField fieldSalary = new TreeGridField("Salary");

		TreeGrid employeeTree = new TreeGrid();
		employeeTree.setID("employeeTree");
		employeeTree.setWidth(500);
		employeeTree.setHeight(250);
		employeeTree.setDataSource(EmployeeXmlDS.getInstance());
		employeeTree.setNodeIcon("icons/16/person.png");
		employeeTree.setFolderIcon("icons/16/person.png");
		employeeTree.setAutoFetchData(true);
		employeeTree.setLoadDataOnDemand(false);
		employeeTree.setCanEdit(true);
		employeeTree.setCanReorderRecords(true);
		employeeTree.setCanAcceptDroppedRecords(true);
		employeeTree.setShowDropIcons(false);
		employeeTree.setShowOpenIcons(false);
		employeeTree.setClosedIconSuffix("");
		employeeTree.setFields(fieldName, fieldJob, fieldSalary);
        employeeTree.setShowSelectedIcons(true);
		
		final ListGrid employeeGrid = new ListGrid();
		employeeGrid.setID("employeeGrid");
		employeeGrid.setWidth(500);
		employeeGrid.setHeight(250);
        employeeGrid.setEmptyMessage("Select an Employee from the PickTree Item above.");
		employeeGrid.setDataSource(EmployeeXmlDS.getInstance());
		employeeGrid.setCanEdit(true);
		employeeGrid.setFields(new TreeGridField("Name", 150), new TreeGridField("Job", 150), new TreeGridField("Salary"));

		IPickTreeItem searchPickTree = new IPickTreeItem();
		searchPickTree.setCanSelectParentItems(true);
		searchPickTree.setShowTitle(false);
		searchPickTree.setDataSource(EmployeeXmlDS.getInstance());
		searchPickTree.setDisplayField("Name");
		searchPickTree.setValueField("EmployeeId");
		searchPickTree.addChangedHandler(new ChangedHandler() {
			public void onChanged(ChangedEvent event) {
				Criteria c = new Criteria();
				c.addCriteria("ReportsTo", (Integer)event.getValue());
				employeeGrid.fetchData(c);
			}
		});

		SearchForm searchForm = new SearchForm();
		searchForm.setID("employeeSearchForm");
		searchForm.setWidth(200);
		searchForm.setHeight(30);
		searchForm.setFields(searchPickTree);
				
        VLayout mainView = new VLayout(10);
        mainView.setHeight100();
        mainView.setWidth100();

		mainView.addMember(searchForm);
		mainView.addMember(employeeGrid);
        mainView.addMember(employeeTree);
	
		return mainView;
	}

	public String getIntro() {
		return DESCRIPTION;
	}
    
    @Override
    protected boolean shouldWrapViewPanel() {
        return true;
    }
}