/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.gwt.widgets.client.controls;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import com.google.gwt.user.client.ui.CellPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.datepicker.client.DateBox.DefaultFormat;
import org.pentaho.gwt.widgets.client.ui.ICallback;
import org.pentaho.gwt.widgets.client.ui.IChangeHandler;
import org.pentaho.gwt.widgets.client.utils.TimeUtil.TimeOfDay;
import java.util.Date;
/**
* @author Steven Barkdull
*
*/
public class DateTimePicker extends FlowPanel implements IChangeHandler {
private DefaultFormat format = new DefaultFormat( DateTimeFormat.getFormat( PredefinedFormat.DATE_SHORT ) );
protected DatePickerEx datePicker = new DatePickerEx( format );
protected TimePicker timePicker = new TimePicker();
private ICallback<IChangeHandler> onChangeHandler = null;
public enum Layout {
HORIZONTAL, VERTICAL
}
public DateTimePicker( Layout layout ) {
super();
CellPanel p = ( Layout.HORIZONTAL == layout ) ? new HorizontalPanel() : new VerticalPanel();
add( p );
datePicker.getDatePicker().setWidth( "12ex" ); //$NON-NLS-1$
p.add( datePicker.getDatePicker() );
p.setCellVerticalAlignment( datePicker.getDatePicker(), HasVerticalAlignment.ALIGN_MIDDLE );
// timePicker.setWidth( "100%" );
p.add( timePicker );
p.setCellVerticalAlignment( timePicker, HasVerticalAlignment.ALIGN_MIDDLE );
configureOnChangeHandler();
}
public void setOnChangeHandler( ICallback<IChangeHandler> handler ) {
this.onChangeHandler = handler;
}
private void changeHandler() {
if ( null != onChangeHandler ) {
onChangeHandler.onHandle( this );
}
}
private void configureOnChangeHandler() {
final DateTimePicker localThis = this;
ICallback<IChangeHandler> handler = new ICallback<IChangeHandler>() {
public void onHandle( IChangeHandler o ) {
localThis.changeHandler();
}
};
datePicker.setOnChangeHandler( handler );
timePicker.setOnChangeHandler( handler );
}
private boolean enabled = true;
public boolean isEnabled() {
return enabled;
}
public void setEnabled( boolean enabled ) {
this.enabled = enabled;
datePicker.getDatePicker().setEnabled( enabled );
timePicker.setEnabled( enabled );
}
@SuppressWarnings( "deprecation" )
public Date getDate() {
Date date = datePicker.getSelectedDate();
if ( timePicker.getTimeOfDay().equals( TimeOfDay.AM ) ) {
date.setHours( Integer.parseInt( timePicker.getHour() ) );
} else {
date.setHours( Integer.parseInt( timePicker.getHour() ) + 12 );
}
date.setMinutes( Integer.parseInt( timePicker.getMinute() ) );
return date;
}
}