mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1178272 - Move table semantics to a separate mozTableAccessible.mm file. r=surkov
This commit is contained in:
parent
1d5845a50c
commit
684dcdbc92
@ -13,6 +13,7 @@
|
|||||||
#import "mozAccessible.h"
|
#import "mozAccessible.h"
|
||||||
#import "mozActionElements.h"
|
#import "mozActionElements.h"
|
||||||
#import "mozHTMLAccessible.h"
|
#import "mozHTMLAccessible.h"
|
||||||
|
#import "mozTableAccessible.h"
|
||||||
#import "mozTextAccessible.h"
|
#import "mozTextAccessible.h"
|
||||||
|
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
@ -62,6 +63,15 @@ AccessibleWrap::GetNativeType ()
|
|||||||
if (IsXULTabpanels())
|
if (IsXULTabpanels())
|
||||||
return [mozPaneAccessible class];
|
return [mozPaneAccessible class];
|
||||||
|
|
||||||
|
if (IsTable())
|
||||||
|
return [mozTableAccessible class];
|
||||||
|
|
||||||
|
if (IsTableRow())
|
||||||
|
return [mozTableRowAccessible class];
|
||||||
|
|
||||||
|
if (IsTableCell())
|
||||||
|
return [mozTableCellAccessible class];
|
||||||
|
|
||||||
return GetTypeFromRole(Role());
|
return GetTypeFromRole(Role());
|
||||||
|
|
||||||
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
|
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include "Platform.h"
|
#include "Platform.h"
|
||||||
#include "ProxyAccessible.h"
|
#include "ProxyAccessible.h"
|
||||||
|
#include "mozTableAccessible.h"
|
||||||
|
|
||||||
#include "nsAppShell.h"
|
#include "nsAppShell.h"
|
||||||
|
|
||||||
@ -38,7 +39,18 @@ void
|
|||||||
ProxyCreated(ProxyAccessible* aProxy, uint32_t)
|
ProxyCreated(ProxyAccessible* aProxy, uint32_t)
|
||||||
{
|
{
|
||||||
// Pass in dummy state for now as retrieving proxy state requires IPC.
|
// Pass in dummy state for now as retrieving proxy state requires IPC.
|
||||||
Class type = GetTypeFromRole(aProxy->Role());
|
// Note that we can use ProxyAccessible::IsTable* functions here because they
|
||||||
|
// do not use IPC calls but that might change after bug 1210477.
|
||||||
|
Class type;
|
||||||
|
if (aProxy->IsTable())
|
||||||
|
type = [mozTableAccessible class];
|
||||||
|
else if (aProxy->IsTableRow())
|
||||||
|
type = [mozTableRowAccessible class];
|
||||||
|
else if (aProxy->IsTableCell())
|
||||||
|
type = [mozTableCellAccessible class];
|
||||||
|
else
|
||||||
|
type = GetTypeFromRole(aProxy->Role());
|
||||||
|
|
||||||
uintptr_t accWrap = reinterpret_cast<uintptr_t>(aProxy) | IS_PROXY;
|
uintptr_t accWrap = reinterpret_cast<uintptr_t>(aProxy) | IS_PROXY;
|
||||||
mozAccessible* mozWrapper = [[type alloc] initWithAccessible:accWrap];
|
mozAccessible* mozWrapper = [[type alloc] initWithAccessible:accWrap];
|
||||||
aProxy->SetWrapper(reinterpret_cast<uintptr_t>(mozWrapper));
|
aProxy->SetWrapper(reinterpret_cast<uintptr_t>(mozWrapper));
|
||||||
|
@ -21,6 +21,7 @@ UNIFIED_SOURCES += [
|
|||||||
'mozActionElements.mm',
|
'mozActionElements.mm',
|
||||||
'mozDocAccessible.mm',
|
'mozDocAccessible.mm',
|
||||||
'mozHTMLAccessible.mm',
|
'mozHTMLAccessible.mm',
|
||||||
|
'mozTableAccessible.mm',
|
||||||
'mozTextAccessible.mm',
|
'mozTextAccessible.mm',
|
||||||
'Platform.mm',
|
'Platform.mm',
|
||||||
'RootAccessibleWrap.mm',
|
'RootAccessibleWrap.mm',
|
||||||
|
@ -224,42 +224,6 @@ ConvertToNSArray(nsTArray<ProxyAccessible*>& aArray)
|
|||||||
NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(NO);
|
NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(NO);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)isLayoutTablePart
|
|
||||||
{
|
|
||||||
if (AccessibleWrap* accWrap = [self getGeckoAccessible]) {
|
|
||||||
TableAccessible* table = nullptr;
|
|
||||||
if (accWrap->IsTable()) {
|
|
||||||
table = accWrap->AsTable();
|
|
||||||
} else if (accWrap->IsTableRow()) {
|
|
||||||
for (Accessible* acc = accWrap; acc; acc = acc->Parent()) {
|
|
||||||
if (acc->IsTable()) {
|
|
||||||
table = acc->AsTable();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (accWrap->IsTableCell()) {
|
|
||||||
table = accWrap->AsTableCell()->Table();
|
|
||||||
}
|
|
||||||
return table && table->IsProbablyLayoutTable();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ProxyAccessible* proxy = [self getProxyAccessible]) {
|
|
||||||
ProxyAccessible* tableProxy = nullptr;
|
|
||||||
if (proxy->IsTable()) {
|
|
||||||
tableProxy = proxy;
|
|
||||||
} else if (proxy->IsTableRow() || proxy->IsTableCell()) {
|
|
||||||
for (tableProxy = proxy; tableProxy; tableProxy = tableProxy->Parent()) {
|
|
||||||
if (tableProxy->IsTable()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return tableProxy && tableProxy->TableIsProbablyForLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray*)additionalAccessibilityAttributeNames
|
- (NSArray*)additionalAccessibilityAttributeNames
|
||||||
{
|
{
|
||||||
NSMutableArray* additional = [NSMutableArray array];
|
NSMutableArray* additional = [NSMutableArray array];
|
||||||
@ -316,10 +280,6 @@ ConvertToNSArray(nsTArray<ProxyAccessible*>& aArray)
|
|||||||
return [NSArray array];
|
return [NSArray array];
|
||||||
|
|
||||||
static NSArray* generalAttributes = nil;
|
static NSArray* generalAttributes = nil;
|
||||||
static NSArray* tableAttrs = nil;
|
|
||||||
static NSArray* tableRowAttrs = nil;
|
|
||||||
static NSArray* tableCellAttrs = nil;
|
|
||||||
NSMutableArray* tempArray = nil;
|
|
||||||
|
|
||||||
if (!generalAttributes) {
|
if (!generalAttributes) {
|
||||||
// standard attributes that are shared and supported by all generic elements.
|
// standard attributes that are shared and supported by all generic elements.
|
||||||
@ -344,41 +304,8 @@ ConvertToNSArray(nsTArray<ProxyAccessible*>& aArray)
|
|||||||
nil];
|
nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tableAttrs) {
|
|
||||||
tempArray = [[NSMutableArray alloc] initWithArray:generalAttributes];
|
|
||||||
[tempArray addObject:NSAccessibilityRowCountAttribute];
|
|
||||||
[tempArray addObject:NSAccessibilityColumnCountAttribute];
|
|
||||||
[tempArray addObject:NSAccessibilityRowsAttribute];
|
|
||||||
tableAttrs = [[NSArray alloc] initWithArray:tempArray];
|
|
||||||
[tempArray release];
|
|
||||||
}
|
|
||||||
if (!tableRowAttrs) {
|
|
||||||
tempArray = [[NSMutableArray alloc] initWithArray:generalAttributes];
|
|
||||||
[tempArray addObject:NSAccessibilityIndexAttribute];
|
|
||||||
tableRowAttrs = [[NSArray alloc] initWithArray:tempArray];
|
|
||||||
[tempArray release];
|
|
||||||
}
|
|
||||||
if (!tableCellAttrs) {
|
|
||||||
tempArray = [[NSMutableArray alloc] initWithArray:generalAttributes];
|
|
||||||
[tempArray addObject:NSAccessibilityRowIndexRangeAttribute];
|
|
||||||
[tempArray addObject:NSAccessibilityColumnIndexRangeAttribute];
|
|
||||||
[tempArray addObject:NSAccessibilityRowHeaderUIElementsAttribute];
|
|
||||||
[tempArray addObject:NSAccessibilityColumnHeaderUIElementsAttribute];
|
|
||||||
tableCellAttrs = [[NSArray alloc] initWithArray:tempArray];
|
|
||||||
[tempArray release];
|
|
||||||
}
|
|
||||||
|
|
||||||
NSArray* objectAttributes = generalAttributes;
|
NSArray* objectAttributes = generalAttributes;
|
||||||
|
|
||||||
if (![self isLayoutTablePart]) {
|
|
||||||
if ((accWrap && accWrap->IsTable()) || (proxy && proxy->IsTable()))
|
|
||||||
objectAttributes = tableAttrs;
|
|
||||||
else if ((accWrap && accWrap->IsTableRow()) || (proxy && proxy->IsTableRow()))
|
|
||||||
objectAttributes = tableRowAttrs;
|
|
||||||
else if ((accWrap && accWrap->IsTableCell()) || (proxy && proxy->IsTableCell()))
|
|
||||||
objectAttributes = tableCellAttrs;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSArray* additionalAttributes = [self additionalAccessibilityAttributeNames];
|
NSArray* additionalAttributes = [self additionalAccessibilityAttributeNames];
|
||||||
if ([additionalAttributes count])
|
if ([additionalAttributes count])
|
||||||
objectAttributes = [objectAttributes arrayByAddingObjectsFromArray:additionalAttributes];
|
objectAttributes = [objectAttributes arrayByAddingObjectsFromArray:additionalAttributes];
|
||||||
@ -463,114 +390,6 @@ ConvertToNSArray(nsTArray<ProxyAccessible*>& aArray)
|
|||||||
if ([attribute isEqualToString:NSAccessibilityHelpAttribute])
|
if ([attribute isEqualToString:NSAccessibilityHelpAttribute])
|
||||||
return [self help];
|
return [self help];
|
||||||
|
|
||||||
if (accWrap) {
|
|
||||||
if (accWrap->IsTable()) {
|
|
||||||
TableAccessible* table = accWrap->AsTable();
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityRowCountAttribute])
|
|
||||||
return @(table->RowCount());
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityColumnCountAttribute])
|
|
||||||
return @(table->ColCount());
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityRowsAttribute]) {
|
|
||||||
// Create a new array with the list of table rows.
|
|
||||||
NSMutableArray* nativeArray = [[NSMutableArray alloc] init];
|
|
||||||
uint32_t totalCount = accWrap->ChildCount();
|
|
||||||
for (uint32_t i = 0; i < totalCount; i++) {
|
|
||||||
if (accWrap->GetChildAt(i)->IsTableRow()) {
|
|
||||||
mozAccessible* curNative =
|
|
||||||
GetNativeFromGeckoAccessible(accWrap->GetChildAt(i));
|
|
||||||
if (curNative)
|
|
||||||
[nativeArray addObject:GetObjectOrRepresentedView(curNative)];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nativeArray;
|
|
||||||
}
|
|
||||||
} else if (accWrap->IsTableRow()) {
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityIndexAttribute]) {
|
|
||||||
// Count the number of rows before that one to obtain the row index.
|
|
||||||
uint32_t index = 0;
|
|
||||||
Accessible* parent = accWrap->Parent();
|
|
||||||
if (parent) {
|
|
||||||
for (int32_t i = accWrap->IndexInParent() - 1; i >= 0; i--) {
|
|
||||||
if (parent->GetChildAt(i)->IsTableRow()) {
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return [NSNumber numberWithUnsignedInteger:index];
|
|
||||||
}
|
|
||||||
} else if (accWrap->IsTableCell()) {
|
|
||||||
TableCellAccessible* cell = accWrap->AsTableCell();
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityRowIndexRangeAttribute])
|
|
||||||
return [NSValue valueWithRange:NSMakeRange(cell->RowIdx(),
|
|
||||||
cell->RowExtent())];
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityColumnIndexRangeAttribute])
|
|
||||||
return [NSValue valueWithRange:NSMakeRange(cell->ColIdx(),
|
|
||||||
cell->ColExtent())];
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityRowHeaderUIElementsAttribute]) {
|
|
||||||
nsAutoTArray<Accessible*, 10> headerCells;
|
|
||||||
cell->RowHeaderCells(&headerCells);
|
|
||||||
return ConvertToNSArray(headerCells);
|
|
||||||
}
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityColumnHeaderUIElementsAttribute]) {
|
|
||||||
nsAutoTArray<Accessible*, 10> headerCells;
|
|
||||||
cell->ColHeaderCells(&headerCells);
|
|
||||||
return ConvertToNSArray(headerCells);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (proxy) {
|
|
||||||
if (proxy->IsTable()) {
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityRowCountAttribute])
|
|
||||||
return @(proxy->TableRowCount());
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityColumnCountAttribute])
|
|
||||||
return @(proxy->TableColumnCount());
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityRowsAttribute]) {
|
|
||||||
// Create a new array with the list of table rows.
|
|
||||||
NSMutableArray* nativeArray = [[NSMutableArray alloc] init];
|
|
||||||
uint32_t totalCount = proxy->ChildrenCount();
|
|
||||||
for (uint32_t i = 0; i < totalCount; i++) {
|
|
||||||
if (proxy->ChildAt(i)->IsTableRow()) {
|
|
||||||
mozAccessible* curNative =
|
|
||||||
GetNativeFromProxy(proxy->ChildAt(i));
|
|
||||||
if (curNative)
|
|
||||||
[nativeArray addObject:GetObjectOrRepresentedView(curNative)];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nativeArray;
|
|
||||||
}
|
|
||||||
} else if (proxy->IsTableRow()) {
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityIndexAttribute]) {
|
|
||||||
// Count the number of rows before that one to obtain the row index.
|
|
||||||
uint32_t index = 0;
|
|
||||||
ProxyAccessible* parent = proxy->Parent();
|
|
||||||
if (parent) {
|
|
||||||
for (int32_t i = proxy->IndexInParent() - 1; i >= 0; i--) {
|
|
||||||
if (parent->ChildAt(i)->IsTableRow()) {
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return [NSNumber numberWithUnsignedInteger:index];
|
|
||||||
}
|
|
||||||
} else if (proxy->IsTableCell()) {
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityRowIndexRangeAttribute])
|
|
||||||
return [NSValue valueWithRange:NSMakeRange(proxy->RowIdx(),
|
|
||||||
proxy->RowExtent())];
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityColumnIndexRangeAttribute])
|
|
||||||
return [NSValue valueWithRange:NSMakeRange(proxy->ColIdx(),
|
|
||||||
proxy->ColExtent())];
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityRowHeaderUIElementsAttribute]) {
|
|
||||||
nsTArray<ProxyAccessible*> headerCells;
|
|
||||||
proxy->RowHeaderCells(&headerCells);
|
|
||||||
return ConvertToNSArray(headerCells);
|
|
||||||
}
|
|
||||||
if ([attribute isEqualToString:NSAccessibilityColumnHeaderUIElementsAttribute]) {
|
|
||||||
nsTArray<ProxyAccessible*> headerCells;
|
|
||||||
proxy->ColHeaderCells(&headerCells);
|
|
||||||
return ConvertToNSArray(headerCells);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (mRole) {
|
switch (mRole) {
|
||||||
case roles::MATHML_ROOT:
|
case roles::MATHML_ROOT:
|
||||||
if ([attribute isEqualToString:NSAccessibilityMathRootRadicandAttribute])
|
if ([attribute isEqualToString:NSAccessibilityMathRootRadicandAttribute])
|
||||||
@ -942,10 +761,6 @@ ConvertToNSArray(nsTArray<ProxyAccessible*>& aArray)
|
|||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([self isLayoutTablePart]) {
|
|
||||||
return NSAccessibilityGroupRole;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role, nameRule) \
|
#define ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role, nameRule) \
|
||||||
case roles::geckoRole: \
|
case roles::geckoRole: \
|
||||||
return macRole;
|
return macRole;
|
||||||
|
28
accessible/mac/mozTableAccessible.h
Normal file
28
accessible/mac/mozTableAccessible.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim:expandtab:shiftwidth=2:tabstop=2:
|
||||||
|
*/
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
#import "mozAccessible.h"
|
||||||
|
|
||||||
|
@interface mozTablePartAccessible : mozAccessible
|
||||||
|
- (BOOL)isLayoutTablePart;
|
||||||
|
- (NSString*)role;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface mozTableAccessible : mozTablePartAccessible
|
||||||
|
- (NSArray*)additionalAccessibilityAttributeNames;
|
||||||
|
- (id)accessibilityAttributeValue:(NSString*)attribute;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface mozTableRowAccessible : mozTablePartAccessible
|
||||||
|
- (NSArray*)additionalAccessibilityAttributeNames;
|
||||||
|
- (id)accessibilityAttributeValue:(NSString*)attribute;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface mozTableCellAccessible : mozTablePartAccessible
|
||||||
|
- (NSArray*)additionalAccessibilityAttributeNames;
|
||||||
|
- (id)accessibilityAttributeValue:(NSString*)attribute;
|
||||||
|
@end
|
240
accessible/mac/mozTableAccessible.mm
Normal file
240
accessible/mac/mozTableAccessible.mm
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
/* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim:expandtab:shiftwidth=2:tabstop=2:
|
||||||
|
*/
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
#import "mozTableAccessible.h"
|
||||||
|
#import "nsCocoaUtils.h"
|
||||||
|
|
||||||
|
@implementation mozTablePartAccessible
|
||||||
|
- (BOOL)isLayoutTablePart;
|
||||||
|
{
|
||||||
|
if (Accessible* accWrap = [self getGeckoAccessible]) {
|
||||||
|
while (accWrap) {
|
||||||
|
if (accWrap->IsTable()) {
|
||||||
|
return accWrap->AsTable()->IsProbablyLayoutTable();
|
||||||
|
}
|
||||||
|
accWrap = accWrap->Parent();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ProxyAccessible* proxy = [self getProxyAccessible]) {
|
||||||
|
while (proxy) {
|
||||||
|
if (proxy->IsTable()) {
|
||||||
|
return proxy->TableIsProbablyForLayout();
|
||||||
|
}
|
||||||
|
proxy = proxy->Parent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*)role
|
||||||
|
{
|
||||||
|
return [self isLayoutTablePart] ? NSAccessibilityGroupRole : [super role];
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation mozTableAccessible
|
||||||
|
- (NSArray*)additionalAccessibilityAttributeNames
|
||||||
|
{
|
||||||
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
|
||||||
|
|
||||||
|
NSArray* additionalAttributes = [super additionalAccessibilityAttributeNames];
|
||||||
|
if ([self isLayoutTablePart]) {
|
||||||
|
return additionalAttributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSArray* tableAttrs = nil;
|
||||||
|
if (!tableAttrs) {
|
||||||
|
NSMutableArray* tempArray = [NSMutableArray new];
|
||||||
|
[tempArray addObject:NSAccessibilityRowCountAttribute];
|
||||||
|
[tempArray addObject:NSAccessibilityColumnCountAttribute];
|
||||||
|
[tempArray addObject:NSAccessibilityRowsAttribute];
|
||||||
|
tableAttrs = [[NSArray alloc] initWithArray:tempArray];
|
||||||
|
[tempArray release];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [additionalAttributes arrayByAddingObjectsFromArray:tableAttrs];
|
||||||
|
|
||||||
|
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)accessibilityAttributeValue:(NSString*)attribute
|
||||||
|
{
|
||||||
|
if (AccessibleWrap* accWrap = [self getGeckoAccessible]) {
|
||||||
|
TableAccessible* table = accWrap->AsTable();
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityRowCountAttribute])
|
||||||
|
return @(table->RowCount());
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityColumnCountAttribute])
|
||||||
|
return @(table->ColCount());
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityRowsAttribute]) {
|
||||||
|
// Create a new array with the list of table rows.
|
||||||
|
NSMutableArray* nativeArray = [[NSMutableArray alloc] init];
|
||||||
|
uint32_t totalCount = accWrap->ChildCount();
|
||||||
|
for (uint32_t i = 0; i < totalCount; i++) {
|
||||||
|
if (accWrap->GetChildAt(i)->IsTableRow()) {
|
||||||
|
mozAccessible* curNative =
|
||||||
|
GetNativeFromGeckoAccessible(accWrap->GetChildAt(i));
|
||||||
|
if (curNative)
|
||||||
|
[nativeArray addObject:GetObjectOrRepresentedView(curNative)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nativeArray;
|
||||||
|
}
|
||||||
|
} else if (ProxyAccessible* proxy = [self getProxyAccessible]) {
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityRowCountAttribute])
|
||||||
|
return @(proxy->TableRowCount());
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityColumnCountAttribute])
|
||||||
|
return @(proxy->TableColumnCount());
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityRowsAttribute]) {
|
||||||
|
// Create a new array with the list of table rows.
|
||||||
|
NSMutableArray* nativeArray = [[NSMutableArray alloc] init];
|
||||||
|
uint32_t totalCount = proxy->ChildrenCount();
|
||||||
|
for (uint32_t i = 0; i < totalCount; i++) {
|
||||||
|
if (proxy->ChildAt(i)->IsTableRow()) {
|
||||||
|
mozAccessible* curNative =
|
||||||
|
GetNativeFromProxy(proxy->ChildAt(i));
|
||||||
|
if (curNative)
|
||||||
|
[nativeArray addObject:GetObjectOrRepresentedView(curNative)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nativeArray;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [super accessibilityAttributeValue:attribute];
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation mozTableRowAccessible
|
||||||
|
- (NSArray*)additionalAccessibilityAttributeNames
|
||||||
|
{
|
||||||
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
|
||||||
|
|
||||||
|
NSArray* additionalAttributes = [super additionalAccessibilityAttributeNames];
|
||||||
|
if ([self isLayoutTablePart]) {
|
||||||
|
return additionalAttributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSArray* tableRowAttrs = nil;
|
||||||
|
if (!tableRowAttrs) {
|
||||||
|
NSMutableArray* tempArray = [NSMutableArray new];
|
||||||
|
[tempArray addObject:NSAccessibilityIndexAttribute];
|
||||||
|
tableRowAttrs = [[NSArray alloc] initWithArray:tempArray];
|
||||||
|
[tempArray release];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [additionalAttributes arrayByAddingObjectsFromArray:tableRowAttrs];
|
||||||
|
|
||||||
|
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)accessibilityAttributeValue:(NSString*)attribute
|
||||||
|
{
|
||||||
|
if (AccessibleWrap* accWrap = [self getGeckoAccessible]) {
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityIndexAttribute]) {
|
||||||
|
// Count the number of rows before that one to obtain the row index.
|
||||||
|
uint32_t index = 0;
|
||||||
|
Accessible* parent = accWrap->Parent();
|
||||||
|
if (parent) {
|
||||||
|
for (int32_t i = accWrap->IndexInParent() - 1; i >= 0; i--) {
|
||||||
|
if (parent->GetChildAt(i)->IsTableRow()) {
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [NSNumber numberWithUnsignedInteger:index];
|
||||||
|
}
|
||||||
|
} else if (ProxyAccessible* proxy = [self getProxyAccessible]) {
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityIndexAttribute]) {
|
||||||
|
// Count the number of rows before that one to obtain the row index.
|
||||||
|
uint32_t index = 0;
|
||||||
|
ProxyAccessible* parent = proxy->Parent();
|
||||||
|
if (parent) {
|
||||||
|
for (int32_t i = proxy->IndexInParent() - 1; i >= 0; i--) {
|
||||||
|
if (parent->ChildAt(i)->IsTableRow()) {
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [NSNumber numberWithUnsignedInteger:index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [super accessibilityAttributeValue:attribute];
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation mozTableCellAccessible
|
||||||
|
- (NSArray*)additionalAccessibilityAttributeNames
|
||||||
|
{
|
||||||
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
|
||||||
|
|
||||||
|
NSArray* additionalAttributes = [super additionalAccessibilityAttributeNames];
|
||||||
|
if ([self isLayoutTablePart]) {
|
||||||
|
return additionalAttributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSArray* tableCellAttrs = nil;
|
||||||
|
if (!tableCellAttrs) {
|
||||||
|
NSMutableArray* tempArray = [NSMutableArray new];
|
||||||
|
[tempArray addObject:NSAccessibilityRowIndexRangeAttribute];
|
||||||
|
[tempArray addObject:NSAccessibilityColumnIndexRangeAttribute];
|
||||||
|
[tempArray addObject:NSAccessibilityRowHeaderUIElementsAttribute];
|
||||||
|
[tempArray addObject:NSAccessibilityColumnHeaderUIElementsAttribute];
|
||||||
|
tableCellAttrs = [[NSArray alloc] initWithArray:tempArray];
|
||||||
|
[tempArray release];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [additionalAttributes arrayByAddingObjectsFromArray:tableCellAttrs];
|
||||||
|
|
||||||
|
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)accessibilityAttributeValue:(NSString*)attribute
|
||||||
|
{
|
||||||
|
if (AccessibleWrap* accWrap = [self getGeckoAccessible]) {
|
||||||
|
TableCellAccessible* cell = accWrap->AsTableCell();
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityRowIndexRangeAttribute])
|
||||||
|
return [NSValue valueWithRange:NSMakeRange(cell->RowIdx(),
|
||||||
|
cell->RowExtent())];
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityColumnIndexRangeAttribute])
|
||||||
|
return [NSValue valueWithRange:NSMakeRange(cell->ColIdx(),
|
||||||
|
cell->ColExtent())];
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityRowHeaderUIElementsAttribute]) {
|
||||||
|
nsAutoTArray<Accessible*, 10> headerCells;
|
||||||
|
cell->RowHeaderCells(&headerCells);
|
||||||
|
return ConvertToNSArray(headerCells);
|
||||||
|
}
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityColumnHeaderUIElementsAttribute]) {
|
||||||
|
nsAutoTArray<Accessible*, 10> headerCells;
|
||||||
|
cell->ColHeaderCells(&headerCells);
|
||||||
|
return ConvertToNSArray(headerCells);
|
||||||
|
}
|
||||||
|
} else if (ProxyAccessible* proxy = [self getProxyAccessible]) {
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityRowIndexRangeAttribute])
|
||||||
|
return [NSValue valueWithRange:NSMakeRange(proxy->RowIdx(),
|
||||||
|
proxy->RowExtent())];
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityColumnIndexRangeAttribute])
|
||||||
|
return [NSValue valueWithRange:NSMakeRange(proxy->ColIdx(),
|
||||||
|
proxy->ColExtent())];
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityRowHeaderUIElementsAttribute]) {
|
||||||
|
nsTArray<ProxyAccessible*> headerCells;
|
||||||
|
proxy->RowHeaderCells(&headerCells);
|
||||||
|
return ConvertToNSArray(headerCells);
|
||||||
|
}
|
||||||
|
if ([attribute isEqualToString:NSAccessibilityColumnHeaderUIElementsAttribute]) {
|
||||||
|
nsTArray<ProxyAccessible*> headerCells;
|
||||||
|
proxy->ColHeaderCells(&headerCells);
|
||||||
|
return ConvertToNSArray(headerCells);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [super accessibilityAttributeValue:attribute];
|
||||||
|
}
|
||||||
|
@end
|
Loading…
Reference in New Issue
Block a user