package com.smartgwt.sample.showcase.client.forms.layout;

import java.util.HashMap;

import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
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.ValuesManager;
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
import com.smartgwt.client.widgets.form.fields.DateItem;
import com.smartgwt.client.widgets.form.fields.FloatItem;
import com.smartgwt.client.widgets.form.fields.TextAreaItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;
import com.smartgwt.sample.showcase.client.PanelFactory;
import com.smartgwt.sample.showcase.client.ShowcasePanel;

public class FormSplittingSample extends ShowcasePanel {
    private static final String DESCRIPTION = "Click \"Submit\" to jump to a validation error in " + 
    		"the \"Stock\" tab. Forms which are split for layout purposes can behave like a " + 
    		"single logical form for validation and saves.";

    public static class Factory implements PanelFactory {
        private String id;

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

        public String getID() {
            return id;
        }

        public String getDescription() {
            return DESCRIPTION;
        }
    }

    public Canvas getViewPanel() {
        final ValuesManager vm = new ValuesManager();


        
        final TabSet theTabs = new TabSet();
        theTabs.setWidth(400);
        theTabs.setHeight(250);
        
        Tab item = new Tab();
        item.setTitle("Item");
        
        final DynamicForm form0 = new DynamicForm();
        form0.setID("form0");
        form0.setValuesManager(vm);
        
        TextItem itemName = new TextItem();
        itemName.setName("itemName");
        itemName.setTitle("Item");
        
        TextAreaItem description = new TextAreaItem();
        description.setName("description");
        description.setTitle("Description");
        
        FloatItem price = new FloatItem();
        price.setName("price");
        price.setTitle("Price");
        price.setDefaultValue("low");
        
        form0.setFields(itemName, description, price);
        item.setPane(form0);

        Tab stock = new Tab();
        stock.setTitle("Stock");
        
        final DynamicForm form1 = new DynamicForm();
        form1.setID("form1");
        form1.setValuesManager(vm);
        
        CheckboxItem inStock = new CheckboxItem();
        inStock.setName("inStock");
        inStock.setTitle("In Stock");
        
        DateItem nextShipment = new DateItem();
        nextShipment.setName("nextShipment");
        nextShipment.setTitle("Next Shipment");
        nextShipment.setWrapTitle(false);
        nextShipment.setUseTextField(true);
        
        form1.setFields(inStock, nextShipment);
        stock.setPane(form1);
        
        theTabs.setTabs(item, stock);
        
        IButton submit = new IButton();
        submit.setTitle("Submit");
        submit.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				vm.validate();
				if (form1.hasErrors()) {
					theTabs.selectTab(1);
				} else {
					theTabs.selectTab(0);
				}
			}
        });
        
        VLayout vLayout = new VLayout();
        vLayout.setMembersMargin(10);
        vLayout.addMember(theTabs);
        vLayout.addMember(submit);

        vm.setValues(new HashMap<String,String>() {{
            put("price", "low");
            put("nextShipment", "256");
        }});
        return vLayout;
    }

    public String getIntro() {
        return DESCRIPTION;
    }

}