Home | History | Annotate | Download | only in forms
      1 /*
      2  * Copyright (C) 2012 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1.  Redistributions of source code must retain the above copyright
      8  *     notice, this list of conditions and the following disclaimer.
      9  * 2.  Redistributions in binary form must reproduce the above copyright
     10  *     notice, this list of conditions and the following disclaimer in the
     11  *     documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
     14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     16  * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
     17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     19  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     20  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     23  * SUCH DAMAGE.
     24  */
     25 
     26 #ifndef DateTimeFieldsState_h
     27 #define DateTimeFieldsState_h
     28 
     29 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
     30 
     31 namespace blink {
     32 
     33 class FormControlState;
     34 
     35 // DateTimeFieldsState represents fields in date/time for form state
     36 // save/restore for input type "date", "datetime", "datetime-local", "month",
     37 // "time", and "week" with multiple fields input UI.
     38 //
     39 // Each field can contain invalid value for date, e.g. day of month field can
     40 // be 30 even if month field is February.
     41 class DateTimeFieldsState {
     42 public:
     43     enum AMPMValue {
     44         AMPMValueEmpty = -1,
     45         AMPMValueAM,
     46         AMPMValuePM,
     47     };
     48 
     49     static const unsigned emptyValue;
     50 
     51     DateTimeFieldsState();
     52 
     53     static DateTimeFieldsState restoreFormControlState(const FormControlState&);
     54     FormControlState saveFormControlState() const;
     55 
     56     AMPMValue ampm() const { return m_ampm; }
     57     unsigned dayOfMonth() const { return m_dayOfMonth; }
     58     unsigned hour() const { return m_hour; }
     59     unsigned hour23() const;
     60     unsigned millisecond() const { return m_millisecond; }
     61     unsigned minute() const { return m_minute; }
     62     unsigned month() const { return m_month; }
     63     unsigned second() const { return m_second; }
     64     unsigned weekOfYear() const { return m_weekOfYear; }
     65     unsigned year() const { return m_year; }
     66 
     67     bool hasAMPM() const { return m_ampm != AMPMValueEmpty; }
     68     bool hasDayOfMonth() const { return m_dayOfMonth != emptyValue; }
     69     bool hasHour() const { return m_hour != emptyValue; }
     70     bool hasMillisecond() const { return m_millisecond != emptyValue; }
     71     bool hasMinute() const { return m_minute != emptyValue; }
     72     bool hasMonth() const { return m_month != emptyValue; }
     73     bool hasSecond() const { return m_second != emptyValue; }
     74     bool hasWeekOfYear() const { return m_weekOfYear != emptyValue; }
     75     bool hasYear() const { return m_year != emptyValue; }
     76 
     77     void setAMPM(AMPMValue ampm) { m_ampm = ampm; }
     78     void setDayOfMonth(unsigned dayOfMonth) { m_dayOfMonth = dayOfMonth; }
     79     void setHour(unsigned hour12) { m_hour = hour12; }
     80     void setMillisecond(unsigned millisecond) { m_millisecond = millisecond; }
     81     void setMinute(unsigned minute) { m_minute = minute; }
     82     void setMonth(unsigned month) { m_month = month; }
     83     void setSecond(unsigned second) { m_second = second; }
     84     void setWeekOfYear(unsigned weekOfYear) { m_weekOfYear = weekOfYear; }
     85     void setYear(unsigned year) { m_year = year; }
     86 
     87 private:
     88     unsigned m_year;
     89     unsigned m_month; // 1 to 12.
     90     unsigned m_dayOfMonth;
     91     unsigned m_hour; // 1 to 12.
     92     unsigned m_minute;
     93     unsigned m_second;
     94     unsigned m_millisecond;
     95     unsigned m_weekOfYear;
     96     AMPMValue m_ampm;
     97 };
     98 
     99 } // namespace blink
    100 
    101 #endif
    102 #endif
    103