69281efea6ad964bcb3c76383f13ef18ec1e2695
[WebKit-https.git] / Source / WebCore / html / shadow / DateTimeFieldElements.h
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 "DateTimeNumericFieldElement.h"
31 #include "DateTimeSymbolicFieldElement.h"
32
33 namespace WebCore {
34
35 class DateTimeAMPMFieldElement : public DateTimeSymbolicFieldElement {
36     WTF_MAKE_NONCOPYABLE(DateTimeAMPMFieldElement);
37
38 public:
39     static PassRefPtr<DateTimeAMPMFieldElement> create(Document*, FieldOwner&, const Vector<String>&);
40
41 private:
42     DateTimeAMPMFieldElement(Document*, FieldOwner&, const Vector<String>&);
43
44     // DateTimeFieldElement functions.
45     virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
46     virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
47     virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
48 };
49
50 class DateTimeDayFieldElement : public DateTimeNumericFieldElement {
51     WTF_MAKE_NONCOPYABLE(DateTimeDayFieldElement);
52
53 public:
54     static PassRefPtr<DateTimeDayFieldElement> create(Document*, FieldOwner&, const String& placeholder, int minimum, int maximum);
55
56 private:
57     DateTimeDayFieldElement(Document*, FieldOwner&, const String& placeholder, int minimum, int maximum);
58
59     // DateTimeFieldElement functions.
60     virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
61     virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
62     virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
63
64     // DateTimeNumericFieldElement function.
65     virtual int clampValueForHardLimits(int) const OVERRIDE FINAL;
66 };
67
68 // DateTimeHourFieldElement is used for hour field of date time format
69 // supporting following patterns:
70 //  - 0 to 11
71 //  - 1 to 12
72 //  - 0 to 23
73 //  - 1 to 24
74 class DateTimeHourFieldElement : public DateTimeNumericFieldElement {
75     WTF_MAKE_NONCOPYABLE(DateTimeHourFieldElement);
76
77 public:
78     static PassRefPtr<DateTimeHourFieldElement> create(Document*, FieldOwner&, int minimum, int maximum, const DateTimeNumericFieldElement::Parameters&);
79
80 private:
81     DateTimeHourFieldElement(Document*, FieldOwner&, int minimum, int maximum, const DateTimeNumericFieldElement::Parameters&);
82
83     // DateTimeFieldElement functions.
84     virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
85     virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
86     virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
87     virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE FINAL;
88
89     const int m_alignment;
90 };
91
92 class DateTimeMillisecondFieldElement : public DateTimeNumericFieldElement {
93     WTF_MAKE_NONCOPYABLE(DateTimeMillisecondFieldElement);
94
95 public:
96     static PassRefPtr<DateTimeMillisecondFieldElement> create(Document*, FieldOwner&, const DateTimeNumericFieldElement::Parameters&);
97
98 private:
99     DateTimeMillisecondFieldElement(Document*, FieldOwner&, const DateTimeNumericFieldElement::Parameters&);
100
101     // DateTimeFieldElement functions.
102     virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
103     virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
104     virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
105 };
106
107 class DateTimeMinuteFieldElement : public DateTimeNumericFieldElement {
108     WTF_MAKE_NONCOPYABLE(DateTimeMinuteFieldElement);
109
110 public:
111     static PassRefPtr<DateTimeMinuteFieldElement> create(Document*, FieldOwner&, const DateTimeNumericFieldElement::Parameters&);
112
113 private:
114     DateTimeMinuteFieldElement(Document*, FieldOwner&, const DateTimeNumericFieldElement::Parameters&);
115
116     // DateTimeFieldElement functions.
117     virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
118     virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
119     virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
120 };
121
122 class DateTimeMonthFieldElement : public DateTimeNumericFieldElement {
123     WTF_MAKE_NONCOPYABLE(DateTimeMonthFieldElement);
124
125 public:
126     static PassRefPtr<DateTimeMonthFieldElement> create(Document*, FieldOwner&, const String& placeholder, int minimum, int maximum);
127
128 private:
129     DateTimeMonthFieldElement(Document*, FieldOwner&, const String& placeholder, int minimum, int maximum);
130
131     // DateTimeFieldElement functions.
132     virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
133     virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
134     virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
135
136     // DateTimeNumericFieldElement function.
137     virtual int clampValueForHardLimits(int) const OVERRIDE FINAL;
138 };
139
140 class DateTimeSecondFieldElement : public DateTimeNumericFieldElement {
141     WTF_MAKE_NONCOPYABLE(DateTimeSecondFieldElement);
142
143 public:
144     static PassRefPtr<DateTimeSecondFieldElement> create(Document*, FieldOwner&, const DateTimeNumericFieldElement::Parameters&);
145
146 private:
147     DateTimeSecondFieldElement(Document*, FieldOwner&, const DateTimeNumericFieldElement::Parameters&);
148
149     // DateTimeFieldElement functions.
150     virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
151     virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
152     virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
153 };
154
155 class DateTimeSymbolicMonthFieldElement : public DateTimeSymbolicFieldElement {
156     WTF_MAKE_NONCOPYABLE(DateTimeSymbolicMonthFieldElement);
157
158 public:
159     static PassRefPtr<DateTimeSymbolicMonthFieldElement> create(Document*, FieldOwner&, const Vector<String>&, int minimum, int maximum);
160
161 private:
162     DateTimeSymbolicMonthFieldElement(Document*, FieldOwner&, const Vector<String>&, int minimum, int maximum);
163
164     // DateTimeFieldElement functions.
165     virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
166     virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
167     virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
168 };
169
170 class DateTimeWeekFieldElement : public DateTimeNumericFieldElement {
171     WTF_MAKE_NONCOPYABLE(DateTimeWeekFieldElement);
172
173 public:
174     static PassRefPtr<DateTimeWeekFieldElement> create(Document*, FieldOwner&, int minimum, int maximum);
175
176 private:
177     DateTimeWeekFieldElement(Document*, FieldOwner&, int minimum, int maximum);
178
179     // DateTimeFieldElement functions.
180     virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
181     virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
182     virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
183
184     // DateTimeNumericFieldElement function.
185     virtual int clampValueForHardLimits(int) const OVERRIDE FINAL;
186 };
187
188 class DateTimeYearFieldElement : public DateTimeNumericFieldElement {
189     WTF_MAKE_NONCOPYABLE(DateTimeYearFieldElement);
190
191 public:
192     struct Parameters {
193         int minimumYear;
194         int maximumYear;
195         bool minIsSpecified;
196         bool maxIsSpecified;
197         String placeholder;
198
199         Parameters()
200             : minimumYear(-1)
201             , maximumYear(-1)
202             , minIsSpecified(false)
203             , maxIsSpecified(false)
204         {
205         }
206     };
207
208     static PassRefPtr<DateTimeYearFieldElement> create(Document*, FieldOwner&, const Parameters&);
209
210 private:
211     DateTimeYearFieldElement(Document*, FieldOwner&, const Parameters&);
212
213     // DateTimeFieldElement functions.
214     virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
215     virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
216     virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
217
218     // DateTimeNumericFieldElement functions.
219     virtual int clampValueForHardLimits(int) const OVERRIDE FINAL;
220     virtual int defaultValueForStepDown() const OVERRIDE FINAL;
221     virtual int defaultValueForStepUp() const OVERRIDE FINAL;
222
223     bool m_minIsSpecified;
224     bool m_maxIsSpecified;
225 };
226
227 } // namespace WebCore
228
229 #endif
230 #endif