Changeset 129729 in webkit


Ignore:
Timestamp:
Sep 26, 2012 11:43:17 PM (12 years ago)
Author:
yosin@chromium.org
Message:

[Forms] Move multiple fields related functions to BaseDateAndTimeInputType from TimeInputType
https://bugs.webkit.org/show_bug.cgi?id=97521

Reviewed by Kent Tamura.

This patch introduces new class BaseMultipleFieldsDateAndTimeInputType
for sharing code among multiple fields date/time input UI.

Member functions in BaseMultipleFieldsDateAndTimeInputType are moved
from TimeInputType. BaseMultipleFieldsDateAndTimeInputType.{cpp,h}
were copied from TimeInputType.{cpp,h} by r129721.

This patch affects ports which enable both ENABLE_INPUT_TYPE_TIME and
ENABLE_INPUT_MULTIPLE_FIELDS_UI.

No new tests. This patch doesn't change behavior.

  • WebCore.gypi: Changed to have html/BaseMultipleFieldsDateAndTimeInputType.{cpp,h}
  • html/BaseDateAndTimeInputType.h:

(BaseDateAndTimeInputType): Exposed setMillisecondToDateComponents as protected for BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState().

  • html/BaseMultipleFieldsDateAndTimeInputType.cpp:

(WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl): Moved from TimeInputType::DateTimeEditControlOwnerImpl.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState): Moved from TimeInputType::DateTimeEditControlOwnerImpl and changed to call formatDateTimeFieldsState() in BaseMultipleFieldsDateAndTimeInputTypeInputType class.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::hasCustomFocusLogic): Moved from TimeInputType.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::blur): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::createRenderer): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::focus): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::forwardEvent): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::disabledAttributeChanged): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::handleKeydownEvent): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::isKeyboardFocusable): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::isMouseFocusable): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::minOrMaxAttributeChanged): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::readonlyAttributeChanged): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::isTextField): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::saveFormControlState): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::setValue): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldUseInputMethod): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::stepAttributeChanged): ditto.
(WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue): Moved from TimeInputType and changed to call setupLayoutParameters() to set date/time format by each input type.

  • html/BaseMultipleFieldsDateAndTimeInputType.h:

(BaseMultipleFieldsDateAndTimeInputType): Added.
(DateTimeEditControlOwnerImpl): Moved from TimeInputType.

  • html/TimeInputType.cpp: Moved multiple fields UI related functions to BaseMultipleFieldsDateAndTimeInputType.

(WebCore::TimeInputType::TimeInputType): Changed base class name to BaseTimeInput.
(WebCore::TimeInputType::formatDateTimeFieldsState): Moved from TimeINput::DateTImeEditControlOwnerImpl class.
(WebCore::TimeInputType::setupLayoutParameters): Added for set time format.

  • html/TimeInputType.h:

(TimeInputType): Chaned base class to BaseTimeInput which is alias of BaseDateAndTimeInputType or BaseMultipleFieldsDateAndTimeInputType.

Location:
trunk/Source/WebCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r129728 r129729  
     12012-09-26  Yoshifumi Inoue  <yosin@chromium.org>
     2
     3        [Forms] Move multiple fields related functions to BaseDateAndTimeInputType from TimeInputType
     4        https://bugs.webkit.org/show_bug.cgi?id=97521
     5
     6        Reviewed by Kent Tamura.
     7
     8        This patch introduces new class BaseMultipleFieldsDateAndTimeInputType
     9        for sharing code among multiple fields date/time input UI.
     10
     11        Member functions in BaseMultipleFieldsDateAndTimeInputType are moved
     12        from TimeInputType. BaseMultipleFieldsDateAndTimeInputType.{cpp,h}
     13        were copied from TimeInputType.{cpp,h} by r129721.
     14
     15        This patch affects ports which enable both ENABLE_INPUT_TYPE_TIME and
     16        ENABLE_INPUT_MULTIPLE_FIELDS_UI.
     17
     18        No new tests. This patch doesn't change behavior.
     19
     20        * WebCore.gypi: Changed to have html/BaseMultipleFieldsDateAndTimeInputType.{cpp,h}
     21        * html/BaseDateAndTimeInputType.h:
     22        (BaseDateAndTimeInputType): Exposed setMillisecondToDateComponents as protected for BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState().
     23        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
     24        (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl): Moved from TimeInputType::DateTimeEditControlOwnerImpl.
     25        (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl): ditto.
     26        (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl): ditto.
     27        (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl): ditto.
     28        (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged): ditto.
     29        (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState): Moved from TimeInputType::DateTimeEditControlOwnerImpl and changed to call formatDateTimeFieldsState() in BaseMultipleFieldsDateAndTimeInputTypeInputType class.
     30        (WebCore::BaseMultipleFieldsDateAndTimeInputType::hasCustomFocusLogic): Moved from TimeInputType.
     31        (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled): ditto.
     32        (WebCore::BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly): ditto.
     33        (WebCore::BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType): ditto.
     34        (WebCore::BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType): ditto.
     35        (WebCore::BaseMultipleFieldsDateAndTimeInputType::blur): ditto.
     36        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createRenderer): ditto.
     37        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree): ditto.
     38        (WebCore::BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree): ditto.
     39        (WebCore::BaseMultipleFieldsDateAndTimeInputType::focus): ditto.
     40        (WebCore::BaseMultipleFieldsDateAndTimeInputType::forwardEvent): ditto.
     41        (WebCore::BaseMultipleFieldsDateAndTimeInputType::disabledAttributeChanged): ditto.
     42        (WebCore::BaseMultipleFieldsDateAndTimeInputType::handleKeydownEvent): ditto.
     43        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isKeyboardFocusable): ditto.
     44        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isMouseFocusable): ditto.
     45        (WebCore::BaseMultipleFieldsDateAndTimeInputType::minOrMaxAttributeChanged): ditto.
     46        (WebCore::BaseMultipleFieldsDateAndTimeInputType::readonlyAttributeChanged): ditto.
     47        (WebCore::BaseMultipleFieldsDateAndTimeInputType::isTextField): ditto.
     48        (WebCore::BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState): ditto.
     49        (WebCore::BaseMultipleFieldsDateAndTimeInputType::saveFormControlState): ditto.
     50        (WebCore::BaseMultipleFieldsDateAndTimeInputType::setValue): ditto.
     51        (WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldUseInputMethod): ditto.
     52        (WebCore::BaseMultipleFieldsDateAndTimeInputType::stepAttributeChanged): ditto.
     53        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue): Moved from TimeInputType and changed to call setupLayoutParameters() to set date/time format by each input type.
     54        * html/BaseMultipleFieldsDateAndTimeInputType.h:
     55        (BaseMultipleFieldsDateAndTimeInputType): Added.
     56        (DateTimeEditControlOwnerImpl): Moved from TimeInputType.
     57        * html/TimeInputType.cpp: Moved multiple fields UI related functions to BaseMultipleFieldsDateAndTimeInputType.
     58        (WebCore::TimeInputType::TimeInputType): Changed base class name to BaseTimeInput.
     59        (WebCore::TimeInputType::formatDateTimeFieldsState): Moved from TimeINput::DateTImeEditControlOwnerImpl class.
     60        (WebCore::TimeInputType::setupLayoutParameters): Added for set time format.
     61        * html/TimeInputType.h:
     62        (TimeInputType): Chaned base class to BaseTimeInput which is alias of BaseDateAndTimeInputType or BaseMultipleFieldsDateAndTimeInputType.
     63
    1642012-09-26  Yoshifumi Inoue  <yosin@chromium.org>
    265
  • trunk/Source/WebCore/WebCore.gypi

    r129689 r129729  
    40054005            'html/BaseDateAndTimeInputType.cpp',
    40064006            'html/BaseDateAndTimeInputType.h',
     4007            'html/BaseMultipleFieldsDateAndTimeInputType.cpp',
     4008            'html/BaseMultipleFieldsDateAndTimeInputType.h',
    40074009            'html/BaseTextInputType.cpp',
    40084010            'html/BaseTextInputType.h',
  • trunk/Source/WebCore/html/BaseDateAndTimeInputType.h

    r125634 r129729  
    4747    virtual String serialize(const Decimal&) const OVERRIDE;
    4848    String serializeWithComponents(const DateComponents&) const;
     49    virtual bool setMillisecondToDateComponents(double, DateComponents*) const = 0;
    4950
    5051private:
    5152    virtual bool parseToDateComponentsInternal(const UChar*, unsigned length, DateComponents*) const = 0;
    52     virtual bool setMillisecondToDateComponents(double, DateComponents*) const = 0;
    5353    virtual DateComponents::Type dateType() const = 0;
    5454    virtual double valueAsDate() const OVERRIDE;
  • trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp

    r129721 r129729  
    3030
    3131#include "config.h"
    32 #include "TimeInputType.h"
     32#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
     33#include "BaseMultipleFieldsDateAndTimeInputType.h"
    3334
    3435#include "DateComponents.h"
    35 #include "HTMLInputElement.h"
    36 #include "HTMLNames.h"
    37 #include "InputTypeNames.h"
    38 #include <wtf/CurrentTime.h>
    39 #include <wtf/DateMath.h>
    40 #include <wtf/MathExtras.h>
    41 #include <wtf/PassOwnPtr.h>
    42 
    43 #if ENABLE(INPUT_TYPE_TIME)
    44 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
    4536#include "DateTimeFieldsState.h"
    4637#include "ElementShadow.h"
    4738#include "FormController.h"
     39#include "HTMLInputElement.h"
    4840#include "KeyboardEvent.h"
    4941#include "Localizer.h"
    5042#include "ShadowRoot.h"
    51 #include <wtf/text/WTFString.h>
    52 #endif
    5343
    5444namespace WebCore {
    5545
    56 using namespace HTMLNames;
    57 
    58 static const int timeDefaultStep = 60;
    59 static const int timeDefaultStepBase = 0;
    60 static const int timeStepScaleFactor = 1000;
    61 
    62 PassOwnPtr<InputType> TimeInputType::create(HTMLInputElement* element)
    63 {
    64     return adoptPtr(new TimeInputType(element));
    65 }
    66 
    67 const AtomicString& TimeInputType::formControlType() const
    68 {
    69     return InputTypeNames::time();
    70 }
    71 
    72 DateComponents::Type TimeInputType::dateType() const
    73 {
    74     return DateComponents::Time;
    75 }
    76 
    77 Decimal TimeInputType::defaultValueForStepUp() const
    78 {
    79     double current = currentTimeMS();
    80     double utcOffset = calculateUTCOffset();
    81     double dstOffset = calculateDSTOffset(current, utcOffset);
    82     int offset = static_cast<int>((utcOffset + dstOffset) / msPerMinute);
    83     current += offset * msPerMinute;
    84 
    85     DateComponents date;
    86     date.setMillisecondsSinceMidnight(current);
    87     double milliseconds = date.millisecondsSinceEpoch();
    88     ASSERT(isfinite(milliseconds));
    89     return Decimal::fromDouble(milliseconds);
    90 }
    91 
    92 StepRange TimeInputType::createStepRange(AnyStepHandling anyStepHandling) const
    93 {
    94     DEFINE_STATIC_LOCAL(const StepRange::StepDescription, stepDescription, (timeDefaultStep, timeDefaultStepBase, timeStepScaleFactor, StepRange::ScaledStepValueShouldBeInteger));
    95 
    96     const Decimal stepBase = parseToNumber(element()->fastGetAttribute(minAttr), 0);
    97     const Decimal minimum = parseToNumber(element()->fastGetAttribute(minAttr), Decimal::fromDouble(DateComponents::minimumTime()));
    98     const Decimal maximum = parseToNumber(element()->fastGetAttribute(maxAttr), Decimal::fromDouble(DateComponents::maximumTime()));
    99     const Decimal step = StepRange::parseStep(anyStepHandling, stepDescription, element()->fastGetAttribute(stepAttr));
    100     return StepRange(stepBase, minimum, maximum, step, stepDescription);
    101 }
    102 
    103 bool TimeInputType::parseToDateComponentsInternal(const UChar* characters, unsigned length, DateComponents* out) const
    104 {
    105     ASSERT(out);
    106     unsigned end;
    107     return out->parseTime(characters, length, 0, end) && end == length;
    108 }
    109 
    110 bool TimeInputType::setMillisecondToDateComponents(double value, DateComponents* date) const
    111 {
    112     ASSERT(date);
    113     return date->setMillisecondsSinceMidnight(value);
    114 }
    115 
    116 bool TimeInputType::isTimeField() const
    117 {
    118     return true;
    119 }
    120 
    121 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
    122 
    123 TimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl(TimeInputType& timeInputType)
    124     : m_timeInputType(timeInputType)
    125 {
    126 }
    127 
    128 TimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl()
    129 {
    130 }
    131 
    132 void TimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl()
     46BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl(BaseMultipleFieldsDateAndTimeInputType& dateAndTimeInputType)
     47    : m_dateAndTimeInputType(dateAndTimeInputType)
     48{
     49}
     50
     51BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl()
     52{
     53}
     54
     55void BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl()
    13356{
    13457    // We don't need to call blur(). This function is called when control
     
    13659
    13760    // Remove focus ring by CSS "focus" pseudo class.
    138     m_timeInputType.element()->setFocus(false);
    139 }
    140 
    141 void TimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl()
     61    m_dateAndTimeInputType.element()->setFocus(false);
     62}
     63
     64void BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl()
    14265{
    14366    // We don't need to call focus(). This function is called when control
     
    14568
    14669    // Add focus ring by CSS "focus" pseudo class.
    147     m_timeInputType.element()->setFocus(true);
    148 }
    149 
    150 void TimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged()
    151 {
    152     RefPtr<HTMLInputElement> input(m_timeInputType.element());
    153     input->setValueInternal(m_timeInputType.m_dateTimeEditElement->value(), DispatchNoEvent);
     70    m_dateAndTimeInputType.element()->setFocus(true);
     71}
     72
     73void BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged()
     74{
     75    RefPtr<HTMLInputElement> input(m_dateAndTimeInputType.element());
     76    input->setValueInternal(m_dateAndTimeInputType.m_dateTimeEditElement->value(), DispatchNoEvent);
    15477    input->setNeedsStyleRecalc();
    15578    input->dispatchFormControlInputEvent();
     
    15881}
    15982
    160 
    161 String TimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
    162 {
    163     if (!dateTimeFieldsState.hasHour() || !dateTimeFieldsState.hasMinute() || !dateTimeFieldsState.hasAMPM())
    164         return emptyString();
    165     if (dateTimeFieldsState.hasMillisecond() && dateTimeFieldsState.millisecond())
    166         return String::format("%02u:%02u:%02u.%03u",
    167                 dateTimeFieldsState.hour23(),
    168                 dateTimeFieldsState.minute(),
    169                 dateTimeFieldsState.hasSecond() ? dateTimeFieldsState.second() : 0,
    170                 dateTimeFieldsState.millisecond());
    171     if (dateTimeFieldsState.hasSecond() && dateTimeFieldsState.second())
    172         return String::format("%02u:%02u:%02u",
    173                 dateTimeFieldsState.hour23(),
    174                 dateTimeFieldsState.minute(),
    175                 dateTimeFieldsState.second());
    176     return String::format("%02u:%02u", dateTimeFieldsState.hour23(), dateTimeFieldsState.minute());
    177 }
    178 
    179 bool TimeInputType::hasCustomFocusLogic() const
    180 {
    181     return false;
    182 }
    183 
    184 bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled() const
    185 {
    186     return m_timeInputType.element()->readOnly();
    187 }
    188 
    189 bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly() const
    190 {
    191     return m_timeInputType.element()->disabled();
    192 }
    193 
    194 TimeInputType::TimeInputType(HTMLInputElement* element)
     83String BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
     84{
     85    return m_dateAndTimeInputType.formatDateTimeFieldsState(dateTimeFieldsState);
     86}
     87
     88bool BaseMultipleFieldsDateAndTimeInputType::hasCustomFocusLogic() const
     89{
     90    return false;
     91}
     92
     93bool BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled() const
     94{
     95    return m_dateAndTimeInputType.element()->readOnly();
     96}
     97
     98bool BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly() const
     99{
     100    return m_dateAndTimeInputType.element()->disabled();
     101}
     102
     103BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType(HTMLInputElement* element)
    195104    : BaseDateAndTimeInputType(element)
    196105    , m_dateTimeEditElement(0)
     
    199108}
    200109
    201 TimeInputType::~TimeInputType()
     110BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType()
    202111{
    203112    if (m_dateTimeEditElement)
     
    205114}
    206115
    207 void TimeInputType::blur()
     116void BaseMultipleFieldsDateAndTimeInputType::blur()
    208117{
    209118    if (m_dateTimeEditElement)
     
    211120}
    212121
    213 RenderObject* TimeInputType::createRenderer(RenderArena* arena, RenderStyle* style) const
     122RenderObject* BaseMultipleFieldsDateAndTimeInputType::createRenderer(RenderArena* arena, RenderStyle* style) const
    214123{
    215124    return InputType::createRenderer(arena, style);
    216125}
    217126
    218 void TimeInputType::createShadowSubtree()
     127void BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree()
    219128{
    220129    ASSERT(element()->shadow());
     
    226135}
    227136
    228 void TimeInputType::destroyShadowSubtree()
     137void BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree()
    229138{
    230139    if (m_dateTimeEditElement) {
     
    235144}
    236145
    237 void TimeInputType::focus(bool)
     146void BaseMultipleFieldsDateAndTimeInputType::focus(bool)
    238147{
    239148    if (m_dateTimeEditElement)
     
    241150}
    242151
    243 void TimeInputType::forwardEvent(Event* event)
     152void BaseMultipleFieldsDateAndTimeInputType::forwardEvent(Event* event)
    244153{
    245154    if (m_dateTimeEditElement)
     
    247156}
    248157
    249 void TimeInputType::disabledAttributeChanged()
     158void BaseMultipleFieldsDateAndTimeInputType::disabledAttributeChanged()
    250159{
    251160    if (m_dateTimeEditElement)
     
    253162}
    254163
    255 void TimeInputType::handleKeydownEvent(KeyboardEvent* event)
     164void BaseMultipleFieldsDateAndTimeInputType::handleKeydownEvent(KeyboardEvent* event)
    256165{
    257166    forwardEvent(event);
    258167}
    259168
    260 bool TimeInputType::isKeyboardFocusable(KeyboardEvent*) const
    261 {
    262     return false;
    263 }
    264 
    265 bool TimeInputType::isMouseFocusable() const
    266 {
    267     return false;
    268 }
    269 
    270 void TimeInputType::minOrMaxAttributeChanged()
     169bool BaseMultipleFieldsDateAndTimeInputType::isKeyboardFocusable(KeyboardEvent*) const
     170{
     171    return false;
     172}
     173
     174bool BaseMultipleFieldsDateAndTimeInputType::isMouseFocusable() const
     175{
     176    return false;
     177}
     178
     179void BaseMultipleFieldsDateAndTimeInputType::minOrMaxAttributeChanged()
    271180{
    272181    updateInnerTextValue();
    273182}
    274183
    275 void TimeInputType::readonlyAttributeChanged()
     184void BaseMultipleFieldsDateAndTimeInputType::readonlyAttributeChanged()
    276185{
    277186    if (m_dateTimeEditElement)
     
    279188}
    280189
    281 bool TimeInputType::isTextField() const
    282 {
    283     return false;
    284 }
    285 
    286 void TimeInputType::restoreFormControlState(const FormControlState& state)
     190bool BaseMultipleFieldsDateAndTimeInputType::isTextField() const
     191{
     192    return false;
     193}
     194
     195void BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState(const FormControlState& state)
    287196{
    288197    if (!m_dateTimeEditElement)
     
    295204}
    296205
    297 FormControlState TimeInputType::saveFormControlState() const
     206FormControlState BaseMultipleFieldsDateAndTimeInputType::saveFormControlState() const
    298207{
    299208    if (!m_dateTimeEditElement)
     
    303212}
    304213
    305 void TimeInputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior)
     214void BaseMultipleFieldsDateAndTimeInputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior)
    306215{
    307216    InputType::setValue(sanitizedValue, valueChanged, eventBehavior);
     
    310219}
    311220
    312 bool TimeInputType::shouldUseInputMethod() const
    313 {
    314     return false;
    315 }
    316 
    317 void TimeInputType::stepAttributeChanged()
     221bool BaseMultipleFieldsDateAndTimeInputType::shouldUseInputMethod() const
     222{
     223    return false;
     224}
     225
     226void BaseMultipleFieldsDateAndTimeInputType::stepAttributeChanged()
    318227{
    319228    updateInnerTextValue();
    320229}
    321230
    322 void TimeInputType::updateInnerTextValue()
     231void BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue()
    323232{
    324233    if (!m_dateTimeEditElement)
     
    333242        setMillisecondToDateComponents(layoutParameters.stepRange.minimum().toDouble(), &date);
    334243
    335     if (date.second() || layoutParameters.shouldHaveSecondField()) {
    336         layoutParameters.dateTimeFormat = localizer.timeFormat();
    337         layoutParameters.fallbackDateTimeFormat = "HH:mm:ss";
    338     } else {
    339         layoutParameters.dateTimeFormat = localizer.shortTimeFormat();
    340         layoutParameters.fallbackDateTimeFormat = "HH:mm";
    341     }
     244    setupLayoutParameters(layoutParameters, date);
    342245
    343246    if (hasValue)
     
    346249        m_dateTimeEditElement->setEmptyValue(layoutParameters, date);
    347250}
    348 #else
    349 TimeInputType::TimeInputType(HTMLInputElement* element)
    350     : BaseDateAndTimeInputType(element)
    351 {
    352 }
     251
     252} // namespace WebCore
     253
    353254#endif
    354 
    355 } // namespace WebCore
    356 
    357 #endif
  • trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h

    r129721 r129729  
    2929 */
    3030
    31 #ifndef TimeInputType_h
    32 #define TimeInputType_h
     31#ifndef BaseMultipleFieldsDateAndTimeInputType_h
     32#define BaseMultipleFieldsDateAndTimeInputType_h
    3333
    3434#include "BaseDateAndTimeInputType.h"
    3535
    36 #if ENABLE(INPUT_TYPE_TIME)
    37 
    3836#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
    3937#include "DateTimeEditElement.h"
    40 #endif
    4138
    4239namespace WebCore {
    4340
    44 class TimeInputType : public BaseDateAndTimeInputType {
    45 public:
    46     static PassOwnPtr<InputType> create(HTMLInputElement*);
    47 
    48 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
    49     virtual ~TimeInputType();
    50 #endif
     41class BaseMultipleFieldsDateAndTimeInputType : public BaseDateAndTimeInputType {
     42protected:
     43    BaseMultipleFieldsDateAndTimeInputType(HTMLInputElement*);
     44    virtual ~BaseMultipleFieldsDateAndTimeInputType();
     45    virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const = 0;
     46    virtual void setupLayoutParameters(DateTimeEditElement::LayoutParameters&, const DateComponents&) const = 0;
    5147
    5248private:
    53     TimeInputType(HTMLInputElement*);
    54     virtual const AtomicString& formControlType() const OVERRIDE;
    55     virtual DateComponents::Type dateType() const OVERRIDE;
    56     virtual Decimal defaultValueForStepUp() const OVERRIDE;
    57     virtual StepRange createStepRange(AnyStepHandling) const OVERRIDE;
    58     virtual bool parseToDateComponentsInternal(const UChar*, unsigned length, DateComponents*) const OVERRIDE;
    59     virtual bool setMillisecondToDateComponents(double, DateComponents*) const OVERRIDE;
    60     virtual bool isTimeField() const OVERRIDE;
    61 
    62 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
     49    // FIXME: DateTimeEditControlOwnerImpl should be removed by moving
     50    // DateTimeEditElement::EditControlOwner into base class list of
     51    // BaseMultipleFieldsDateAndTimeInputType.
    6352    class DateTimeEditControlOwnerImpl : public DateTimeEditElement::EditControlOwner {
    6453        WTF_MAKE_NONCOPYABLE(DateTimeEditControlOwnerImpl);
    6554
    6655    public:
    67         DateTimeEditControlOwnerImpl(TimeInputType&);
     56        DateTimeEditControlOwnerImpl(BaseMultipleFieldsDateAndTimeInputType&);
    6857        virtual ~DateTimeEditControlOwnerImpl();
    6958
     
    7665        virtual bool isEditControlOwnerReadOnly() const OVERRIDE FINAL;
    7766
    78         TimeInputType& m_timeInputType;
     67        BaseMultipleFieldsDateAndTimeInputType& m_dateAndTimeInputType;
    7968    };
    8069
     
    10594    DateTimeEditElement* m_dateTimeEditElement;
    10695    DateTimeEditControlOwnerImpl m_dateTimeEditControlOwnerImpl;
    107 #endif
    10896};
    10997
  • trunk/Source/WebCore/html/TimeInputType.cpp

    r129612 r129729  
    4242
    4343#if ENABLE(INPUT_TYPE_TIME)
     44
    4445#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
    4546#include "DateTimeFieldsState.h"
    46 #include "ElementShadow.h"
    47 #include "FormController.h"
    48 #include "KeyboardEvent.h"
    4947#include "Localizer.h"
    50 #include "ShadowRoot.h"
    5148#include <wtf/text/WTFString.h>
    5249#endif
     
    5956static const int timeDefaultStepBase = 0;
    6057static const int timeStepScaleFactor = 1000;
     58
     59TimeInputType::TimeInputType(HTMLInputElement*  element)
     60    : BaseTimeInputType(element)
     61{
     62}
    6163
    6264PassOwnPtr<InputType> TimeInputType::create(HTMLInputElement* element)
     
    121123#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
    122124
    123 TimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl(TimeInputType& timeInputType)
    124     : m_timeInputType(timeInputType)
    125 {
    126 }
    127 
    128 TimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl()
    129 {
    130 }
    131 
    132 void TimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl()
    133 {
    134     // We don't need to call blur(). This function is called when control
    135     // lost focus.
    136 
    137     // Remove focus ring by CSS "focus" pseudo class.
    138     m_timeInputType.element()->setFocus(false);
    139 }
    140 
    141 void TimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl()
    142 {
    143     // We don't need to call focus(). This function is called when control
    144     // got focus.
    145 
    146     // Add focus ring by CSS "focus" pseudo class.
    147     m_timeInputType.element()->setFocus(true);
    148 }
    149 
    150 void TimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged()
    151 {
    152     RefPtr<HTMLInputElement> input(m_timeInputType.element());
    153     input->setValueInternal(m_timeInputType.m_dateTimeEditElement->value(), DispatchNoEvent);
    154     input->setNeedsStyleRecalc();
    155     input->dispatchFormControlInputEvent();
    156     input->dispatchFormControlChangeEvent();
    157     input->notifyFormStateChanged();
    158 }
    159 
    160 
    161 String TimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
     125String TimeInputType::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
    162126{
    163127    if (!dateTimeFieldsState.hasHour() || !dateTimeFieldsState.hasMinute() || !dateTimeFieldsState.hasAMPM())
     
    177141}
    178142
    179 bool TimeInputType::hasCustomFocusLogic() const
     143void TimeInputType::setupLayoutParameters(DateTimeEditElement::LayoutParameters& layoutParameters, const DateComponents& date) const
    180144{
    181     return false;
    182 }
    183 
    184 bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled() const
    185 {
    186     return m_timeInputType.element()->readOnly();
    187 }
    188 
    189 bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly() const
    190 {
    191     return m_timeInputType.element()->disabled();
    192 }
    193 
    194 TimeInputType::TimeInputType(HTMLInputElement* element)
    195     : BaseDateAndTimeInputType(element)
    196     , m_dateTimeEditElement(0)
    197     , m_dateTimeEditControlOwnerImpl(*this)
    198 {
    199 }
    200 
    201 TimeInputType::~TimeInputType()
    202 {
    203     if (m_dateTimeEditElement)
    204         m_dateTimeEditElement->removeEditControlOwner();
    205 }
    206 
    207 void TimeInputType::blur()
    208 {
    209     if (m_dateTimeEditElement)
    210         m_dateTimeEditElement->blurByOwner();
    211 }
    212 
    213 RenderObject* TimeInputType::createRenderer(RenderArena* arena, RenderStyle* style) const
    214 {
    215     return InputType::createRenderer(arena, style);
    216 }
    217 
    218 void TimeInputType::createShadowSubtree()
    219 {
    220     ASSERT(element()->shadow());
    221 
    222     RefPtr<DateTimeEditElement> dateTimeEditElement(DateTimeEditElement::create(element()->document(), m_dateTimeEditControlOwnerImpl));
    223     m_dateTimeEditElement = dateTimeEditElement.get();
    224     element()->userAgentShadowRoot()->appendChild(m_dateTimeEditElement);
    225     updateInnerTextValue();
    226 }
    227 
    228 void TimeInputType::destroyShadowSubtree()
    229 {
    230     if (m_dateTimeEditElement) {
    231         m_dateTimeEditElement->removeEditControlOwner();
    232         m_dateTimeEditElement = 0;
    233     }
    234     BaseDateAndTimeInputType::destroyShadowSubtree();
    235 }
    236 
    237 void TimeInputType::focus(bool)
    238 {
    239     if (m_dateTimeEditElement)
    240         m_dateTimeEditElement->focusByOwner();
    241 }
    242 
    243 void TimeInputType::forwardEvent(Event* event)
    244 {
    245     if (m_dateTimeEditElement)
    246         m_dateTimeEditElement->defaultEventHandler(event);
    247 }
    248 
    249 void TimeInputType::disabledAttributeChanged()
    250 {
    251     if (m_dateTimeEditElement)
    252         m_dateTimeEditElement->disabledStateChanged();
    253 }
    254 
    255 void TimeInputType::handleKeydownEvent(KeyboardEvent* event)
    256 {
    257     forwardEvent(event);
    258 }
    259 
    260 bool TimeInputType::isKeyboardFocusable(KeyboardEvent*) const
    261 {
    262     return false;
    263 }
    264 
    265 bool TimeInputType::isMouseFocusable() const
    266 {
    267     return false;
    268 }
    269 
    270 void TimeInputType::minOrMaxAttributeChanged()
    271 {
    272     updateInnerTextValue();
    273 }
    274 
    275 void TimeInputType::readonlyAttributeChanged()
    276 {
    277     if (m_dateTimeEditElement)
    278         m_dateTimeEditElement->readOnlyStateChanged();
    279 }
    280 
    281 bool TimeInputType::isTextField() const
    282 {
    283     return false;
    284 }
    285 
    286 void TimeInputType::restoreFormControlState(const FormControlState& state)
    287 {
    288     if (!m_dateTimeEditElement)
    289         return;
    290     DateComponents date;
    291     setMillisecondToDateComponents(createStepRange(AnyIsDefaultStep).minimum().toDouble(), &date);
    292     DateTimeFieldsState dateTimeFieldsState = DateTimeFieldsState::restoreFormControlState(state);
    293     m_dateTimeEditElement->setValueAsDateTimeFieldsState(dateTimeFieldsState, date);
    294     element()->setValueInternal(m_dateTimeEditElement->value(), DispatchNoEvent);
    295 }
    296 
    297 FormControlState TimeInputType::saveFormControlState() const
    298 {
    299     if (!m_dateTimeEditElement)
    300         return FormControlState();
    301 
    302     return m_dateTimeEditElement->valueAsDateTimeFieldsState().saveFormControlState();
    303 }
    304 
    305 void TimeInputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior)
    306 {
    307     InputType::setValue(sanitizedValue, valueChanged, eventBehavior);
    308     if (valueChanged)
    309         updateInnerTextValue();
    310 }
    311 
    312 bool TimeInputType::shouldUseInputMethod() const
    313 {
    314     return false;
    315 }
    316 
    317 void TimeInputType::stepAttributeChanged()
    318 {
    319     updateInnerTextValue();
    320 }
    321 
    322 void TimeInputType::updateInnerTextValue()
    323 {
    324     if (!m_dateTimeEditElement)
    325         return;
    326 
    327     Localizer& localizer = element()->document()->getLocalizer(element()->computeInheritedLanguage());
    328     DateTimeEditElement::LayoutParameters layoutParameters(localizer, createStepRange(AnyIsDefaultStep));
    329 
    330     DateComponents date;
    331     const bool hasValue = parseToDateComponents(element()->value(), &date);
    332     if (!hasValue)
    333         setMillisecondToDateComponents(layoutParameters.stepRange.minimum().toDouble(), &date);
    334 
    335145    if (date.second() || layoutParameters.shouldHaveSecondField()) {
    336         layoutParameters.dateTimeFormat = localizer.timeFormat();
     146        layoutParameters.dateTimeFormat = layoutParameters.localizer.timeFormat();
    337147        layoutParameters.fallbackDateTimeFormat = "HH:mm:ss";
    338148    } else {
    339         layoutParameters.dateTimeFormat = localizer.shortTimeFormat();
     149        layoutParameters.dateTimeFormat = layoutParameters.localizer.shortTimeFormat();
    340150        layoutParameters.fallbackDateTimeFormat = "HH:mm";
    341151    }
    342 
    343     if (hasValue)
    344         m_dateTimeEditElement->setValueAsDate(layoutParameters, date);
    345     else
    346         m_dateTimeEditElement->setEmptyValue(layoutParameters, date);
    347 }
    348 #else
    349 TimeInputType::TimeInputType(HTMLInputElement* element)
    350     : BaseDateAndTimeInputType(element)
    351 {
    352152}
    353153#endif
  • trunk/Source/WebCore/html/TimeInputType.h

    r129612 r129729  
    3232#define TimeInputType_h
    3333
     34#if ENABLE(INPUT_TYPE_TIME)
     35#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
     36#include "BaseMultipleFieldsDateAndTimeInputType.h"
     37#else
    3438#include "BaseDateAndTimeInputType.h"
    35 
    36 #if ENABLE(INPUT_TYPE_TIME)
    37 
    38 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
    39 #include "DateTimeEditElement.h"
    4039#endif
    4140
    4241namespace WebCore {
    4342
    44 class TimeInputType : public BaseDateAndTimeInputType {
     43#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
     44typedef BaseMultipleFieldsDateAndTimeInputType BaseTimeInputType;
     45#else
     46typedef BaseDateAndTimeInputType BaseTimeInputType;
     47#endif
     48
     49class TimeInputType : public BaseTimeInputType {
    4550public:
    4651    static PassOwnPtr<InputType> create(HTMLInputElement*);
    47 
    48 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
    49     virtual ~TimeInputType();
    50 #endif
    5152
    5253private:
     
    6162
    6263#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
    63     class DateTimeEditControlOwnerImpl : public DateTimeEditElement::EditControlOwner {
    64         WTF_MAKE_NONCOPYABLE(DateTimeEditControlOwnerImpl);
    65 
    66     public:
    67         DateTimeEditControlOwnerImpl(TimeInputType&);
    68         virtual ~DateTimeEditControlOwnerImpl();
    69 
    70     private:
    71         virtual void didBlurFromControl() OVERRIDE FINAL;
    72         virtual void didFocusOnControl() OVERRIDE FINAL;
    73         virtual void editControlValueChanged() OVERRIDE FINAL;
    74         virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const OVERRIDE FINAL;
    75         virtual bool isEditControlOwnerDisabled() const OVERRIDE FINAL;
    76         virtual bool isEditControlOwnerReadOnly() const OVERRIDE FINAL;
    77 
    78         TimeInputType& m_timeInputType;
    79     };
    80 
    81     friend class DateTimeEditControlOwnerImpl;
    82 
    83     // InputType functions
    84     virtual void blur() OVERRIDE FINAL;
    85     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const OVERRIDE FINAL;
    86     virtual void createShadowSubtree() OVERRIDE FINAL;
    87     virtual void destroyShadowSubtree() OVERRIDE FINAL;
    88     virtual void disabledAttributeChanged() OVERRIDE FINAL;
    89     virtual void focus(bool restorePreviousSelection) OVERRIDE FINAL;
    90     virtual void forwardEvent(Event*) OVERRIDE FINAL;
    91     virtual void handleKeydownEvent(KeyboardEvent*) OVERRIDE FINAL;
    92     virtual bool hasCustomFocusLogic() const OVERRIDE FINAL;
    93     virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE FINAL;
    94     virtual bool isMouseFocusable() const OVERRIDE FINAL;
    95     virtual bool isTextField() const OVERRIDE FINAL;
    96     virtual void minOrMaxAttributeChanged() OVERRIDE FINAL;
    97     virtual void readonlyAttributeChanged() OVERRIDE FINAL;
    98     virtual void restoreFormControlState(const FormControlState&) OVERRIDE FINAL;
    99     virtual FormControlState saveFormControlState() const OVERRIDE FINAL;
    100     virtual void setValue(const String&, bool valueChanged, TextFieldEventBehavior) OVERRIDE FINAL;
    101     virtual bool shouldUseInputMethod() const OVERRIDE FINAL;
    102     virtual void stepAttributeChanged() OVERRIDE FINAL;
    103     virtual void updateInnerTextValue() OVERRIDE FINAL;
    104 
    105     DateTimeEditElement* m_dateTimeEditElement;
    106     DateTimeEditControlOwnerImpl m_dateTimeEditControlOwnerImpl;
     64    // BaseMultipleFieldsDateAndTimeInputType functions
     65    virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const OVERRIDE FINAL;
     66    virtual void setupLayoutParameters(DateTimeEditElement::LayoutParameters&, const DateComponents&) const OVERRIDE FINAL;
    10767#endif
    10868};
Note: See TracChangeset for help on using the changeset viewer.