178 lines
5.0 KiB
Objective-C
178 lines
5.0 KiB
Objective-C
/*
|
|
Copyright 2011 Twitter, Inc.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this work except in compliance with the License.
|
|
You may obtain a copy of the License in the LICENSE file, or at:
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
#import "TUIAccessibility.h"
|
|
|
|
TUIAccessibilityTraits TUIAccessibilityTraitNone = 1 << 0;
|
|
TUIAccessibilityTraits TUIAccessibilityTraitButton = 1 << 1;
|
|
TUIAccessibilityTraits TUIAccessibilityTraitLink = 1 << 2;
|
|
TUIAccessibilityTraits TUIAccessibilityTraitSearchField = 1 << 3;
|
|
TUIAccessibilityTraits TUIAccessibilityTraitImage = 1 << 4;
|
|
TUIAccessibilityTraits TUIAccessibilityTraitSelected = 1 << 5;
|
|
TUIAccessibilityTraits TUIAccessibilityTraitPlaysSound = 1 << 6;
|
|
TUIAccessibilityTraits TUIAccessibilityTraitStaticText = 1 << 7;
|
|
TUIAccessibilityTraits TUIAccessibilityTraitSummaryElement = 1 << 8;
|
|
TUIAccessibilityTraits TUIAccessibilityTraitNotEnabled = 1 << 9;
|
|
TUIAccessibilityTraits TUIAccessibilityTraitUpdatesFrequently = 1 << 10;
|
|
|
|
@implementation NSObject (TUIAccessibility)
|
|
|
|
- (BOOL)isAccessibilityElement
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
- (void)setIsAccessibilityElement:(BOOL)isElement
|
|
{
|
|
|
|
}
|
|
|
|
- (NSString *)accessibilityLabel
|
|
{
|
|
return nil;
|
|
}
|
|
|
|
- (void)setAccessibilityLabel:(NSString *)label
|
|
{
|
|
|
|
}
|
|
|
|
- (NSString *)accessibilityHint
|
|
{
|
|
return nil;
|
|
}
|
|
|
|
- (void)setAccessibilityHint:(NSString *)hint
|
|
{
|
|
|
|
}
|
|
|
|
- (NSString *)accessibilityValue
|
|
{
|
|
return nil;
|
|
}
|
|
|
|
- (void)setAccessibilityValue:(NSString *)value
|
|
{
|
|
|
|
}
|
|
|
|
- (TUIAccessibilityTraits)accessibilityTraits
|
|
{
|
|
return TUIAccessibilityTraitNone;
|
|
}
|
|
|
|
- (void)setAccessibilityTraits:(TUIAccessibilityTraits)traits
|
|
{
|
|
|
|
}
|
|
|
|
- (CGRect)accessibilityFrame
|
|
{
|
|
return CGRectNull;
|
|
}
|
|
|
|
- (void)setAccessibilityFrame:(CGRect)frame
|
|
{
|
|
|
|
}
|
|
|
|
|
|
#pragma mark NSAccessibility
|
|
|
|
// This is the part where we transate TUIAccessibility values into something that NSAccessibility can understand. Hopefully.
|
|
|
|
- (NSArray *)accessibilityAttributeNames
|
|
{
|
|
static NSArray *attributes = nil;
|
|
if(attributes == nil) {
|
|
attributes = [[NSArray alloc] initWithObjects:NSAccessibilityRoleAttribute, NSAccessibilityRoleDescriptionAttribute, NSAccessibilityFocusedAttribute, NSAccessibilityParentAttribute, NSAccessibilityWindowAttribute, NSAccessibilityTopLevelUIElementAttribute, NSAccessibilityPositionAttribute, NSAccessibilitySizeAttribute, nil];
|
|
}
|
|
|
|
return attributes;
|
|
}
|
|
|
|
- (id)accessibilityAttributeValue:(NSString *)attribute
|
|
{
|
|
if([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
|
|
return @"radioButton";
|
|
} else if([attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute]) {
|
|
return @"radio button"; //NSAccessibilityRoleDescription(role, nil);
|
|
} else if([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
|
|
// Just check if the app thinks we're focused.
|
|
id focusedElement = [NSApp accessibilityAttributeValue:NSAccessibilityFocusedUIElementAttribute];
|
|
return [NSNumber numberWithBool:[focusedElement isEqual:self]];
|
|
} else if([attribute isEqualToString:NSAccessibilityParentAttribute]) {
|
|
return nil; //NSAccessibilityUnignoredAncestor(parent);
|
|
} else if([attribute isEqualToString:NSAccessibilityWindowAttribute]) {
|
|
// We're in the same window as our parent.
|
|
return nil; //[parent accessibilityAttributeValue:NSAccessibilityWindowAttribute];
|
|
} else if([attribute isEqualToString:NSAccessibilityTopLevelUIElementAttribute]) {
|
|
// We're in the same top level element as our parent.
|
|
return nil; //[parent accessibilityAttributeValue:NSAccessibilityTopLevelUIElementAttribute];
|
|
} else if([attribute isEqualToString:NSAccessibilityPositionAttribute]) {
|
|
return nil; //[NSValue valueWithPoint:[parent fauxUIElementPosition:self]];
|
|
} else if([attribute isEqualToString:NSAccessibilitySizeAttribute]) {
|
|
return nil; //[NSValue valueWithSize:[parent fauxUIElementSize:self]];
|
|
} else {
|
|
return nil;
|
|
}
|
|
}
|
|
|
|
- (BOOL)accessibilityIsAttributeSettable:(NSString *)attribute
|
|
{
|
|
if([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
|
|
return NO; //[parent isFauxUIElementFocusable:self];
|
|
} else {
|
|
return NO;
|
|
}
|
|
}
|
|
|
|
- (void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute
|
|
{
|
|
if([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
|
|
// [parent fauxUIElement:self setFocus:value];
|
|
}
|
|
}
|
|
|
|
- (NSArray *)accessibilityActionNames {
|
|
return [NSArray array];
|
|
}
|
|
|
|
- (NSString *)accessibilityActionDescription:(NSString *)action {
|
|
return nil;
|
|
}
|
|
|
|
- (void)accessibilityPerformAction:(NSString *)action {
|
|
|
|
}
|
|
|
|
- (BOOL)accessibilityIsIgnored {
|
|
return ![self isAccessibilityElement];
|
|
}
|
|
|
|
- (id)accessibilityHitTest:(NSPoint)point
|
|
{
|
|
return NSAccessibilityUnignoredAncestor(self);
|
|
}
|
|
|
|
- (id)accessibilityFocusedUIElement
|
|
{
|
|
return NSAccessibilityUnignoredAncestor(self);
|
|
}
|
|
|
|
@end
|