void DateTimeNumericFieldElement::stepUp() { if (m_hasValue) setValueAsInteger(m_value == m_range.maximum ? m_range.minimum : clampValue(m_value + 1), DispatchEvent); else setValueAsInteger(m_range.minimum, DispatchEvent); }
void DateTimeNumericFieldElement::stepDown() { if (m_hasValue) setValueAsInteger(m_value == m_range.minimum ? m_range.maximum : clampValue(m_value - 1), DispatchEvent); else setValueAsInteger(defaultValueForStepDown(), DispatchEvent); }
void DateTimeAMPMFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState, const DateComponents& dateForReadOnlyField) { if (dateTimeFieldsState.hasAMPM()) setValueAsInteger(dateTimeFieldsState.ampm()); else setEmptyValue(dateForReadOnlyField); }
void DateTimeAMPMFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) { if (dateTimeFieldsState.hasAMPM()) setValueAsInteger(dateTimeFieldsState.ampm()); else setEmptyValue(); }
void DateTimeNumericFieldElement::handleKeyboardEvent(KeyboardEvent* keyboardEvent) { if (isReadOnly()) return; if (keyboardEvent->type() != eventNames().keypressEvent) return; UChar charCode = static_cast<UChar>(keyboardEvent->charCode()); if (charCode < ' ') return; DOMTimeStamp delta = keyboardEvent->timeStamp() - m_lastDigitCharTime; m_lastDigitCharTime = 0; String number = convertFromLocalizedNumber(String(&charCode, 1)); const int digit = number[0] - '0'; if (digit < 0 || digit > 9) return; keyboardEvent->setDefaultHandled(); setValueAsInteger(m_hasValue && delta < typeAheadTimeout ? m_value * 10 + digit : digit, DispatchEvent); if (m_value * 10 > m_range.maximum) focusOnNextField(); else m_lastDigitCharTime = keyboardEvent->timeStamp(); }
void DateTimeNumericFieldElement::handleKeyboardEvent(KeyboardEvent* keyboardEvent) { ASSERT(!isDisabled()); if (keyboardEvent->type() != EventTypeNames::keypress) return; UChar charCode = static_cast<UChar>(keyboardEvent->charCode()); String number = localeForOwner().convertFromLocalizedNumber(String(&charCode, 1)); const int digit = number[0] - '0'; if (digit < 0 || digit > 9) return; DOMTimeStamp delta = keyboardEvent->timeStamp() - m_lastDigitCharTime; m_lastDigitCharTime = keyboardEvent->timeStamp(); if (delta > typeAheadTimeout) m_typeAheadBuffer.clear(); m_typeAheadBuffer.append(number); int newValue = typeAheadValue(); if (newValue >= m_hardLimits.minimum) setValueAsInteger(newValue, DispatchEvent); else { m_hasValue = false; updateVisibleValue(DispatchEvent); } if (m_typeAheadBuffer.length() >= DateTimeNumericFieldElement::formatValue(m_range.maximum).length() || newValue * 10 > m_range.maximum) focusOnNextField(); keyboardEvent->setDefaultHandled(); }
void DateTimeNumericFieldElement::stepUp() { int newValue = roundUp(m_hasValue ? m_value + 1 : defaultValueForStepUp()); if (!m_range.isInRange(newValue)) newValue = roundUp(m_range.minimum); m_typeAheadBuffer.clear(); setValueAsInteger(newValue, DispatchEvent); }
void DateTimeNumericFieldElement::handleKeyboardEvent(KeyboardEvent* keyboardEvent) { ASSERT(!isDisabled()); if (keyboardEvent->type() != EventTypeNames::keypress) return; UChar charCode = static_cast<UChar>(keyboardEvent->charCode()); String number = localeForOwner().convertFromLocalizedNumber(String(&charCode, 1)); const int digit = number[0] - '0'; if (digit < 0 || digit > 9) return; unsigned maximumLength = DateTimeNumericFieldElement::formatValue(m_range.maximum).length(); if (m_typeAheadBuffer.length() >= maximumLength) { String current = m_typeAheadBuffer.toString(); m_typeAheadBuffer.clear(); unsigned desiredLength = maximumLength - 1; m_typeAheadBuffer.append(current, current.length() - desiredLength, desiredLength); } m_typeAheadBuffer.append(number); int newValue = typeAheadValue(); if (newValue >= m_hardLimits.minimum) setValueAsInteger(newValue, DispatchEvent); else { m_hasValue = false; updateVisibleValue(DispatchEvent); } if (m_typeAheadBuffer.length() >= maximumLength || newValue * 10 > m_range.maximum) focusOnNextField(); keyboardEvent->setDefaultHandled(); }
void DateTimeNumericFieldElement::didBlur() { int value = typeAheadValue(); m_typeAheadBuffer.clear(); if (value >= 0) setValueAsInteger(value, DispatchEvent); DateTimeFieldElement::didBlur(); }
void DateTimeNumericFieldElement::setFocused(bool value) { if (!value) { int value = typeAheadValue(); m_typeAheadBuffer.clear(); if (value >= 0) setValueAsInteger(value, DispatchEvent); } DateTimeFieldElement::setFocused(value); }
void DateTimeMinuteFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState, const DateComponents& dateForReadOnlyField) { if (!dateTimeFieldsState.hasMinute()) { setEmptyValue(dateForReadOnlyField); return; } const unsigned value = dateTimeFieldsState.minute(); if (value > static_cast<unsigned>(maximum())) { setEmptyValue(dateForReadOnlyField); return; } setValueAsInteger(value); }
void DateTimeSymbolicMonthFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) { if (!dateTimeFieldsState.hasMonth()) { setEmptyValue(); return; } const unsigned value = dateTimeFieldsState.month() - 1; if (value >= symbolsSize()) { setEmptyValue(); return; } setValueAsInteger(value); }
void DateTimeDayFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) { if (!dateTimeFieldsState.hasDayOfMonth()) { setEmptyValue(); return; } const unsigned value = dateTimeFieldsState.dayOfMonth(); if (range().isInRange(static_cast<int>(value))) { setValueAsInteger(value); return; } setEmptyValue(); }
void DateTimeYearFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState, const DateComponents& dateForReadOnlyField) { if (!dateTimeFieldsState.hasYear()) { setEmptyValue(dateForReadOnlyField); return; } const unsigned value = dateTimeFieldsState.year(); if (range().isInRange(static_cast<int>(value))) { setValueAsInteger(value); return; } setEmptyValue(dateForReadOnlyField); }
void DateTimeSecondFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState) { if (!dateTimeFieldsState.hasSecond()) { setEmptyValue(); return; } const unsigned value = dateTimeFieldsState.second(); if (value > static_cast<unsigned>(maximum())) { setEmptyValue(); return; } setValueAsInteger(value); }
void DateTimeSymbolicFieldElement::handleKeyboardEvent(KeyboardEvent* keyboardEvent) { if (keyboardEvent->type() != EventTypeNames::keypress) return; const UChar charCode = WTF::Unicode::toLower(keyboardEvent->charCode()); if (charCode < ' ') return; keyboardEvent->setDefaultHandled(); int index = m_typeAhead.handleEvent(keyboardEvent, TypeAhead::MatchPrefix | TypeAhead::CycleFirstChar | TypeAhead::MatchIndex); if (index < 0) return; setValueAsInteger(index, DispatchEvent); }
void DateTimeSymbolicMonthFieldElement::setValueAsDate(const DateComponents& date) { setValueAsInteger(date.month()); }
void DateTimeDayFieldElement::setValueAsDate(const DateComponents& date) { setValueAsInteger(date.monthDay()); }
void DateTimeAMPMFieldElement::setValueAsDate(const DateComponents& date) { setValueAsInteger(date.hour() >= 12 ? 1 : 0); }
void DateTimeYearFieldElement::setValueAsDate(const DateComponents& date) { setValueAsInteger(date.fullYear()); }
void DateTimeWeekFieldElement::setValueAsDate(const DateComponents& date) { setValueAsInteger(date.week()); }
void DateTimeHourFieldElement::setValueAsDate(const DateComponents& date) { setValueAsInteger(date.hour()); }
void DateTimeSecondFieldElement::setValueAsDate(const DateComponents& date) { setValueAsInteger(date.second()); }
void DateTimeMinuteFieldElement::setValueAsDate(const DateComponents& date) { setValueAsInteger(date.minute()); }