/* * Copyright 2000-2016 Vaadin Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.vaadin.v7.client.ui; import java.util.Date; import com.google.gwt.event.dom.client.DomEvent; import com.vaadin.client.DateTimeService; import com.vaadin.v7.client.ui.VCalendarPanel.FocusOutListener; import com.vaadin.v7.client.ui.VCalendarPanel.SubmitListener; import com.vaadin.v7.shared.ui.datefield.Resolution; /** * A client side implementation for InlineDateField */ public class VDateFieldCalendar extends VDateField { /** For internal use only. May be removed or replaced in the future. */ public final VCalendarPanel calendarPanel; public VDateFieldCalendar() { super(); calendarPanel = new VCalendarPanel(); calendarPanel.setParentField(this); add(calendarPanel); calendarPanel.setSubmitListener(new SubmitListener() { @Override public void onSubmit() { updateValueFromPanel(); } @Override public void onCancel() { // TODO Auto-generated method stub } }); calendarPanel.setFocusOutListener(new FocusOutListener() { @Override public boolean onFocusOut(DomEvent<?> event) { updateValueFromPanel(); return false; } }); } /** * TODO refactor: almost same method as in VPopupCalendar.updateValue * <p> * For internal use only. May be removed or replaced in the future. */ @SuppressWarnings("deprecation") public void updateValueFromPanel() { // If field is invisible at the beginning, client can still be null when // this function is called. if (getClient() == null) { return; } Date date2 = calendarPanel.getDate(); Date currentDate = getCurrentDate(); if (currentDate == null || date2.getTime() != currentDate.getTime()) { setCurrentDate((Date) date2.clone()); getClient().updateVariable(getId(), "year", date2.getYear() + 1900, false); if (getCurrentResolution().getCalendarField() > Resolution.YEAR .getCalendarField()) { getClient().updateVariable(getId(), "month", date2.getMonth() + 1, false); if (getCurrentResolution().getCalendarField() > Resolution.MONTH .getCalendarField()) { getClient().updateVariable(getId(), "day", date2.getDate(), false); if (getCurrentResolution() .getCalendarField() > Resolution.DAY .getCalendarField()) { getClient().updateVariable(getId(), "hour", date2.getHours(), false); if (getCurrentResolution() .getCalendarField() > Resolution.HOUR .getCalendarField()) { getClient().updateVariable(getId(), "min", date2.getMinutes(), false); if (getCurrentResolution() .getCalendarField() > Resolution.MINUTE .getCalendarField()) { getClient().updateVariable(getId(), "sec", date2.getSeconds(), false); if (getCurrentResolution() .getCalendarField() > Resolution.SECOND .getCalendarField()) { getClient().updateVariable(getId(), "msec", DateTimeService .getMilliseconds(date2), false); } } } } } } if (isImmediate()) { getClient().sendPendingVariableChanges(); } } } public void setTabIndex(int tabIndex) { calendarPanel.getElement().setTabIndex(tabIndex); } public int getTabIndex() { return calendarPanel.getElement().getTabIndex(); } }