1 /* 2 * Copyright (C) 2009 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 14 * its contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include "config.h" 30 #include "core/accessibility/AXARIAGridCell.h" 31 32 #include "core/accessibility/AXTable.h" 33 #include "core/accessibility/AXTableRow.h" 34 35 36 namespace blink { 37 38 AXARIAGridCell::AXARIAGridCell(RenderObject* renderer) 39 : AXTableCell(renderer) 40 { 41 } 42 43 AXARIAGridCell::~AXARIAGridCell() 44 { 45 } 46 47 PassRefPtr<AXARIAGridCell> AXARIAGridCell::create(RenderObject* renderer) 48 { 49 return adoptRef(new AXARIAGridCell(renderer)); 50 } 51 52 AXObject* AXARIAGridCell::parentTable() const 53 { 54 AXObject* parent = parentObjectUnignored(); 55 if (!parent) 56 return 0; 57 58 if (parent->isAXTable()) 59 return parent; 60 61 // It could happen that we hadn't reached the parent table yet (in 62 // case objects for rows were not ignoring accessibility) so for 63 // that reason we need to run parentObjectUnignored once again. 64 parent = parent->parentObjectUnignored(); 65 if (!parent || !parent->isAXTable()) 66 return 0; 67 68 return parent; 69 } 70 71 void AXARIAGridCell::rowIndexRange(pair<unsigned, unsigned>& rowRange) 72 { 73 AXObject* parent = parentObjectUnignored(); 74 if (!parent) 75 return; 76 77 if (parent->isTableRow()) { 78 // We already got a table row, use its API. 79 rowRange.first = toAXTableRow(parent)->rowIndex(); 80 } else if (parent->isAXTable()) { 81 // We reached the parent table, so we need to inspect its 82 // children to determine the row index for the cell in it. 83 unsigned columnCount = toAXTable(parent)->columnCount(); 84 if (!columnCount) 85 return; 86 87 AccessibilityChildrenVector siblings = parent->children(); 88 unsigned childrenSize = siblings.size(); 89 for (unsigned k = 0; k < childrenSize; ++k) { 90 if (siblings[k].get() == this) { 91 rowRange.first = k / columnCount; 92 break; 93 } 94 } 95 } 96 97 // as far as I can tell, grid cells cannot span rows 98 rowRange.second = 1; 99 } 100 101 void AXARIAGridCell::columnIndexRange(pair<unsigned, unsigned>& columnRange) 102 { 103 AXObject* parent = parentObjectUnignored(); 104 if (!parent) 105 return; 106 107 if (!parent->isTableRow() && !parent->isAXTable()) 108 return; 109 110 AccessibilityChildrenVector siblings = parent->children(); 111 unsigned childrenSize = siblings.size(); 112 for (unsigned k = 0; k < childrenSize; ++k) { 113 if (siblings[k].get() == this) { 114 columnRange.first = k; 115 break; 116 } 117 } 118 119 // as far as I can tell, grid cells cannot span columns 120 columnRange.second = 1; 121 } 122 123 } // namespace blink 124