15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef DateTimeFieldElement_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define DateTimeFieldElement_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLDivElement.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLSpanElement.h" 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DateComponents; 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DateTimeFieldsState; 37926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class Font; 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// DateTimeFieldElement is base class of date time field element. 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class DateTimeFieldElement : public HTMLSpanElement { 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(DateTimeFieldElement); 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum EventBehavior { 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DispatchNoEvent, 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DispatchEvent, 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FieldOwner implementer must call removeEventHandler when 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // it doesn't handle event, e.g. at destruction. 51323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) class FieldOwner : public WillBeGarbageCollectedMixin { 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public: 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~FieldOwner(); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void didBlurFromField() = 0; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void didFocusOnField() = 0; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void fieldValueChanged() = 0; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool focusOnNextField(const DateTimeFieldElement&) = 0; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool focusOnPreviousField(const DateTimeFieldElement&) = 0; 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool isFieldOwnerDisabled() const = 0; 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool isFieldOwnerReadOnly() const = 0; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual AtomicString localeIdentifier() const = 0; 626f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch virtual void fieldDidChangeValueByKeyboard() = 0; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void defaultEventHandler(Event*) OVERRIDE; 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool hasValue() const = 0; 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isDisabled() const; 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual float maximumWidth(const Font&); 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void populateDateTimeFieldsState(DateTimeFieldsState&) = 0; 70323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) void removeEventHandler() { m_fieldOwner = nullptr; } 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setDisabled(); 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void setEmptyValue(EventBehavior = DispatchNoEvent) = 0; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void setValueAsDate(const DateComponents&) = 0; 74926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) = 0; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) = 0; 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void stepDown() = 0; 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void stepUp() = 0; 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual String value() const = 0; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual String visibleValue() const = 0; 80323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 838abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) DateTimeFieldElement(Document&, FieldOwner&); 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void focusOnNextField(); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void handleKeyboardEvent(KeyboardEvent*) = 0; 86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void initialize(const AtomicString& pseudo, const String& axHelpText, int axMinimum, int axMaximum); 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Locale& localeForOwner() const; 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AtomicString localeIdentifier() const; 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void updateVisibleValue(EventBehavior); 90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual int valueAsInteger() const = 0; 91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual int valueForARIAValueNow() const; 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 93aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch // Node functions. 94aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch virtual void setFocus(bool) OVERRIDE; 95aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void defaultKeyboardEventHandler(KeyboardEvent*); 9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool isDateTimeFieldElement() const OVERRIDE FINAL; 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isFieldOwnerDisabled() const; 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isFieldOwnerReadOnly() const; 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool supportsFocus() const OVERRIDE FINAL; 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 103323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) RawPtrWillBeMember<FieldOwner> m_fieldOwner; 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 106c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 110