Title: [129729] trunk/Source/WebCore
Revision
129729
Author
yo...@chromium.org
Date
2012-09-26 23:43:17 -0700 (Wed, 26 Sep 2012)

Log 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.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (129728 => 129729)


--- trunk/Source/WebCore/ChangeLog	2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/ChangeLog	2012-09-27 06:43:17 UTC (rev 129729)
@@ -1,5 +1,68 @@
 2012-09-26  Yoshifumi Inoue  <yo...@chromium.org>
 
+        [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.
+
+2012-09-26  Yoshifumi Inoue  <yo...@chromium.org>
+
         [Forms] Adding localization texts for multiple fields date/time input UI
         https://bugs.webkit.org/show_bug.cgi?id=97633
 

Modified: trunk/Source/WebCore/WebCore.gypi (129728 => 129729)


--- trunk/Source/WebCore/WebCore.gypi	2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/WebCore.gypi	2012-09-27 06:43:17 UTC (rev 129729)
@@ -4004,6 +4004,8 @@
             'html/BaseClickableWithKeyInputType.h',
             'html/BaseDateAndTimeInputType.cpp',
             'html/BaseDateAndTimeInputType.h',
+            'html/BaseMultipleFieldsDateAndTimeInputType.cpp',
+            'html/BaseMultipleFieldsDateAndTimeInputType.h',
             'html/BaseTextInputType.cpp',
             'html/BaseTextInputType.h',
             'html/ButtonInputType.cpp',

Modified: trunk/Source/WebCore/html/BaseDateAndTimeInputType.h (129728 => 129729)


--- trunk/Source/WebCore/html/BaseDateAndTimeInputType.h	2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/html/BaseDateAndTimeInputType.h	2012-09-27 06:43:17 UTC (rev 129729)
@@ -46,10 +46,10 @@
     virtual bool parseToDateComponents(const String&, DateComponents*) const OVERRIDE;
     virtual String serialize(const Decimal&) const OVERRIDE;
     String serializeWithComponents(const DateComponents&) const;
+    virtual bool setMillisecondToDateComponents(double, DateComponents*) const = 0;
 
 private:
     virtual bool parseToDateComponentsInternal(const UChar*, unsigned length, DateComponents*) const = 0;
-    virtual bool setMillisecondToDateComponents(double, DateComponents*) const = 0;
     virtual DateComponents::Type dateType() const = 0;
     virtual double valueAsDate() const OVERRIDE;
     virtual void setValueAsDate(double, ExceptionCode&) const OVERRIDE;

Modified: trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp (129728 => 129729)


--- trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp	2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp	2012-09-27 06:43:17 UTC (rev 129729)
@@ -29,193 +29,102 @@
  */
 
 #include "config.h"
-#include "TimeInputType.h"
+#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
+#include "BaseMultipleFieldsDateAndTimeInputType.h"
 
 #include "DateComponents.h"
-#include "HTMLInputElement.h"
-#include "HTMLNames.h"
-#include "InputTypeNames.h"
-#include <wtf/CurrentTime.h>
-#include <wtf/DateMath.h>
-#include <wtf/MathExtras.h>
-#include <wtf/PassOwnPtr.h>
-
-#if ENABLE(INPUT_TYPE_TIME)
-#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
 #include "DateTimeFieldsState.h"
 #include "ElementShadow.h"
 #include "FormController.h"
+#include "HTMLInputElement.h"
 #include "KeyboardEvent.h"
 #include "Localizer.h"
 #include "ShadowRoot.h"
-#include <wtf/text/WTFString.h>
-#endif
 
 namespace WebCore {
 
-using namespace HTMLNames;
-
-static const int timeDefaultStep = 60;
-static const int timeDefaultStepBase = 0;
-static const int timeStepScaleFactor = 1000;
-
-PassOwnPtr<InputType> TimeInputType::create(HTMLInputElement* element)
+BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl(BaseMultipleFieldsDateAndTimeInputType& dateAndTimeInputType)
+    : m_dateAndTimeInputType(dateAndTimeInputType)
 {
-    return adoptPtr(new TimeInputType(element));
 }
 
-const AtomicString& TimeInputType::formControlType() const
+BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl()
 {
-    return InputTypeNames::time();
 }
 
-DateComponents::Type TimeInputType::dateType() const
+void BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl()
 {
-    return DateComponents::Time;
-}
-
-Decimal TimeInputType::defaultValueForStepUp() const
-{
-    double current = currentTimeMS();
-    double utcOffset = calculateUTCOffset();
-    double dstOffset = calculateDSTOffset(current, utcOffset);
-    int offset = static_cast<int>((utcOffset + dstOffset) / msPerMinute);
-    current += offset * msPerMinute;
-
-    DateComponents date;
-    date.setMillisecondsSinceMidnight(current);
-    double milliseconds = date.millisecondsSinceEpoch();
-    ASSERT(isfinite(milliseconds));
-    return Decimal::fromDouble(milliseconds);
-}
-
-StepRange TimeInputType::createStepRange(AnyStepHandling anyStepHandling) const
-{
-    DEFINE_STATIC_LOCAL(const StepRange::StepDescription, stepDescription, (timeDefaultStep, timeDefaultStepBase, timeStepScaleFactor, StepRange::ScaledStepValueShouldBeInteger));
-
-    const Decimal stepBase = parseToNumber(element()->fastGetAttribute(minAttr), 0);
-    const Decimal minimum = parseToNumber(element()->fastGetAttribute(minAttr), Decimal::fromDouble(DateComponents::minimumTime()));
-    const Decimal maximum = parseToNumber(element()->fastGetAttribute(maxAttr), Decimal::fromDouble(DateComponents::maximumTime()));
-    const Decimal step = StepRange::parseStep(anyStepHandling, stepDescription, element()->fastGetAttribute(stepAttr));
-    return StepRange(stepBase, minimum, maximum, step, stepDescription);
-}
-
-bool TimeInputType::parseToDateComponentsInternal(const UChar* characters, unsigned length, DateComponents* out) const
-{
-    ASSERT(out);
-    unsigned end;
-    return out->parseTime(characters, length, 0, end) && end == length;
-}
-
-bool TimeInputType::setMillisecondToDateComponents(double value, DateComponents* date) const
-{
-    ASSERT(date);
-    return date->setMillisecondsSinceMidnight(value);
-}
-
-bool TimeInputType::isTimeField() const
-{
-    return true;
-}
-
-#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
-
-TimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl(TimeInputType& timeInputType)
-    : m_timeInputType(timeInputType)
-{
-}
-
-TimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl()
-{
-}
-
-void TimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl()
-{
     // We don't need to call blur(). This function is called when control
     // lost focus.
 
     // Remove focus ring by CSS "focus" pseudo class.
-    m_timeInputType.element()->setFocus(false);
+    m_dateAndTimeInputType.element()->setFocus(false);
 }
 
-void TimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl()
+void BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl()
 {
     // We don't need to call focus(). This function is called when control
     // got focus.
 
     // Add focus ring by CSS "focus" pseudo class.
-    m_timeInputType.element()->setFocus(true);
+    m_dateAndTimeInputType.element()->setFocus(true);
 }
 
-void TimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged()
+void BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged()
 {
-    RefPtr<HTMLInputElement> input(m_timeInputType.element());
-    input->setValueInternal(m_timeInputType.m_dateTimeEditElement->value(), DispatchNoEvent);
+    RefPtr<HTMLInputElement> input(m_dateAndTimeInputType.element());
+    input->setValueInternal(m_dateAndTimeInputType.m_dateTimeEditElement->value(), DispatchNoEvent);
     input->setNeedsStyleRecalc();
     input->dispatchFormControlInputEvent();
     input->dispatchFormControlChangeEvent();
     input->notifyFormStateChanged();
 }
 
-
-String TimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
+String BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
 {
-    if (!dateTimeFieldsState.hasHour() || !dateTimeFieldsState.hasMinute() || !dateTimeFieldsState.hasAMPM())
-        return emptyString();
-    if (dateTimeFieldsState.hasMillisecond() && dateTimeFieldsState.millisecond())
-        return String::format("%02u:%02u:%02u.%03u",
-                dateTimeFieldsState.hour23(),
-                dateTimeFieldsState.minute(),
-                dateTimeFieldsState.hasSecond() ? dateTimeFieldsState.second() : 0,
-                dateTimeFieldsState.millisecond());
-    if (dateTimeFieldsState.hasSecond() && dateTimeFieldsState.second())
-        return String::format("%02u:%02u:%02u",
-                dateTimeFieldsState.hour23(),
-                dateTimeFieldsState.minute(),
-                dateTimeFieldsState.second());
-    return String::format("%02u:%02u", dateTimeFieldsState.hour23(), dateTimeFieldsState.minute());
+    return m_dateAndTimeInputType.formatDateTimeFieldsState(dateTimeFieldsState);
 }
 
-bool TimeInputType::hasCustomFocusLogic() const
+bool BaseMultipleFieldsDateAndTimeInputType::hasCustomFocusLogic() const
 {
     return false;
 }
 
-bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled() const
+bool BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled() const
 {
-    return m_timeInputType.element()->readOnly();
+    return m_dateAndTimeInputType.element()->readOnly();
 }
 
-bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly() const
+bool BaseMultipleFieldsDateAndTimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly() const
 {
-    return m_timeInputType.element()->disabled();
+    return m_dateAndTimeInputType.element()->disabled();
 }
 
-TimeInputType::TimeInputType(HTMLInputElement* element)
+BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType(HTMLInputElement* element)
     : BaseDateAndTimeInputType(element)
     , m_dateTimeEditElement(0)
     , m_dateTimeEditControlOwnerImpl(*this)
 {
 }
 
-TimeInputType::~TimeInputType()
+BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType()
 {
     if (m_dateTimeEditElement)
         m_dateTimeEditElement->removeEditControlOwner();
 }
 
-void TimeInputType::blur()
+void BaseMultipleFieldsDateAndTimeInputType::blur()
 {
     if (m_dateTimeEditElement)
         m_dateTimeEditElement->blurByOwner();
 }
 
-RenderObject* TimeInputType::createRenderer(RenderArena* arena, RenderStyle* style) const
+RenderObject* BaseMultipleFieldsDateAndTimeInputType::createRenderer(RenderArena* arena, RenderStyle* style) const
 {
     return InputType::createRenderer(arena, style);
 }
 
-void TimeInputType::createShadowSubtree()
+void BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree()
 {
     ASSERT(element()->shadow());
 
@@ -225,7 +134,7 @@
     updateInnerTextValue();
 }
 
-void TimeInputType::destroyShadowSubtree()
+void BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree()
 {
     if (m_dateTimeEditElement) {
         m_dateTimeEditElement->removeEditControlOwner();
@@ -234,56 +143,56 @@
     BaseDateAndTimeInputType::destroyShadowSubtree();
 }
 
-void TimeInputType::focus(bool)
+void BaseMultipleFieldsDateAndTimeInputType::focus(bool)
 {
     if (m_dateTimeEditElement)
         m_dateTimeEditElement->focusByOwner();
 }
 
-void TimeInputType::forwardEvent(Event* event)
+void BaseMultipleFieldsDateAndTimeInputType::forwardEvent(Event* event)
 {
     if (m_dateTimeEditElement)
         m_dateTimeEditElement->defaultEventHandler(event);
 }
 
-void TimeInputType::disabledAttributeChanged()
+void BaseMultipleFieldsDateAndTimeInputType::disabledAttributeChanged()
 {
     if (m_dateTimeEditElement)
         m_dateTimeEditElement->disabledStateChanged();
 }
 
-void TimeInputType::handleKeydownEvent(KeyboardEvent* event)
+void BaseMultipleFieldsDateAndTimeInputType::handleKeydownEvent(KeyboardEvent* event)
 {
     forwardEvent(event);
 }
 
-bool TimeInputType::isKeyboardFocusable(KeyboardEvent*) const
+bool BaseMultipleFieldsDateAndTimeInputType::isKeyboardFocusable(KeyboardEvent*) const
 {
     return false;
 }
 
-bool TimeInputType::isMouseFocusable() const
+bool BaseMultipleFieldsDateAndTimeInputType::isMouseFocusable() const
 {
     return false;
 }
 
-void TimeInputType::minOrMaxAttributeChanged()
+void BaseMultipleFieldsDateAndTimeInputType::minOrMaxAttributeChanged()
 {
     updateInnerTextValue();
 }
 
-void TimeInputType::readonlyAttributeChanged()
+void BaseMultipleFieldsDateAndTimeInputType::readonlyAttributeChanged()
 {
     if (m_dateTimeEditElement)
         m_dateTimeEditElement->readOnlyStateChanged();
 }
 
-bool TimeInputType::isTextField() const
+bool BaseMultipleFieldsDateAndTimeInputType::isTextField() const
 {
     return false;
 }
 
-void TimeInputType::restoreFormControlState(const FormControlState& state)
+void BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState(const FormControlState& state)
 {
     if (!m_dateTimeEditElement)
         return;
@@ -294,7 +203,7 @@
     element()->setValueInternal(m_dateTimeEditElement->value(), DispatchNoEvent);
 }
 
-FormControlState TimeInputType::saveFormControlState() const
+FormControlState BaseMultipleFieldsDateAndTimeInputType::saveFormControlState() const
 {
     if (!m_dateTimeEditElement)
         return FormControlState();
@@ -302,24 +211,24 @@
     return m_dateTimeEditElement->valueAsDateTimeFieldsState().saveFormControlState();
 }
 
-void TimeInputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior)
+void BaseMultipleFieldsDateAndTimeInputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior)
 {
     InputType::setValue(sanitizedValue, valueChanged, eventBehavior);
     if (valueChanged)
         updateInnerTextValue();
 }
 
-bool TimeInputType::shouldUseInputMethod() const
+bool BaseMultipleFieldsDateAndTimeInputType::shouldUseInputMethod() const
 {
     return false;
 }
 
-void TimeInputType::stepAttributeChanged()
+void BaseMultipleFieldsDateAndTimeInputType::stepAttributeChanged()
 {
     updateInnerTextValue();
 }
 
-void TimeInputType::updateInnerTextValue()
+void BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue()
 {
     if (!m_dateTimeEditElement)
         return;
@@ -332,25 +241,13 @@
     if (!hasValue)
         setMillisecondToDateComponents(layoutParameters.stepRange.minimum().toDouble(), &date);
 
-    if (date.second() || layoutParameters.shouldHaveSecondField()) {
-        layoutParameters.dateTimeFormat = localizer.timeFormat();
-        layoutParameters.fallbackDateTimeFormat = "HH:mm:ss";
-    } else {
-        layoutParameters.dateTimeFormat = localizer.shortTimeFormat();
-        layoutParameters.fallbackDateTimeFormat = "HH:mm";
-    }
+    setupLayoutParameters(layoutParameters, date);
 
     if (hasValue)
         m_dateTimeEditElement->setValueAsDate(layoutParameters, date);
     else
         m_dateTimeEditElement->setEmptyValue(layoutParameters, date);
 }
-#else
-TimeInputType::TimeInputType(HTMLInputElement* element)
-    : BaseDateAndTimeInputType(element)
-{
-}
-#endif
 
 } // namespace WebCore
 

Modified: trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h (129728 => 129729)


--- trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h	2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h	2012-09-27 06:43:17 UTC (rev 129729)
@@ -28,43 +28,32 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef TimeInputType_h
-#define TimeInputType_h
+#ifndef BaseMultipleFieldsDateAndTimeInputType_h
+#define BaseMultipleFieldsDateAndTimeInputType_h
 
 #include "BaseDateAndTimeInputType.h"
 
-#if ENABLE(INPUT_TYPE_TIME)
-
 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
 #include "DateTimeEditElement.h"
-#endif
 
 namespace WebCore {
 
-class TimeInputType : public BaseDateAndTimeInputType {
-public:
-    static PassOwnPtr<InputType> create(HTMLInputElement*);
+class BaseMultipleFieldsDateAndTimeInputType : public BaseDateAndTimeInputType {
+protected:
+    BaseMultipleFieldsDateAndTimeInputType(HTMLInputElement*);
+    virtual ~BaseMultipleFieldsDateAndTimeInputType();
+    virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const = 0;
+    virtual void setupLayoutParameters(DateTimeEditElement::LayoutParameters&, const DateComponents&) const = 0;
 
-#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
-    virtual ~TimeInputType();
-#endif
-
 private:
-    TimeInputType(HTMLInputElement*);
-    virtual const AtomicString& formControlType() const OVERRIDE;
-    virtual DateComponents::Type dateType() const OVERRIDE;
-    virtual Decimal defaultValueForStepUp() const OVERRIDE;
-    virtual StepRange createStepRange(AnyStepHandling) const OVERRIDE;
-    virtual bool parseToDateComponentsInternal(const UChar*, unsigned length, DateComponents*) const OVERRIDE;
-    virtual bool setMillisecondToDateComponents(double, DateComponents*) const OVERRIDE;
-    virtual bool isTimeField() const OVERRIDE;
-
-#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
+    // FIXME: DateTimeEditControlOwnerImpl should be removed by moving
+    // DateTimeEditElement::EditControlOwner into base class list of
+    // BaseMultipleFieldsDateAndTimeInputType.
     class DateTimeEditControlOwnerImpl : public DateTimeEditElement::EditControlOwner {
         WTF_MAKE_NONCOPYABLE(DateTimeEditControlOwnerImpl);
 
     public:
-        DateTimeEditControlOwnerImpl(TimeInputType&);
+        DateTimeEditControlOwnerImpl(BaseMultipleFieldsDateAndTimeInputType&);
         virtual ~DateTimeEditControlOwnerImpl();
 
     private:
@@ -75,7 +64,7 @@
         virtual bool isEditControlOwnerDisabled() const OVERRIDE FINAL;
         virtual bool isEditControlOwnerReadOnly() const OVERRIDE FINAL;
 
-        TimeInputType& m_timeInputType;
+        BaseMultipleFieldsDateAndTimeInputType& m_dateAndTimeInputType;
     };
 
     friend class DateTimeEditControlOwnerImpl;
@@ -104,7 +93,6 @@
 
     DateTimeEditElement* m_dateTimeEditElement;
     DateTimeEditControlOwnerImpl m_dateTimeEditControlOwnerImpl;
-#endif
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/html/TimeInputType.cpp (129728 => 129729)


--- trunk/Source/WebCore/html/TimeInputType.cpp	2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/html/TimeInputType.cpp	2012-09-27 06:43:17 UTC (rev 129729)
@@ -41,13 +41,10 @@
 #include <wtf/PassOwnPtr.h>
 
 #if ENABLE(INPUT_TYPE_TIME)
+
 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
 #include "DateTimeFieldsState.h"
-#include "ElementShadow.h"
-#include "FormController.h"
-#include "KeyboardEvent.h"
 #include "Localizer.h"
-#include "ShadowRoot.h"
 #include <wtf/text/WTFString.h>
 #endif
 
@@ -59,6 +56,11 @@
 static const int timeDefaultStepBase = 0;
 static const int timeStepScaleFactor = 1000;
 
+TimeInputType::TimeInputType(HTMLInputElement*  element)
+    : BaseTimeInputType(element)
+{
+}
+
 PassOwnPtr<InputType> TimeInputType::create(HTMLInputElement* element)
 {
     return adoptPtr(new TimeInputType(element));
@@ -120,46 +122,8 @@
 
 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
 
-TimeInputType::DateTimeEditControlOwnerImpl::DateTimeEditControlOwnerImpl(TimeInputType& timeInputType)
-    : m_timeInputType(timeInputType)
+String TimeInputType::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
 {
-}
-
-TimeInputType::DateTimeEditControlOwnerImpl::~DateTimeEditControlOwnerImpl()
-{
-}
-
-void TimeInputType::DateTimeEditControlOwnerImpl::didBlurFromControl()
-{
-    // We don't need to call blur(). This function is called when control
-    // lost focus.
-
-    // Remove focus ring by CSS "focus" pseudo class.
-    m_timeInputType.element()->setFocus(false);
-}
-
-void TimeInputType::DateTimeEditControlOwnerImpl::didFocusOnControl()
-{
-    // We don't need to call focus(). This function is called when control
-    // got focus.
-
-    // Add focus ring by CSS "focus" pseudo class.
-    m_timeInputType.element()->setFocus(true);
-}
-
-void TimeInputType::DateTimeEditControlOwnerImpl::editControlValueChanged()
-{
-    RefPtr<HTMLInputElement> input(m_timeInputType.element());
-    input->setValueInternal(m_timeInputType.m_dateTimeEditElement->value(), DispatchNoEvent);
-    input->setNeedsStyleRecalc();
-    input->dispatchFormControlInputEvent();
-    input->dispatchFormControlChangeEvent();
-    input->notifyFormStateChanged();
-}
-
-
-String TimeInputType::DateTimeEditControlOwnerImpl::formatDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) const
-{
     if (!dateTimeFieldsState.hasHour() || !dateTimeFieldsState.hasMinute() || !dateTimeFieldsState.hasAMPM())
         return emptyString();
     if (dateTimeFieldsState.hasMillisecond() && dateTimeFieldsState.millisecond())
@@ -176,180 +140,16 @@
     return String::format("%02u:%02u", dateTimeFieldsState.hour23(), dateTimeFieldsState.minute());
 }
 
-bool TimeInputType::hasCustomFocusLogic() const
+void TimeInputType::setupLayoutParameters(DateTimeEditElement::LayoutParameters& layoutParameters, const DateComponents& date) const
 {
-    return false;
-}
-
-bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled() const
-{
-    return m_timeInputType.element()->readOnly();
-}
-
-bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly() const
-{
-    return m_timeInputType.element()->disabled();
-}
-
-TimeInputType::TimeInputType(HTMLInputElement* element)
-    : BaseDateAndTimeInputType(element)
-    , m_dateTimeEditElement(0)
-    , m_dateTimeEditControlOwnerImpl(*this)
-{
-}
-
-TimeInputType::~TimeInputType()
-{
-    if (m_dateTimeEditElement)
-        m_dateTimeEditElement->removeEditControlOwner();
-}
-
-void TimeInputType::blur()
-{
-    if (m_dateTimeEditElement)
-        m_dateTimeEditElement->blurByOwner();
-}
-
-RenderObject* TimeInputType::createRenderer(RenderArena* arena, RenderStyle* style) const
-{
-    return InputType::createRenderer(arena, style);
-}
-
-void TimeInputType::createShadowSubtree()
-{
-    ASSERT(element()->shadow());
-
-    RefPtr<DateTimeEditElement> dateTimeEditElement(DateTimeEditElement::create(element()->document(), m_dateTimeEditControlOwnerImpl));
-    m_dateTimeEditElement = dateTimeEditElement.get();
-    element()->userAgentShadowRoot()->appendChild(m_dateTimeEditElement);
-    updateInnerTextValue();
-}
-
-void TimeInputType::destroyShadowSubtree()
-{
-    if (m_dateTimeEditElement) {
-        m_dateTimeEditElement->removeEditControlOwner();
-        m_dateTimeEditElement = 0;
-    }
-    BaseDateAndTimeInputType::destroyShadowSubtree();
-}
-
-void TimeInputType::focus(bool)
-{
-    if (m_dateTimeEditElement)
-        m_dateTimeEditElement->focusByOwner();
-}
-
-void TimeInputType::forwardEvent(Event* event)
-{
-    if (m_dateTimeEditElement)
-        m_dateTimeEditElement->defaultEventHandler(event);
-}
-
-void TimeInputType::disabledAttributeChanged()
-{
-    if (m_dateTimeEditElement)
-        m_dateTimeEditElement->disabledStateChanged();
-}
-
-void TimeInputType::handleKeydownEvent(KeyboardEvent* event)
-{
-    forwardEvent(event);
-}
-
-bool TimeInputType::isKeyboardFocusable(KeyboardEvent*) const
-{
-    return false;
-}
-
-bool TimeInputType::isMouseFocusable() const
-{
-    return false;
-}
-
-void TimeInputType::minOrMaxAttributeChanged()
-{
-    updateInnerTextValue();
-}
-
-void TimeInputType::readonlyAttributeChanged()
-{
-    if (m_dateTimeEditElement)
-        m_dateTimeEditElement->readOnlyStateChanged();
-}
-
-bool TimeInputType::isTextField() const
-{
-    return false;
-}
-
-void TimeInputType::restoreFormControlState(const FormControlState& state)
-{
-    if (!m_dateTimeEditElement)
-        return;
-    DateComponents date;
-    setMillisecondToDateComponents(createStepRange(AnyIsDefaultStep).minimum().toDouble(), &date);
-    DateTimeFieldsState dateTimeFieldsState = DateTimeFieldsState::restoreFormControlState(state);
-    m_dateTimeEditElement->setValueAsDateTimeFieldsState(dateTimeFieldsState, date);
-    element()->setValueInternal(m_dateTimeEditElement->value(), DispatchNoEvent);
-}
-
-FormControlState TimeInputType::saveFormControlState() const
-{
-    if (!m_dateTimeEditElement)
-        return FormControlState();
-
-    return m_dateTimeEditElement->valueAsDateTimeFieldsState().saveFormControlState();
-}
-
-void TimeInputType::setValue(const String& sanitizedValue, bool valueChanged, TextFieldEventBehavior eventBehavior)
-{
-    InputType::setValue(sanitizedValue, valueChanged, eventBehavior);
-    if (valueChanged)
-        updateInnerTextValue();
-}
-
-bool TimeInputType::shouldUseInputMethod() const
-{
-    return false;
-}
-
-void TimeInputType::stepAttributeChanged()
-{
-    updateInnerTextValue();
-}
-
-void TimeInputType::updateInnerTextValue()
-{
-    if (!m_dateTimeEditElement)
-        return;
-
-    Localizer& localizer = element()->document()->getLocalizer(element()->computeInheritedLanguage());
-    DateTimeEditElement::LayoutParameters layoutParameters(localizer, createStepRange(AnyIsDefaultStep));
-
-    DateComponents date;
-    const bool hasValue = parseToDateComponents(element()->value(), &date);
-    if (!hasValue)
-        setMillisecondToDateComponents(layoutParameters.stepRange.minimum().toDouble(), &date);
-
     if (date.second() || layoutParameters.shouldHaveSecondField()) {
-        layoutParameters.dateTimeFormat = localizer.timeFormat();
+        layoutParameters.dateTimeFormat = layoutParameters.localizer.timeFormat();
         layoutParameters.fallbackDateTimeFormat = "HH:mm:ss";
     } else {
-        layoutParameters.dateTimeFormat = localizer.shortTimeFormat();
+        layoutParameters.dateTimeFormat = layoutParameters.localizer.shortTimeFormat();
         layoutParameters.fallbackDateTimeFormat = "HH:mm";
     }
-
-    if (hasValue)
-        m_dateTimeEditElement->setValueAsDate(layoutParameters, date);
-    else
-        m_dateTimeEditElement->setEmptyValue(layoutParameters, date);
 }
-#else
-TimeInputType::TimeInputType(HTMLInputElement* element)
-    : BaseDateAndTimeInputType(element)
-{
-}
 #endif
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/html/TimeInputType.h (129728 => 129729)


--- trunk/Source/WebCore/html/TimeInputType.h	2012-09-27 05:47:00 UTC (rev 129728)
+++ trunk/Source/WebCore/html/TimeInputType.h	2012-09-27 06:43:17 UTC (rev 129729)
@@ -31,24 +31,25 @@
 #ifndef TimeInputType_h
 #define TimeInputType_h
 
-#include "BaseDateAndTimeInputType.h"
-
 #if ENABLE(INPUT_TYPE_TIME)
-
 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
-#include "DateTimeEditElement.h"
+#include "BaseMultipleFieldsDateAndTimeInputType.h"
+#else
+#include "BaseDateAndTimeInputType.h"
 #endif
 
 namespace WebCore {
 
-class TimeInputType : public BaseDateAndTimeInputType {
-public:
-    static PassOwnPtr<InputType> create(HTMLInputElement*);
-
 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
-    virtual ~TimeInputType();
+typedef BaseMultipleFieldsDateAndTimeInputType BaseTimeInputType;
+#else
+typedef BaseDateAndTimeInputType BaseTimeInputType;
 #endif
 
+class TimeInputType : public BaseTimeInputType {
+public:
+    static PassOwnPtr<InputType> create(HTMLInputElement*);
+
 private:
     TimeInputType(HTMLInputElement*);
     virtual const AtomicString& formControlType() const OVERRIDE;
@@ -60,50 +61,9 @@
     virtual bool isTimeField() const OVERRIDE;
 
 #if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
-    class DateTimeEditControlOwnerImpl : public DateTimeEditElement::EditControlOwner {
-        WTF_MAKE_NONCOPYABLE(DateTimeEditControlOwnerImpl);
-
-    public:
-        DateTimeEditControlOwnerImpl(TimeInputType&);
-        virtual ~DateTimeEditControlOwnerImpl();
-
-    private:
-        virtual void didBlurFromControl() OVERRIDE FINAL;
-        virtual void didFocusOnControl() OVERRIDE FINAL;
-        virtual void editControlValueChanged() OVERRIDE FINAL;
-        virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const OVERRIDE FINAL;
-        virtual bool isEditControlOwnerDisabled() const OVERRIDE FINAL;
-        virtual bool isEditControlOwnerReadOnly() const OVERRIDE FINAL;
-
-        TimeInputType& m_timeInputType;
-    };
-
-    friend class DateTimeEditControlOwnerImpl;
-
-    // InputType functions
-    virtual void blur() OVERRIDE FINAL;
-    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const OVERRIDE FINAL;
-    virtual void createShadowSubtree() OVERRIDE FINAL;
-    virtual void destroyShadowSubtree() OVERRIDE FINAL;
-    virtual void disabledAttributeChanged() OVERRIDE FINAL;
-    virtual void focus(bool restorePreviousSelection) OVERRIDE FINAL;
-    virtual void forwardEvent(Event*) OVERRIDE FINAL;
-    virtual void handleKeydownEvent(KeyboardEvent*) OVERRIDE FINAL;
-    virtual bool hasCustomFocusLogic() const OVERRIDE FINAL;
-    virtual bool isKeyboardFocusable(KeyboardEvent*) const OVERRIDE FINAL;
-    virtual bool isMouseFocusable() const OVERRIDE FINAL;
-    virtual bool isTextField() const OVERRIDE FINAL;
-    virtual void minOrMaxAttributeChanged() OVERRIDE FINAL;
-    virtual void readonlyAttributeChanged() OVERRIDE FINAL;
-    virtual void restoreFormControlState(const FormControlState&) OVERRIDE FINAL;
-    virtual FormControlState saveFormControlState() const OVERRIDE FINAL;
-    virtual void setValue(const String&, bool valueChanged, TextFieldEventBehavior) OVERRIDE FINAL;
-    virtual bool shouldUseInputMethod() const OVERRIDE FINAL;
-    virtual void stepAttributeChanged() OVERRIDE FINAL;
-    virtual void updateInnerTextValue() OVERRIDE FINAL;
-
-    DateTimeEditElement* m_dateTimeEditElement;
-    DateTimeEditControlOwnerImpl m_dateTimeEditControlOwnerImpl;
+    // BaseMultipleFieldsDateAndTimeInputType functions
+    virtual String formatDateTimeFieldsState(const DateTimeFieldsState&) const OVERRIDE FINAL;
+    virtual void setupLayoutParameters(DateTimeEditElement::LayoutParameters&, const DateComponents&) const OVERRIDE FINAL;
 #endif
 };
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to