/******************************************************************************* * Copyright (c) 2008, 2010 Innoopract Informationssysteme GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Innoopract Informationssysteme GmbH - initial API and implementation * EclipseSource - ongoing development ******************************************************************************/ package org.eclipse.swt.internal.widgets.datetimekit; import java.io.IOException; import org.eclipse.rwt.lifecycle.*; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.internal.widgets.IDateTimeAdapter; import org.eclipse.swt.internal.widgets.Props; import org.eclipse.swt.widgets.DateTime; final class DateTimeCalendarLCA extends AbstractDateTimeLCADelegate { //Property names for preserveValues static final String PROP_DAY = "day"; static final String PROP_MONTH = "month"; static final String PROP_YEAR = "year"; // Property names for preserveValues void preserveValues( final DateTime dateTime ) { ControlLCAUtil.preserveValues( dateTime ); IWidgetAdapter adapter = WidgetUtil.getAdapter( dateTime ); boolean hasListeners = SelectionEvent.hasListener( dateTime ); adapter.preserve( Props.SELECTION_LISTENERS, Boolean.valueOf( hasListeners ) ); adapter.preserve( PROP_DAY, new Integer( dateTime.getDay() ) ); adapter.preserve( PROP_MONTH, new Integer( dateTime.getMonth() ) ); adapter.preserve( PROP_YEAR, new Integer( dateTime.getYear() ) ); WidgetLCAUtil.preserveCustomVariant( dateTime ); } void readData( final DateTime dateTime ) { String day = WidgetLCAUtil.readPropertyValue( dateTime, PROP_DAY ); String month = WidgetLCAUtil.readPropertyValue( dateTime, PROP_MONTH ); String year = WidgetLCAUtil.readPropertyValue( dateTime, PROP_YEAR ); if( day != null && month != null && year != null ) { dateTime.setDate( Integer.parseInt( year ), Integer.parseInt( month ), Integer.parseInt( day ) ); } ControlLCAUtil.processSelection( dateTime, null, true ); ControlLCAUtil.processMouseEvents( dateTime ); ControlLCAUtil.processKeyEvents( dateTime ); ControlLCAUtil.processMenuDetect( dateTime ); WidgetLCAUtil.processHelp( dateTime ); } void renderInitialization( final DateTime dateTime ) throws IOException { IDateTimeAdapter dateTimeAdapter = DateTimeLCAUtil.getDateTimeAdapter( dateTime ); JSWriter writer = JSWriter.getWriterFor( dateTime ); String style = ""; if( ( dateTime.getStyle() & SWT.SHORT ) != 0 ) { style = "short"; } else if( ( dateTime.getStyle() & SWT.MEDIUM ) != 0 ) { style = "medium"; } else if( ( dateTime.getStyle() & SWT.LONG ) != 0 ) { style = "long"; } DateTimeLCAUtil.initCellSize( dateTime ); Object[] args = new Object[]{ style, dateTimeAdapter.getMonthNames(), dateTimeAdapter.getWeekdayShortNames() }; writer.newWidget( "org.eclipse.swt.widgets.DateTimeCalendar", args ); ControlLCAUtil.writeStyleFlags( dateTime ); } void renderChanges( final DateTime dateTime ) throws IOException { ControlLCAUtil.writeChanges( dateTime ); writeYear( dateTime ); writeMonth( dateTime ); writeDay( dateTime ); DateTimeLCAUtil.writeListener( dateTime ); WidgetLCAUtil.writeCustomVariant( dateTime ); } /////////////////////////////////////// // Helping methods to write properties private void writeDay( final DateTime dateTime ) throws IOException { Integer newValue = new Integer( dateTime.getDay() ); if( WidgetLCAUtil.hasChanged( dateTime, PROP_DAY, newValue ) ) { JSWriter writer = JSWriter.getWriterFor( dateTime ); writer.set( PROP_DAY, newValue ); } } private void writeMonth( final DateTime dateTime ) throws IOException { Integer newValue = new Integer( dateTime.getMonth() ); if( WidgetLCAUtil.hasChanged( dateTime, PROP_MONTH, newValue ) ) { JSWriter writer = JSWriter.getWriterFor( dateTime ); writer.set( PROP_MONTH, newValue ); } } private void writeYear( final DateTime dateTime ) throws IOException { Integer newValue = new Integer( dateTime.getYear() ); if( WidgetLCAUtil.hasChanged( dateTime, PROP_YEAR, newValue ) ) { JSWriter writer = JSWriter.getWriterFor( dateTime ); writer.set( PROP_YEAR, newValue ); } } }