package com.example.testcase.smartgwt_tests.client;

import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.core.DataClass;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.fields.DataSourceDateField;
import com.smartgwt.client.data.fields.DataSourceSequenceField;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Button;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.calendar.Calendar;
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.HeaderItem;
import com.smartgwt.client.widgets.form.fields.RadioGroupItem;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
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;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class Application implements EntryPoint {

	/**
	 * This is the entry point method.
	 */
	public void onModuleLoad() {
		
		VLayout layout = new VLayout();
		layout.setWidth100();
		layout.setHeight100();
		
		DataSource eventDS = new DataSource();
		DataSourceSequenceField eventIdField = new DataSourceSequenceField(
				"eventId");
		eventIdField.setPrimaryKey(true);

		DataSourceTextField nameField = new DataSourceTextField("name");
		DataSourceTextField descField = new DataSourceTextField("description");
		DataSourceDateField startDateField = new DataSourceDateField(
				"startDate");
		DataSourceDateField endDateField = new DataSourceDateField("endDate");

		eventDS.setFields(eventIdField, nameField, descField, startDateField,
				endDateField);
		eventDS.setClientOnly(true);
		eventDS.setTestData(CalendarData.getRecords());

		final Calendar calendar = new Calendar();
		calendar.setDataSource(eventDS);
		calendar.setAutoFetchData(true);

		// specify the last field from the default fields so that subsequent
		// fields come after the
		// default fields
		TextItem descItem = new TextItem();
		descItem.setName("description");

		// custom fields below
		HeaderItem eventOptions = new HeaderItem();
		eventOptions.setDefaultValue("Event Options");
		
		final SelectItem repeatsItem = new SelectItem();
		repeatsItem.setName("repeats");
		repeatsItem.setTitle("Repeats");
		repeatsItem.setColSpan(4);
		//repeatsItem.setDefaultToFirstOption(true);
		//repeatsItem.setValueMap("Does not repeat", "Daily", "Weekly",
		//		"Monthly", "Yearly");
		repeatsItem.setOptionDataSource(OptionsDataSource.getInstance());

		SelectItem reminderItem = new SelectItem();
		reminderItem.setName("reminderType");
		reminderItem.setTitle("Reminder");
		reminderItem.setWidth(70);
		reminderItem.setDefaultToFirstOption(true);
		reminderItem.setValueMap("Pop-up", "Email");

		final TextItem reminderValue = new TextItem();
		reminderValue.setName("reminderValue");
		reminderValue.setShowTitle(false);
		reminderValue.setWidth(60);
		reminderValue.setDefaultValue(10);

		SelectItem reminderUnits = new SelectItem();
		reminderUnits.setName("reminderUnits");
		reminderUnits.setShowTitle(false);
		reminderUnits.setWidth(70);
		reminderUnits.setDefaultToFirstOption(false);
		reminderUnits.setValueMap("minutes", "hours", "days");
		reminderUnits.addChangedHandler(new ChangedHandler() {
			
			public void onChanged(ChangedEvent event) {
				reminderValue.hide();
			}
		});

		calendar.setEventEditorFields(descItem, eventOptions, repeatsItem,
				reminderItem, reminderValue, reminderUnits);

		TextItem nameItem = new TextItem();
		nameItem.setType("text");
		nameItem.setName("name");

		RadioGroupItem radioGroupItem = new RadioGroupItem("sharing");
		radioGroupItem.setTitle("Sharing");
		radioGroupItem.setVertical(false);
		radioGroupItem.setValueMap("Public", "Private");
		radioGroupItem.setWidth(50);

		calendar.setEventDialogFields(nameItem, radioGroupItem);

		layout.addMember(calendar);
		
		final DynamicForm form = new DynamicForm();
		form.setItems(repeatsItem);
		
		Button popButton = new Button("Popup Combo");
		popButton.addClickHandler(new ClickHandler() {
			
			public void onClick(ClickEvent event) {
				Window popup = new Window();
				popup.setAutoSize(true);
				popup.centerInPage();
				
				popup.addItem(form);
				
				popup.show();
			}
		});
		
		layout.addMember(popButton);
		
		layout.draw();
		
		SC.showConsole();
	}
}
