OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). | 2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). |
3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
4 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 4 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
5 * (C) 2001 Dirk Mueller (mueller@kde.org) | 5 * (C) 2001 Dirk Mueller (mueller@kde.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights
reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights
reserved. |
7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
8 * Copyright (C) 2010 Google Inc. All rights reserved. | 8 * Copyright (C) 2010 Google Inc. All rights reserved. |
9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
10 * | 10 * |
(...skipping 58 matching lines...) Loading... |
69 , m_lastOnChangeIndex(-1) | 69 , m_lastOnChangeIndex(-1) |
70 , m_activeSelectionAnchorIndex(-1) | 70 , m_activeSelectionAnchorIndex(-1) |
71 , m_activeSelectionEndIndex(-1) | 71 , m_activeSelectionEndIndex(-1) |
72 , m_isProcessingUserDrivenChange(false) | 72 , m_isProcessingUserDrivenChange(false) |
73 , m_multiple(false) | 73 , m_multiple(false) |
74 , m_activeSelectionState(false) | 74 , m_activeSelectionState(false) |
75 , m_shouldRecalcListItems(false) | 75 , m_shouldRecalcListItems(false) |
76 , m_suggestedIndex(-1) | 76 , m_suggestedIndex(-1) |
77 { | 77 { |
78 ScriptWrappable::init(this); | 78 ScriptWrappable::init(this); |
| 79 setHasCustomStyleCallbacks(); |
79 } | 80 } |
80 | 81 |
81 PassRefPtr<HTMLSelectElement> HTMLSelectElement::create(Document& document) | 82 PassRefPtr<HTMLSelectElement> HTMLSelectElement::create(Document& document) |
82 { | 83 { |
83 return adoptRef(new HTMLSelectElement(document, 0)); | 84 return adoptRef(new HTMLSelectElement(document, 0)); |
84 } | 85 } |
85 | 86 |
86 PassRefPtr<HTMLSelectElement> HTMLSelectElement::create(Document& document, HTML
FormElement* form) | 87 PassRefPtr<HTMLSelectElement> HTMLSelectElement::create(Document& document, HTML
FormElement* form) |
87 { | 88 { |
88 return adoptRef(new HTMLSelectElement(document, form)); | 89 return adoptRef(new HTMLSelectElement(document, form)); |
(...skipping 412 matching lines...) Loading... |
501 // Otherwise, it returns |listIndex|. | 502 // Otherwise, it returns |listIndex|. |
502 // Valid means that it is enabled and an option element. | 503 // Valid means that it is enabled and an option element. |
503 int HTMLSelectElement::nextValidIndex(int listIndex, SkipDirection direction, in
t skip) const | 504 int HTMLSelectElement::nextValidIndex(int listIndex, SkipDirection direction, in
t skip) const |
504 { | 505 { |
505 ASSERT(direction == -1 || direction == 1); | 506 ASSERT(direction == -1 || direction == 1); |
506 const Vector<HTMLElement*>& listItems = this->listItems(); | 507 const Vector<HTMLElement*>& listItems = this->listItems(); |
507 int lastGoodIndex = listIndex; | 508 int lastGoodIndex = listIndex; |
508 int size = listItems.size(); | 509 int size = listItems.size(); |
509 for (listIndex += direction; listIndex >= 0 && listIndex < size; listIndex +
= direction) { | 510 for (listIndex += direction; listIndex >= 0 && listIndex < size; listIndex +
= direction) { |
510 --skip; | 511 --skip; |
511 if (!listItems[listIndex]->isDisabledFormControl() && isHTMLOptionElemen
t(*listItems[listIndex])) { | 512 HTMLElement* element = listItems[listIndex]; |
512 lastGoodIndex = listIndex; | 513 if (!isHTMLOptionElement(*element) || toHTMLOptionElement(element)->isDi
sabledFormControl() || !toHTMLOptionElement(element)->isDisplayNone()) |
513 if (skip <= 0) | 514 continue; |
514 break; | 515 lastGoodIndex = listIndex; |
515 } | 516 if (skip <= 0) |
| 517 break; |
516 } | 518 } |
517 return lastGoodIndex; | 519 return lastGoodIndex; |
518 } | 520 } |
519 | 521 |
520 int HTMLSelectElement::nextSelectableListIndex(int startIndex) const | 522 int HTMLSelectElement::nextSelectableListIndex(int startIndex) const |
521 { | 523 { |
522 return nextValidIndex(startIndex, SkipForwards, 1); | 524 return nextValidIndex(startIndex, SkipForwards, 1); |
523 } | 525 } |
524 | 526 |
525 int HTMLSelectElement::previousSelectableListIndex(int startIndex) const | 527 int HTMLSelectElement::previousSelectableListIndex(int startIndex) const |
(...skipping 92 matching lines...) Loading... |
618 { | 620 { |
619 ASSERT(renderer() && (renderer()->isListBox() || m_multiple)); | 621 ASSERT(renderer() && (renderer()->isListBox() || m_multiple)); |
620 ASSERT(!listItems().size() || m_activeSelectionAnchorIndex >= 0); | 622 ASSERT(!listItems().size() || m_activeSelectionAnchorIndex >= 0); |
621 | 623 |
622 unsigned start = min(m_activeSelectionAnchorIndex, m_activeSelectionEndIndex
); | 624 unsigned start = min(m_activeSelectionAnchorIndex, m_activeSelectionEndIndex
); |
623 unsigned end = max(m_activeSelectionAnchorIndex, m_activeSelectionEndIndex); | 625 unsigned end = max(m_activeSelectionAnchorIndex, m_activeSelectionEndIndex); |
624 | 626 |
625 const Vector<HTMLElement*>& items = listItems(); | 627 const Vector<HTMLElement*>& items = listItems(); |
626 for (unsigned i = 0; i < items.size(); ++i) { | 628 for (unsigned i = 0; i < items.size(); ++i) { |
627 HTMLElement* element = items[i]; | 629 HTMLElement* element = items[i]; |
628 if (!isHTMLOptionElement(*element) || toHTMLOptionElement(element)->isDi
sabledFormControl()) | 630 if (!isHTMLOptionElement(*element) || toHTMLOptionElement(element)->isDi
sabledFormControl() || !toHTMLOptionElement(element)->isDisplayNone()) |
629 continue; | 631 continue; |
630 | 632 |
631 if (i >= start && i <= end) | 633 if (i >= start && i <= end) |
632 toHTMLOptionElement(element)->setSelectedState(m_activeSelectionStat
e); | 634 toHTMLOptionElement(element)->setSelectedState(m_activeSelectionStat
e); |
633 else if (deselectOtherOptions || i >= m_cachedStateForActiveSelection.si
ze()) | 635 else if (deselectOtherOptions || i >= m_cachedStateForActiveSelection.si
ze()) |
634 toHTMLOptionElement(element)->setSelectedState(false); | 636 toHTMLOptionElement(element)->setSelectedState(false); |
635 else | 637 else |
636 toHTMLOptionElement(element)->setSelectedState(m_cachedStateForActiv
eSelection[i]); | 638 toHTMLOptionElement(element)->setSelectedState(m_cachedStateForActiv
eSelection[i]); |
637 } | 639 } |
638 | 640 |
(...skipping 978 matching lines...) Loading... |
1617 bool HTMLSelectElement::isInteractiveContent() const | 1619 bool HTMLSelectElement::isInteractiveContent() const |
1618 { | 1620 { |
1619 return true; | 1621 return true; |
1620 } | 1622 } |
1621 | 1623 |
1622 bool HTMLSelectElement::supportsAutofocus() const | 1624 bool HTMLSelectElement::supportsAutofocus() const |
1623 { | 1625 { |
1624 return true; | 1626 return true; |
1625 } | 1627 } |
1626 | 1628 |
| 1629 void HTMLSelectElement::updateListOnRenderer() |
| 1630 { |
| 1631 setOptionsChangedOnRenderer(); |
| 1632 } |
| 1633 |
| 1634 void HTMLSelectElement::didRecalcStyle(StyleRecalcChange) |
| 1635 { |
| 1636 if (RenderObject* renderer = this->renderer()) |
| 1637 renderer->updateFromElement(); |
| 1638 } |
| 1639 |
1627 } // namespace | 1640 } // namespace |
OLD | NEW |