WebCore:
[WebKit-https.git] / WebCore / html / HTMLInputElement.h
1 /*
2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2000 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  *
22  */
23
24 #ifndef HTMLInputElement_h
25 #define HTMLInputElement_h
26
27 #include "HTMLGenericFormElement.h"
28 #include <wtf/OwnPtr.h>
29
30 namespace WebCore {
31
32 class HTMLImageLoader;
33 class Selection;
34
35 class HTMLInputElement : public HTMLFormControlElementWithState {
36 public:
37     enum InputType {
38         TEXT,
39         PASSWORD,
40         ISINDEX,
41         CHECKBOX,
42         RADIO,
43         SUBMIT,
44         RESET,
45         FILE,
46         HIDDEN,
47         IMAGE,
48         BUTTON,
49         SEARCH,
50         RANGE
51     };
52
53     HTMLInputElement(Document*, HTMLFormElement* = 0);
54     HTMLInputElement(const QualifiedName& tagName, Document*, HTMLFormElement* = 0);
55     virtual ~HTMLInputElement();
56
57     virtual HTMLTagStatus endTagRequirement() const { return TagStatusForbidden; }
58     virtual int tagPriority() const { return 0; }
59
60     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
61     virtual bool isMouseFocusable() const;
62     virtual bool isEnumeratable() const { return inputType() != IMAGE; }
63     virtual void dispatchFocusEvent();
64     virtual void dispatchBlurEvent();
65     virtual void updateFocusAppearance(bool restorePreviousSelection);
66     virtual void aboutToUnload();
67     virtual bool shouldUseInputMethod() const;
68
69     virtual const AtomicString& name() const;
70
71     bool autoComplete() const { return m_autocomplete; }
72
73     virtual bool isChecked() const { return checked(); }
74     virtual bool isIndeterminate() const { return indeterminate(); }
75     
76     bool readOnly() const { return isReadOnlyControl(); }
77
78     bool isTextButton() const { return m_type == SUBMIT || m_type == RESET || m_type == BUTTON; }
79     virtual bool isRadioButton() const { return m_type == RADIO; }
80     bool isTextField() const { return m_type == TEXT || m_type == PASSWORD || m_type == SEARCH || m_type == ISINDEX; }
81     bool isSearchField() const { return m_type == SEARCH; }
82
83     bool checked() const { return m_checked; }
84     void setChecked(bool, bool sendChangeEvent = false);
85     bool indeterminate() const { return m_indeterminate; }
86     void setIndeterminate(bool);
87     int maxLength() const { return m_maxLen; }
88     int size() const { return m_size; }
89     virtual const AtomicString& type() const;
90     void setType(const String&);
91
92     String value() const;
93     void setValue(const String&);
94
95     String valueWithDefault() const;
96
97     void setValueFromRenderer(const String&);
98
99     virtual bool saveState(String& value) const;
100     virtual void restoreState(const String&);
101
102     virtual bool canStartSelection() const;
103     
104     bool canHaveSelection() const;
105     int selectionStart() const;
106     int selectionEnd() const;
107     void setSelectionStart(int);
108     void setSelectionEnd(int);
109     void select();
110     void setSelectionRange(int start, int end);
111
112     virtual void accessKeyAction(bool sendToAnyElement);
113
114     virtual bool mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const;
115     virtual void parseMappedAttribute(MappedAttribute*);
116
117     virtual void copyNonAttributeProperties(const Element* source);
118
119     virtual void attach();
120     virtual bool rendererIsNeeded(RenderStyle*);
121     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
122     virtual void detach();
123     virtual bool appendFormData(FormDataList&, bool);
124
125     virtual bool isSuccessfulSubmitButton() const;
126     virtual bool isActivatedSubmit() const;
127     virtual void setActivatedSubmit(bool flag);
128
129     InputType inputType() const { return static_cast<InputType>(m_type); }
130     void setInputType(const String&);
131     
132     // Report if this input type uses height & width attributes
133     bool respectHeightAndWidthAttrs() const { return inputType() == IMAGE || inputType() == HIDDEN; }
134
135     virtual void reset();
136
137     virtual void* preDispatchEventHandler(Event*);
138     virtual void postDispatchEventHandler(Event*, void* dataFromPreDispatch);
139     virtual void defaultEventHandler(Event*);
140
141     String altText() const;
142     
143     virtual bool isURLAttribute(Attribute*) const;
144
145     int maxResults() const { return m_maxResults; }
146
147     String defaultValue() const;
148     void setDefaultValue(const String&);
149     
150     bool defaultChecked() const;
151     void setDefaultChecked(bool);
152
153     String accept() const;
154     void setAccept(const String&);
155
156     String accessKey() const;
157     void setAccessKey(const String&);
158
159     String align() const;
160     void setAlign(const String&);
161
162     String alt() const;
163     void setAlt(const String&);
164
165     void setSize(unsigned);
166
167     String src() const;
168     void setSrc(const String&);
169
170     void setMaxLength(int);
171
172     String useMap() const;
173     void setUseMap(const String&);
174
175     bool autofilled() const { return m_autofilled; }
176     void setAutofilled(bool b = true) { m_autofilled = b; }
177     
178     void cacheSelection(int s, int e) { cachedSelStart = s; cachedSelEnd = e; };
179     void addSearchResult();
180     void onSearch();
181     
182     Selection selection() const;
183
184     String constrainValue(const String& proposedValue) const;
185
186     virtual void didRestoreFromCache();
187     
188 protected:
189     virtual void willMoveToNewOwnerDocument();
190     virtual void didMoveToNewOwnerDocument();
191     
192     AtomicString m_name;
193
194 private:
195     void init();
196     bool storesValueSeparateFromAttribute() const;
197     String constrainValue(const String& proposedValue, int maxLen) const;
198     void recheckValue();
199
200     String m_value;
201     String m_originalValue;
202     int xPos;
203     int m_maxLen;
204     short m_size;
205     short yPos;
206
207     short m_maxResults;
208
209     OwnPtr<HTMLImageLoader> m_imageLoader;
210
211     unsigned m_type : 4; // InputType 
212     bool m_checked : 1;
213     bool m_defaultChecked : 1;
214     bool m_useDefaultChecked : 1;
215     bool m_indeterminate : 1;
216     bool m_haveType : 1;
217     bool m_activeSubmit : 1;
218     bool m_autocomplete : 1;
219     bool m_autofilled : 1;
220     bool m_inited : 1;
221     
222     int cachedSelStart;
223     int cachedSelEnd;
224 };
225
226 } //namespace
227
228 #endif