OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 | 46 |
47 AXListBox::~AXListBox() | 47 AXListBox::~AXListBox() |
48 { | 48 { |
49 } | 49 } |
50 | 50 |
51 PassRefPtr<AXListBox> AXListBox::create(RenderObject* renderer) | 51 PassRefPtr<AXListBox> AXListBox::create(RenderObject* renderer) |
52 { | 52 { |
53 return adoptRef(new AXListBox(renderer)); | 53 return adoptRef(new AXListBox(renderer)); |
54 } | 54 } |
55 | 55 |
56 bool AXListBox::canSetSelectedChildrenAttribute() const | |
57 { | |
58 Node* selectNode = m_renderer->node(); | |
59 if (!selectNode) | |
60 return false; | |
61 | |
62 return !toHTMLSelectElement(selectNode)->isDisabledFormControl(); | |
63 } | |
64 | |
65 void AXListBox::addChildren() | 56 void AXListBox::addChildren() |
66 { | 57 { |
67 Node* selectNode = m_renderer->node(); | 58 Node* selectNode = m_renderer->node(); |
68 if (!selectNode) | 59 if (!selectNode) |
69 return; | 60 return; |
70 | 61 |
71 m_haveChildren = true; | 62 m_haveChildren = true; |
72 | 63 |
73 const Vector<HTMLElement*>& listItems = toHTMLSelectElement(selectNode)->lis
tItems(); | 64 const Vector<HTMLElement*>& listItems = toHTMLSelectElement(selectNode)->lis
tItems(); |
74 unsigned length = listItems.size(); | 65 unsigned length = listItems.size(); |
75 for (unsigned i = 0; i < length; i++) { | 66 for (unsigned i = 0; i < length; i++) { |
76 // The cast to HTMLElement below is safe because the only other possible
listItem type | 67 // The cast to HTMLElement below is safe because the only other possible
listItem type |
77 // would be a WMLElement, but WML builds don't use accessibility feature
s at all. | 68 // would be a WMLElement, but WML builds don't use accessibility feature
s at all. |
78 AXObject* listOption = listBoxOptionAXObject(listItems[i]); | 69 AXObject* listOption = listBoxOptionAXObject(listItems[i]); |
79 if (listOption && !listOption->accessibilityIsIgnored()) | 70 if (listOption && !listOption->accessibilityIsIgnored()) |
80 m_children.append(listOption); | 71 m_children.append(listOption); |
81 } | 72 } |
82 } | 73 } |
83 | 74 |
84 void AXListBox::setSelectedChildren(AccessibilityChildrenVector& children) | |
85 { | |
86 if (!canSetSelectedChildrenAttribute()) | |
87 return; | |
88 | |
89 Node* selectNode = m_renderer->node(); | |
90 if (!selectNode) | |
91 return; | |
92 | |
93 // disable any selected options | |
94 unsigned length = m_children.size(); | |
95 for (unsigned i = 0; i < length; i++) { | |
96 AXListBoxOption* listBoxOption = toAXListBoxOption(m_children[i].get()); | |
97 if (listBoxOption->isSelected()) | |
98 listBoxOption->setSelected(false); | |
99 } | |
100 | |
101 length = children.size(); | |
102 for (unsigned i = 0; i < length; i++) { | |
103 AXObject* obj = children[i].get(); | |
104 if (obj->roleValue() != ListBoxOptionRole) | |
105 continue; | |
106 | |
107 toAXListBoxOption(obj)->setSelected(true); | |
108 } | |
109 } | |
110 | |
111 void AXListBox::selectedChildren(AccessibilityChildrenVector& result) | |
112 { | |
113 ASSERT(result.isEmpty()); | |
114 | |
115 if (!hasChildren()) | |
116 addChildren(); | |
117 | |
118 unsigned length = m_children.size(); | |
119 for (unsigned i = 0; i < length; i++) { | |
120 if (toAXListBoxOption(m_children[i].get())->isSelected()) | |
121 result.append(m_children[i]); | |
122 } | |
123 } | |
124 | |
125 AXObject* AXListBox::listBoxOptionAXObject(HTMLElement* element) const | 75 AXObject* AXListBox::listBoxOptionAXObject(HTMLElement* element) const |
126 { | 76 { |
127 // skip hr elements | 77 // skip hr elements |
128 if (!element || isHTMLHRElement(*element)) | 78 if (!element || isHTMLHRElement(*element)) |
129 return 0; | 79 return 0; |
130 | 80 |
131 AXObject* listBoxObject = m_renderer->document().axObjectCache()->getOrCreat
e(ListBoxOptionRole); | 81 AXObject* listBoxObject = m_renderer->document().axObjectCache()->getOrCreat
e(ListBoxOptionRole); |
132 toAXListBoxOption(listBoxObject)->setHTMLElement(element); | 82 toAXListBoxOption(listBoxObject)->setHTMLElement(element); |
133 | 83 |
134 return listBoxObject; | 84 return listBoxObject; |
(...skipping 24 matching lines...) Expand all Loading... |
159 } | 109 } |
160 } | 110 } |
161 | 111 |
162 if (listBoxOption && !listBoxOption->accessibilityIsIgnored()) | 112 if (listBoxOption && !listBoxOption->accessibilityIsIgnored()) |
163 return listBoxOption; | 113 return listBoxOption; |
164 | 114 |
165 return axObjectCache()->getOrCreate(m_renderer); | 115 return axObjectCache()->getOrCreate(m_renderer); |
166 } | 116 } |
167 | 117 |
168 } // namespace WebCore | 118 } // namespace WebCore |
OLD | NEW |