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 DateTimeFieldElements_h
27#define DateTimeFieldElements_h
28
29#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
30#include "core/html/shadow/DateTimeNumericFieldElement.h"
31#include "core/html/shadow/DateTimeSymbolicFieldElement.h"
32
33namespace blink {
34
35class DateTimeAMPMFieldElement FINAL : public DateTimeSymbolicFieldElement {
36    WTF_MAKE_NONCOPYABLE(DateTimeAMPMFieldElement);
37
38public:
39    static PassRefPtrWillBeRawPtr<DateTimeAMPMFieldElement> create(Document&, FieldOwner&, const Vector<String>&);
40
41private:
42    DateTimeAMPMFieldElement(Document&, FieldOwner&, const Vector<String>&);
43
44    // DateTimeFieldElement functions.
45    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
46    virtual void setValueAsDate(const DateComponents&) OVERRIDE;
47    virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
48};
49
50class DateTimeDayFieldElement FINAL : public DateTimeNumericFieldElement {
51    WTF_MAKE_NONCOPYABLE(DateTimeDayFieldElement);
52
53public:
54    static PassRefPtrWillBeRawPtr<DateTimeDayFieldElement> create(Document&, FieldOwner&, const String& placeholder, const Range&);
55
56private:
57    DateTimeDayFieldElement(Document&, FieldOwner&, const String& placeholder, const Range&);
58
59    // DateTimeFieldElement functions.
60    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
61    virtual void setValueAsDate(const DateComponents&) OVERRIDE;
62    virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
63};
64
65class DateTimeHourFieldElementBase : public DateTimeNumericFieldElement {
66    WTF_MAKE_NONCOPYABLE(DateTimeHourFieldElementBase);
67
68protected:
69    DateTimeHourFieldElementBase(Document&, FieldOwner&, const Range&, const Range& hardLimits, const Step&);
70    void initialize();
71
72private:
73    // DateTimeFieldElement functions.
74    virtual void setValueAsDate(const DateComponents&) OVERRIDE;
75    virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
76};
77
78class DateTimeHour11FieldElement FINAL : public DateTimeHourFieldElementBase {
79    WTF_MAKE_NONCOPYABLE(DateTimeHour11FieldElement);
80
81public:
82    static PassRefPtrWillBeRawPtr<DateTimeHour11FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
83
84private:
85    DateTimeHour11FieldElement(Document&, FieldOwner&, const Range& hour23Range, const Step&);
86
87    // DateTimeFieldElement functions.
88    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
89    virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE;
90};
91
92class DateTimeHour12FieldElement FINAL : public DateTimeHourFieldElementBase {
93    WTF_MAKE_NONCOPYABLE(DateTimeHour12FieldElement);
94
95public:
96    static PassRefPtrWillBeRawPtr<DateTimeHour12FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
97
98private:
99    DateTimeHour12FieldElement(Document&, FieldOwner&, const Range& hour23Range, const Step&);
100
101    // DateTimeFieldElement functions.
102    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
103    virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE;
104};
105
106class DateTimeHour23FieldElement FINAL : public DateTimeHourFieldElementBase {
107    WTF_MAKE_NONCOPYABLE(DateTimeHour23FieldElement);
108
109public:
110    static PassRefPtrWillBeRawPtr<DateTimeHour23FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
111
112private:
113    DateTimeHour23FieldElement(Document&, FieldOwner&, const Range& hour23Range, const Step&);
114
115    // DateTimeFieldElement functions.
116    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
117    virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE;
118};
119
120class DateTimeHour24FieldElement FINAL : public DateTimeHourFieldElementBase {
121    WTF_MAKE_NONCOPYABLE(DateTimeHour24FieldElement);
122
123public:
124    static PassRefPtrWillBeRawPtr<DateTimeHour24FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
125
126private:
127    DateTimeHour24FieldElement(Document&, FieldOwner&, const Range& hour23Range, const Step&);
128
129    // DateTimeFieldElement functions.
130    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
131    virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE;
132};
133
134class DateTimeMillisecondFieldElement FINAL : public DateTimeNumericFieldElement {
135    WTF_MAKE_NONCOPYABLE(DateTimeMillisecondFieldElement);
136
137public:
138    static PassRefPtrWillBeRawPtr<DateTimeMillisecondFieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
139
140private:
141    DateTimeMillisecondFieldElement(Document&, FieldOwner&, const Range&, const Step&);
142
143    // DateTimeFieldElement functions.
144    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
145    virtual void setValueAsDate(const DateComponents&) OVERRIDE;
146    virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
147};
148
149class DateTimeMinuteFieldElement FINAL : public DateTimeNumericFieldElement {
150    WTF_MAKE_NONCOPYABLE(DateTimeMinuteFieldElement);
151
152public:
153    static PassRefPtrWillBeRawPtr<DateTimeMinuteFieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
154
155private:
156    DateTimeMinuteFieldElement(Document&, FieldOwner&, const Range&, const Step&);
157
158    // DateTimeFieldElement functions.
159    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
160    virtual void setValueAsDate(const DateComponents&) OVERRIDE;
161    virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
162};
163
164class DateTimeMonthFieldElement FINAL : public DateTimeNumericFieldElement {
165    WTF_MAKE_NONCOPYABLE(DateTimeMonthFieldElement);
166
167public:
168    static PassRefPtrWillBeRawPtr<DateTimeMonthFieldElement> create(Document&, FieldOwner&, const String& placeholder, const Range&);
169
170private:
171    DateTimeMonthFieldElement(Document&, FieldOwner&, const String& placeholder, const Range&);
172
173    // DateTimeFieldElement functions.
174    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
175    virtual void setValueAsDate(const DateComponents&) OVERRIDE;
176    virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
177};
178
179class DateTimeSecondFieldElement FINAL : public DateTimeNumericFieldElement {
180    WTF_MAKE_NONCOPYABLE(DateTimeSecondFieldElement);
181
182public:
183    static PassRefPtrWillBeRawPtr<DateTimeSecondFieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
184
185private:
186    DateTimeSecondFieldElement(Document&, FieldOwner&, const Range&, const Step&);
187
188    // DateTimeFieldElement functions.
189    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
190    virtual void setValueAsDate(const DateComponents&) OVERRIDE;
191    virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
192};
193
194class DateTimeSymbolicMonthFieldElement FINAL : public DateTimeSymbolicFieldElement {
195    WTF_MAKE_NONCOPYABLE(DateTimeSymbolicMonthFieldElement);
196
197public:
198    static PassRefPtrWillBeRawPtr<DateTimeSymbolicMonthFieldElement> create(Document&, FieldOwner&, const Vector<String>&, int minimum, int maximum);
199
200private:
201    DateTimeSymbolicMonthFieldElement(Document&, FieldOwner&, const Vector<String>&, int minimum, int maximum);
202
203    // DateTimeFieldElement functions.
204    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
205    virtual void setValueAsDate(const DateComponents&) OVERRIDE;
206    virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
207};
208
209class DateTimeWeekFieldElement FINAL : public DateTimeNumericFieldElement {
210    WTF_MAKE_NONCOPYABLE(DateTimeWeekFieldElement);
211
212public:
213    static PassRefPtrWillBeRawPtr<DateTimeWeekFieldElement> create(Document&, FieldOwner&, const Range&);
214
215private:
216    DateTimeWeekFieldElement(Document&, FieldOwner&, const Range&);
217
218    // DateTimeFieldElement functions.
219    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
220    virtual void setValueAsDate(const DateComponents&) OVERRIDE;
221    virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
222};
223
224class DateTimeYearFieldElement FINAL : public DateTimeNumericFieldElement {
225    WTF_MAKE_NONCOPYABLE(DateTimeYearFieldElement);
226
227public:
228    struct Parameters {
229        int minimumYear;
230        int maximumYear;
231        bool minIsSpecified;
232        bool maxIsSpecified;
233        String placeholder;
234
235        Parameters()
236            : minimumYear(-1)
237            , maximumYear(-1)
238            , minIsSpecified(false)
239            , maxIsSpecified(false)
240        {
241        }
242    };
243
244    static PassRefPtrWillBeRawPtr<DateTimeYearFieldElement> create(Document&, FieldOwner&, const Parameters&);
245
246private:
247    DateTimeYearFieldElement(Document&, FieldOwner&, const Parameters&);
248
249    // DateTimeFieldElement functions.
250    virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
251    virtual void setValueAsDate(const DateComponents&) OVERRIDE;
252    virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
253
254    // DateTimeNumericFieldElement functions.
255    virtual int defaultValueForStepDown() const OVERRIDE;
256    virtual int defaultValueForStepUp() const OVERRIDE;
257
258    bool m_minIsSpecified;
259    bool m_maxIsSpecified;
260};
261
262} // namespace blink
263
264#endif
265#endif
266