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 DateTimeFieldElement_h 27 #define DateTimeFieldElement_h 28 29 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 30 #include "core/html/HTMLDivElement.h" 31 #include "core/html/HTMLSpanElement.h" 32 33 namespace blink { 34 35 class DateComponents; 36 class DateTimeFieldsState; 37 class Font; 38 39 // DateTimeFieldElement is base class of date time field element. 40 class DateTimeFieldElement : public HTMLSpanElement { 41 WTF_MAKE_NONCOPYABLE(DateTimeFieldElement); 42 43 public: 44 enum EventBehavior { 45 DispatchNoEvent, 46 DispatchEvent, 47 }; 48 49 // FieldOwner implementer must call removeEventHandler when 50 // it doesn't handle event, e.g. at destruction. 51 class FieldOwner : public WillBeGarbageCollectedMixin { 52 public: 53 virtual ~FieldOwner(); 54 virtual void didBlurFromField() = 0; 55 virtual void didFocusOnField() = 0; 56 virtual void fieldValueChanged() = 0; 57 virtual bool focusOnNextField(const DateTimeFieldElement&) = 0; 58 virtual bool focusOnPreviousField(const DateTimeFieldElement&) = 0; 59 virtual bool isFieldOwnerDisabled() const = 0; 60 virtual bool isFieldOwnerReadOnly() const = 0; 61 virtual AtomicString localeIdentifier() const = 0; 62 virtual void fieldDidChangeValueByKeyboard() = 0; 63 }; 64 65 virtual void defaultEventHandler(Event*) OVERRIDE; 66 virtual bool hasValue() const = 0; 67 bool isDisabled() const; 68 virtual float maximumWidth(const Font&); 69 virtual void populateDateTimeFieldsState(DateTimeFieldsState&) = 0; removeEventHandler()70 void removeEventHandler() { m_fieldOwner = nullptr; } 71 void setDisabled(); 72 virtual void setEmptyValue(EventBehavior = DispatchNoEvent) = 0; 73 virtual void setValueAsDate(const DateComponents&) = 0; 74 virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) = 0; 75 virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) = 0; 76 virtual void stepDown() = 0; 77 virtual void stepUp() = 0; 78 virtual String value() const = 0; 79 virtual String visibleValue() const = 0; 80 virtual void trace(Visitor*) OVERRIDE; 81 82 protected: 83 DateTimeFieldElement(Document&, FieldOwner&); 84 void focusOnNextField(); 85 virtual void handleKeyboardEvent(KeyboardEvent*) = 0; 86 void initialize(const AtomicString& pseudo, const String& axHelpText, int axMinimum, int axMaximum); 87 Locale& localeForOwner() const; 88 AtomicString localeIdentifier() const; 89 void updateVisibleValue(EventBehavior); 90 virtual int valueAsInteger() const = 0; 91 virtual int valueForARIAValueNow() const; 92 93 // Node functions. 94 virtual void setFocus(bool) OVERRIDE; 95 96 private: 97 void defaultKeyboardEventHandler(KeyboardEvent*); 98 virtual bool isDateTimeFieldElement() const OVERRIDE FINAL; 99 bool isFieldOwnerDisabled() const; 100 bool isFieldOwnerReadOnly() const; 101 virtual bool supportsFocus() const OVERRIDE FINAL; 102 103 RawPtrWillBeMember<FieldOwner> m_fieldOwner; 104 }; 105 106 } // namespace blink 107 108 #endif 109 #endif 110