1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is free software; you can redistribute it and/or
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modify it under the terms of the GNU Library General Public
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * License as published by the Free Software Foundation; either
7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * version 2 of the License, or (at your option) any later version.
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is distributed in the hope that it will be useful,
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Library General Public License for more details.
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * You should have received a copy of the GNU Library General Public License
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Boston, MA 02110-1301, USA.
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef WMLInputElement_h
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#define WMLInputElement_h
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WML)
25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLFormControlElement.h"
26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "InputElement.h"
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore {
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass FormDataList;
31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianclass WMLInputElement : public WMLFormControlElement, public InputElement {
33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectpublic:
345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    static PassRefPtr<WMLInputElement> create(const QualifiedName&, Document*);
355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    WMLInputElement(const QualifiedName& tagName, Document*);
37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual ~WMLInputElement();
38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
392bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual InputElement* toInputElement() { return this; }
402bde8e466a4451c7319e3a072d118917957d6554Steve Block
41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool isKeyboardFocusable(KeyboardEvent*) const;
42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool isMouseFocusable() const;
43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void dispatchFocusEvent();
44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void dispatchBlurEvent();
45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void updateFocusAppearance(bool restorePreviousSelection);
46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void aboutToUnload();
47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool shouldUseInputMethod() const { return !m_isPasswordField; }
49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool isChecked() const { return false; }
508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    virtual bool isAutofilled() const { return false; }
51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool isIndeterminate() const { return false; }
525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual bool isTextFormControl() const { return true; }
53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool isRadioButton() const { return false; }
54f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual bool isCheckbox() const { return false; }
55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool isTextField() const { return true; }
56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool isSearchField() const { return false; }
57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool isInputTypeHidden() const { return false; }
58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool isPasswordField() const { return m_isPasswordField; }
59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool searchEventsShouldBeDispatched() const { return false; }
60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual int size() const;
625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual const AtomicString& formControlType() const;
635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual const AtomicString& formControlName() const;
648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    virtual const String& suggestedValue() const;
65635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual String value() const;
66d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual void setValue(const String&, bool sendChangeEvent = false);
67d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual void setValueForUser(const String&);
682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual String visibleValue() const { return value(); }
6981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual String convertFromVisibleValue(const String& value) const { return value; }
70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void setValueFromRenderer(const String&);
71635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual bool wasChangedSinceLastFormControlChangeEvent() const;
7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void setChangedSinceLastFormControlChangeEvent(bool);
7481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
755f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual bool saveFormControlState(String& value) const;
765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual void restoreFormControlState(const String&);
77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void select();
79635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void accessKeyAction(bool sendToAnyElement);
80e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    virtual void parseMappedAttribute(Attribute*);
81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void copyNonAttributeProperties(const Element* source);
83635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void detach();
86635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual bool appendFormData(FormDataList&, bool);
87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void reset();
88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void defaultEventHandler(Event*);
90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void cacheSelection(int start, int end);
91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
925abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    virtual bool isAcceptableValue(const String&) const { return true; }
93231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual String sanitizeValue(const String& proposedValue) const { return constrainValue(proposedValue); }
94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void documentDidBecomeActive();
96635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void willMoveToNewOwnerDocument();
98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    virtual void didMoveToNewOwnerDocument();
99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    bool isConformedToInputMask(const String&);
1018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    bool isConformedToInputMask(UChar, unsigned, bool isUserInput = true);
10221939df44de1705786c545cd1bf519d47250322dBen Murdoch#if ENABLE(WCSS)
10321939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual InputElementData data() const { return m_data; }
10421939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
1058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectprivate:
1075f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    friend class WMLCardElement;
1085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void initialize();
1095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1100617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen    virtual bool supportsMaxLength() const { return true; }
1118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    String validateInputMask(const String&);
1128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    unsigned cursorPositionToMaskIndex(unsigned);
113231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    String constrainValue(const String&) const;
1148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    InputElementData m_data;
116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    bool m_isPasswordField;
1178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    bool m_isEmptyOk;
11881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    bool m_wasChangedSinceLastChangeEvent;
1198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    String m_formatMask;
1208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    unsigned m_numOfCharsAllowedByMask;
121635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project};
122635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
123635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
124635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
125635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
127