package com.eas.widgets.boxes;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.datepicker.client.DatePicker;
public class DateTimePicker extends DatePicker {
TimePicker tmPicker;
FlowPanel timePickerCaller;
FlowPanel widgetContainer;
FlowPanel calendarContainer;
VerticalPanel panel;
Element triangle;
public DateTimePicker() {
super();
}
@Override
protected void setup() {
widgetContainer = new FlowPanel();
widgetContainer.setStyleName("date-time-picker");
triangle = Document.get().createDivElement();
triangle.addClassName("date-time-triangle");
widgetContainer.getElement().appendChild(triangle);
calendarContainer = new FlowPanel();
calendarContainer.getElement().getStyle().setPosition(Position.RELATIVE);
initWidget(widgetContainer);
panel = new VerticalPanel();
setStyleName(panel.getElement(), "gwt-DatePicker");
panel.getElement().getStyle().setBorderWidth(0, Style.Unit.PX);
panel.add(getMonthSelector());
panel.add(getView());
tmPicker = new TimePicker();
timePickerCaller = new FlowPanel();
timePickerCaller.getElement().getStyle().setWidth(100, Style.Unit.PCT);
timePickerCaller.getElement().getStyle().setHeight(20, Style.Unit.PX);
timePickerCaller.setStyleName("time-picker-button");
calendarContainer.add(panel);
calendarContainer.add(tmPicker);
widgetContainer.add(calendarContainer);
widgetContainer.add(timePickerCaller);
setDateAndTimeView();
timePickerCaller.addDomHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (tmPicker.isShowing()) {
timePickerCaller.setStyleName("time-picker-button");
tmPicker.hide();
} else {
timePickerCaller.setStyleName("date-picker-button");
tmPicker.show();
}
}
}, ClickEvent.getType());
}
public void setDateAndTimeView() {
tmPicker.setAbsolute();
panel.getElement().getStyle().setDisplay(Display.BLOCK);
timePickerCaller.getElement().getStyle().setDisplay(Display.BLOCK);
tmPicker.getElement().getStyle().setDisplay(Display.BLOCK);
}
public void setDateView() {
panel.getElement().getStyle().setDisplay(Display.BLOCK);
timePickerCaller.getElement().getStyle().setDisplay(Display.NONE);
tmPicker.getElement().getStyle().setDisplay(Display.NONE);
}
public void setTimeView() {
tmPicker.setRelative();
tmPicker.getElement().getStyle().setDisplay(Display.BLOCK);
panel.getElement().getStyle().setDisplay(Display.NONE);
timePickerCaller.getElement().getStyle().setDisplay(Display.NONE);
}
public TimePicker getTimePicker() {
return tmPicker;
}
public void shown(boolean onTheRight) {
if(onTheRight){
triangle.removeClassName("date-time-triangle-left");
}else{
triangle.addClassName("date-time-triangle-left");
}
}
}