javauis/lcdui_qt/src/javax/microedition/lcdui/DateField.java
changeset 21 2a9601315dfc
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/DateField.java	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,221 @@
+/*
+* Copyright (c) 2009 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.*;
+
+import org.eclipse.swt.graphics.Point;
+
+/**
+ * Implementation of LCDUI <code>DateField</code> class.
+ */
+public class DateField extends Item {
+
+    /**
+     * Input mode that displays only date.
+     */
+    public static final int DATE = 1;
+
+    /**
+     * Input mode which displays only time.
+     */
+    public static final int TIME = 2;
+
+    /**
+     * Input mode which display both date and time.
+     */
+    public static final int DATE_TIME = 3;
+
+    private Date date;
+
+    private int mode;
+
+    private TimeZone timeZone;
+
+    /**
+     * Constructor.
+     *
+     * @param label Label of DateField.
+     * @param mode DateField's input mode.
+     * @throws IllegalArgumentException if input mode is not one of the
+     *      constants defined in this class.
+     */
+    public DateField(String label, int mode) {
+        this(label, mode, null);
+    }
+
+    /**
+     * Constructor with time zone.
+     *
+     * @param label Label of DateField.
+     * @param mode DateField's input mode.
+     * @param timeZone Timezone of DateField or null if default timezone.
+     * @throws IllegalArgumentException if input mode is not one of the
+     *             constants defined in this class.
+     */
+    public DateField(String label, int mode, TimeZone timeZone) {
+        setLabel(label);
+        setInputMode(mode);
+        this.timeZone = timeZone;
+    }
+
+    /**
+     * Gets the date set to this DateField.
+     *
+     * @return Date, or null if date not set.
+     */
+    public Date getDate() {
+    	 if (date == null) {
+    		 return null;
+    	 }
+    	 Calendar calendar = Calendar.getInstance();
+    	 calendar.setTime(date);
+    	 if (mode == TIME) {
+    	    calendar.set(Calendar.YEAR,Config.DATEFIELD_ZERO_EPOCH_YEAR);
+			    calendar.set(Calendar.MONTH,Calendar.JANUARY);
+			    calendar.set(Calendar.DAY_OF_MONTH,1);
+        }
+        else if (mode == DATE) {
+        	 calendar.set(Calendar.HOUR_OF_DAY,0);
+			     calendar.set(Calendar.MINUTE,0);
+			     calendar.set(Calendar.SECOND,0);
+			  }
+        return calendar.getTime();//date;
+    }
+
+    /**
+     * Sets the date to this DateField.
+     *
+     * @param newDate New date. If null, current date is cleared.
+     */
+    public void setDate(Date newDate) {
+        internalSetDate(newDate);
+        updateParent(UPDATE_CONTENT);
+    }
+
+    /**
+     * Gets input mode of this DateField.
+     *
+     * @return Input mode.
+     */
+    public int getInputMode() {
+        return mode;
+    }
+
+    /**
+     * Sets input mode of this DateField.
+     *
+     * @param inputMode New input mode. Must be one of constants
+     *      defined in this class.
+     * @throws IllegalArgumentException if input mode is not one of the
+     *      constants defined in this class.
+     */
+    public void setInputMode(int inputMode) {
+        if ((inputMode != DATE)
+                && (inputMode != TIME)
+                && (inputMode != DATE_TIME)) {
+            throw new IllegalArgumentException(
+                    MsgRepository.DATEFIELD_EXCEPTION_INVALID_MODE);
+        }
+        mode = inputMode;
+        updateParent(UPDATE_SIZE_CHANGED);
+    }
+
+    /**
+     * Calculates minimum size of this item.
+     *
+     * @return Minimum size.
+     */
+    Point calculateMinimumSize() {
+        return DateFieldLayouter.calculateMinimumBounds(this);
+    }
+
+    /**
+     * Calculates preferred size of this item.
+     *
+     * @return Preferred size.
+     */
+    Point calculatePreferredSize() {
+        return DateFieldLayouter.calculatePreferredBounds(this);
+    }
+
+    /**
+     * Gets timezone.
+     *
+     * @return Timezone or null if no timezone set.
+     */
+    TimeZone getTimeZone() {
+        return timeZone;
+    }
+
+    /**
+     * Set the new date internally.
+     *
+     * @param newDate new date
+     */
+    void internalSetDate(Date newDate) {
+        if (newDate == null) {
+            date = null;
+        }
+        else {
+            Calendar calendar = Calendar.getInstance();
+            if (timeZone != null) {
+                calendar.setTimeZone(timeZone);
+            }
+            calendar.setTime(newDate);
+
+            switch (mode) {
+                case TIME:
+                    if ((calendar.get(Calendar.YEAR) != Config.DATEFIELD_ZERO_EPOCH_YEAR)
+                            || (calendar.get(Calendar.MONTH) != Calendar.JANUARY)
+                            || (calendar.get(Calendar.DAY_OF_MONTH) != 1)) {
+                        date = null;
+                    }
+                    else {
+                        date = calendar.getTime();
+                    }
+                    break;
+                case DATE:
+                    calendar.set(Calendar.HOUR_OF_DAY, 0);
+                    calendar.set(Calendar.MINUTE, 0);
+                    date = calendar.getTime();
+                    break;
+                case DATE_TIME:
+                    date = calendar.getTime();
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+
+    /**
+     * Return layout with optional custom flags.
+     *
+     * @return layout directive.
+     */
+    int internalGetLayout() {
+        return super.internalGetLayout() | Item.LAYOUT_NEWLINE_BEFORE;
+    }
+
+    /* (non-Javadoc)
+     * @see javax.microedition.lcdui.Item#isFocusable()
+     */
+    boolean isFocusable() {
+        return true;
+    }
+}