javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/DateField.java
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/DateField.java	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 1999 - 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+package javax.microedition.lcdui;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+import java.util.Vector;
+
+import com.nokia.mj.impl.rt.legacy.NativeError;
+
+public class DateField extends Item
+{
+    public static final int DATE = 1;
+    public static final int TIME = 2;
+    public static final int DATE_TIME = 3;
+    //
+    private static final long NULL_DATE = -62168256000000L;
+    private static final int JAVA_EPOCH_YEAR = 1970;
+    //
+    private Calendar iCalendar;
+    private Calendar iDefaultCal;
+    private Date iDateWrapper;
+    private int iMode;
+    private boolean iInitialized;
+
+    public DateField(String aLabel,int aMode)
+    {
+        this(aLabel,aMode,null);
+    }
+
+    public DateField(String aLabel,int aMode,TimeZone aTimeZone)
+    {
+        if (aMode < DATE || aMode > DATE_TIME)
+            throw new IllegalArgumentException();
+        //
+        iMode = aMode;
+        iLabel = aLabel;
+        if (aTimeZone == null)
+            aTimeZone = TimeZone.getDefault();
+        iCalendar = Calendar.getInstance(aTimeZone);
+        iDefaultCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
+        iDateWrapper = new Date();
+        synchronized (iToolkit)
+        {
+            iHandle = Toolkit.checkHandle(_create(iToolkit.getHandle(),this,aLabel == null?"":aLabel,aMode));
+        }
+    }
+
+    public Date getDate()
+    {
+        synchronized (iToolkit)
+        {
+            if (!iInitialized)
+            {
+                return null;
+            }
+
+            final long currentDate = _getDate(iToolkit.getHandle(), getHandle());
+            iDateWrapper.setTime(currentDate);
+            iDefaultCal.setTime(iDateWrapper);
+
+            int year = iDefaultCal.get(Calendar.YEAR);
+            int month = iDefaultCal.get(Calendar.MONTH);
+            int day = iDefaultCal.get(Calendar.DAY_OF_MONTH);
+            int hour = iDefaultCal.get(Calendar.HOUR_OF_DAY);
+            int minute = iDefaultCal.get(Calendar.MINUTE);
+
+            switch (iMode)
+            {
+            case DATE:
+            {
+                hour = 0;
+                minute = 0;
+                break;
+            }
+            case TIME:
+            {
+                year = JAVA_EPOCH_YEAR;
+                month = Calendar.JANUARY;
+                day = 1;
+                break;
+            }
+            default:
+                // Do nothing. This applies to DATE_TIME
+            }
+
+            //convert to local time
+            iCalendar.set(Calendar.YEAR,year);
+            iCalendar.set(Calendar.MONTH,month);
+            iCalendar.set(Calendar.DAY_OF_MONTH,day);
+            iCalendar.set(Calendar.HOUR_OF_DAY,hour);
+            iCalendar.set(Calendar.MINUTE,minute);
+            iCalendar.set(Calendar.SECOND,0);
+            iCalendar.set(Calendar.MILLISECOND,0);
+            return iCalendar.getTime();
+        }
+    }
+
+    public void setDate(Date aDate)
+    {
+        synchronized (iToolkit)
+        {
+            long date = NULL_DATE;
+            if (aDate != null)
+            {
+                iCalendar.setTime(aDate);
+
+                if (iMode != TIME)
+                {
+                    // convert to local date\time
+                    iDefaultCal.set(Calendar.YEAR, iCalendar.get(Calendar.YEAR));
+                    iDefaultCal.set(Calendar.MONTH, iCalendar.get(Calendar.MONTH));
+                    iDefaultCal.set(Calendar.DAY_OF_MONTH, iCalendar.get(Calendar.DAY_OF_MONTH));
+                    iDefaultCal.set(Calendar.HOUR, iCalendar.get(Calendar.HOUR));
+                    iDefaultCal.set(Calendar.MINUTE, iCalendar.get(Calendar.MINUTE));
+                    iDefaultCal.set(Calendar.AM_PM, iCalendar.get(Calendar.AM_PM));
+                    date = iDefaultCal.getTime().getTime();
+                }
+                else
+                {
+                    iDefaultCal.setTime(aDate);
+                    final int year  = iDefaultCal.get(Calendar.YEAR);
+                    final int month = iDefaultCal.get(Calendar.MONTH);
+                    final int day   = iDefaultCal.get(Calendar.DAY_OF_MONTH);
+
+                    // Date components must be set to the "zero epoch" value of January 1, 1970.
+                    // Otherwise must be in the "not initialized" state.
+                    if (iMode == TIME && year == JAVA_EPOCH_YEAR && month == Calendar.JANUARY && day == 1)
+                    {
+                        // convert to local time
+                        iDefaultCal.set(Calendar.HOUR,iCalendar.get(Calendar.HOUR));
+                        iDefaultCal.set(Calendar.MINUTE,iCalendar.get(Calendar.MINUTE));
+                        iDefaultCal.set(Calendar.AM_PM,iCalendar.get(Calendar.AM_PM));
+                        date = iDefaultCal.getTime().getTime();
+                    }
+                }
+            }
+
+            iInitialized = (date != NULL_DATE);
+            if (iInitialized)
+            {
+                _setDate(iToolkit.getHandle(),getHandle(),date);
+            }
+            else
+            {
+                _setUninitialized(iToolkit.getHandle(),getHandle());
+            }
+            RefreshForm();
+        }
+    }
+
+    public int getInputMode()
+    {
+        return iMode;
+    }
+
+    public void setInputMode(int aMode)
+    {
+        if (aMode < DATE || aMode > DATE_TIME)
+        {
+            throw new IllegalArgumentException();
+        }
+        synchronized (iToolkit)
+        {
+            if (iMode == aMode)
+            {
+                return;
+            }
+
+            NativeError.check(_setInputMode(iToolkit.getHandle(), getHandle(), aMode));
+            iMode = aMode;
+
+            // notify form that peer handle has changed.
+            UpdateForm();
+        }
+    }
+
+    final void setDateInitialized(boolean aBoolean)
+    {
+        iInitialized = aBoolean;
+    }
+
+    private native int _create(int aToolkit,DateField aDateField,String aLabel,int aFieldType);
+    private native void _setDate(int aToolkit, int aItem, long aDate);
+    private native int  _setInputMode(int aToolkit, int aItem, int aMode);
+    private native long _getDate(int aToolkit, int aItem);
+    private native void _setUninitialized(int aToolkit,int aItem);
+}