Revision: 3750
http://skim-app.svn.sourceforge.net/skim-app/?rev=3750&view=rev
Author: hofman
Date: 2008-04-18 03:09:16 -0700 (Fri, 18 Apr 2008)
Log Message:
-----------
Initial attempt to add accessibility to color swatch. Does not yet seem to work.
Modified Paths:
--------------
trunk/SKColorSwatch.m
Modified: trunk/SKColorSwatch.m
===================================================================
--- trunk/SKColorSwatch.m 2008-04-17 22:07:08 UTC (rev 3749)
+++ trunk/SKColorSwatch.m 2008-04-18 10:09:16 UTC (rev 3750)
@@ -49,6 +49,17 @@
static NSString *SKColorSwatchColorsObservationContext =
@"SKColorSwatchColorsObservationContext";
+
[EMAIL PROTECTED] SKAccessibilityColorWellElement : NSObject {
+ int index;
+ SKColorSwatch *colorSwatch;
+}
+- (id)initWithIndex:(int)anIndex colorSwatch:(SKColorSwatch *)aColorSwatch;
+- (int)index;
+- (SKColorSwatch *)colorSwatch;
[EMAIL PROTECTED]
+
+
@implementation SKColorSwatch
+ (void)initialize {
@@ -528,4 +539,192 @@
return YES;
}
+#pragma mark Accessibility
+
+- (NSArray *)accessibilityAttributeNames {
+ static NSArray *attributes = nil;
+ if (attributes == nil) {
+ attributes = [[NSArray alloc] initWithObjects:
+ NSAccessibilityRoleAttribute,
+ NSAccessibilityRoleDescriptionAttribute,
+ NSAccessibilityChildrenAttribute,
+ NSAccessibilityParentAttribute,
+ NSAccessibilityWindowAttribute,
+ NSAccessibilityTopLevelUIElementAttribute,
+ nil];
+ }
+ return attributes;
+}
+
+- (id)accessibilityAttributeValue:(NSString *)attribute {
+ if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
+ return NSAccessibilityGroupRole;
+ } else if ([attribute
isEqualToString:NSAccessibilityRoleDescriptionAttribute]) {
+ return NSAccessibilityRoleDescriptionForUIElement(self);
+ } else if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) {
+ NSMutableArray *children = [NSMutableArray array];
+ int i, count = [colors count];
+ for (i = 0; i < count; i++)
+ [children addObject:[[[SKAccessibilityColorWellElement alloc]
initWithIndex:i colorSwatch:self] autorelease]];
+ return NSAccessibilityUnignoredChildren(children);
+ } else if ([attribute isEqualToString:NSAccessibilityParentAttribute]) {
+ id parent = [self superview];
+ if (parent == nil)
+ parent = [self window];
+ return NSAccessibilityUnignoredAncestor(parent);
+ } else if ([attribute isEqualToString:NSAccessibilityWindowAttribute]) {
+ id parent = [self superview];
+ if (parent == nil)
+ parent = [self window];
+ return [NSAccessibilityUnignoredAncestor(parent)
accessibilityAttributeValue:NSAccessibilityWindowAttribute];
+ } else if ([attribute
isEqualToString:NSAccessibilityTopLevelUIElementAttribute]) {
+ id parent = [self superview];
+ if (parent == nil)
+ parent = [self window];
+ return [NSAccessibilityUnignoredAncestor(parent)
accessibilityAttributeValue:NSAccessibilityTopLevelUIElementAttribute];
+ } else {
+ return [super accessibilityAttributeValue:attribute];
+ }
+}
+
+- (BOOL)accessibilityIsAttributeSettable:(NSString *)attribute {
+ return NO;
+}
+
+- (void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute {
+}
+
+- (BOOL)accessibilityIsIgnored {
+ return NO;
+}
+
+- (id)accessibilityHitTest:(NSPoint)point {
+ NSPoint localPoint = [self convertPoint:[[self window]
convertScreenToBase:point] fromView:nil];
+ int i = [self colorIndexAtPoint:localPoint];
+ if (i != -1) {
+ SKAccessibilityColorWellElement *color =
[[[SKAccessibilityColorWellElement alloc] initWithIndex:i colorSwatch:self]
autorelease];
+ return [color accessibilityHitTest:point];
+ } else {
+ return [super accessibilityHitTest:point];
+ }
+}
+
+- (id)accessibilityFocusedUIElement {
+ if (focusedIndex != -1 && focusedIndex < (int)[colors count])
+ return
NSAccessibilityUnignoredAncestor([[[SKAccessibilityColorWellElement alloc]
initWithIndex:focusedIndex colorSwatch:self] autorelease]);
+ else
+ return NSAccessibilityUnignoredAncestor(self);
+}
+
+- (BOOL)isElementFocused:(SKAccessibilityColorWellElement *)element {
+ return focusedIndex == [element index];
+}
+
@end
+
+#pragma mark -
+
[EMAIL PROTECTED] SKAccessibilityColorWellElement
+
+- (id)initWithIndex:(int)anIndex colorSwatch:(SKColorSwatch *)aColorSwatch {
+ if (self = [super init]) {
+ index = anIndex;
+ colorSwatch = aColorSwatch;
+ }
+ return self;
+}
+
+- (BOOL)isEqual:(id)object {
+ if ([object isKindOfClass:[SKAccessibilityColorWellElement class]]) {
+ SKAccessibilityColorWellElement *other = object;
+ return index == [other index] && [colorSwatch isEqual:[other
colorSwatch]];
+ } else {
+ return NO;
+ }
+}
+
+- (unsigned)hash {
+ // Equal objects must hash the same.
+ return index + [colorSwatch hash];
+}
+
+- (int)index {
+ return index;
+}
+
+- (SKColorSwatch *)colorSwatch {
+ return colorSwatch;
+}
+
+- (NSArray *)accessibilityAttributeNames {
+ static NSArray *attributes = nil;
+ if (attributes == nil) {
+ attributes = [[NSArray alloc] initWithObjects:
+ NSAccessibilityRoleAttribute,
+ NSAccessibilityRoleDescriptionAttribute,
+ NSAccessibilityValueAttribute,
+ NSAccessibilityParentAttribute,
+ NSAccessibilityWindowAttribute,
+ NSAccessibilityTopLevelUIElementAttribute,
+ NSAccessibilityFocusedAttribute,
+ NSAccessibilityPositionAttribute,
+ NSAccessibilitySizeAttribute,
+ nil];
+ }
+ return attributes;
+}
+
+- (id)accessibilityAttributeValue:(NSString *)attribute {
+ if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
+ return NSAccessibilityButtonRole;
+ } else if ([attribute
isEqualToString:NSAccessibilityRoleDescriptionAttribute]) {
+ return NSAccessibilityRoleDescriptionForUIElement(self);
+ } else if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {
+ return [[colorSwatch colors] objectAtIndex:index];
+ } else if ([attribute isEqualToString:NSAccessibilityParentAttribute]) {
+ return NSAccessibilityUnignoredAncestor(colorSwatch);
+ } else if ([attribute isEqualToString:NSAccessibilityWindowAttribute]) {
+ // We're in the same window as our parent.
+ return [NSAccessibilityUnignoredAncestor(colorSwatch)
accessibilityAttributeValue:NSAccessibilityWindowAttribute];
+ } else if ([attribute
isEqualToString:NSAccessibilityTopLevelUIElementAttribute]) {
+ // We're in the same top level element as our parent.
+ return [NSAccessibilityUnignoredAncestor(colorSwatch)
accessibilityAttributeValue:NSAccessibilityTopLevelUIElementAttribute];
+ } else if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
+ return [NSNumber numberWithBool:[colorSwatch isElementFocused:self]];
+ } else if ([attribute isEqualToString:NSAccessibilityPositionAttribute]) {
+ NSRect rect = NSInsetRect([colorSwatch bounds], 1.0, 1.0);
+ rect.size.width = NSHeight(rect);
+ rect.origin.x += index * (NSWidth(rect) - 1.0);
+ rect.origin = [colorSwatch convertPoint:rect.origin toView:nil];
+ return [NSValue valueWithPoint:rect.origin];
+ } else if ([attribute isEqualToString:NSAccessibilitySizeAttribute]) {
+ NSRect rect = NSInsetRect([colorSwatch bounds], 1.0, 1.0);
+ rect.size.width = NSHeight(rect);
+ rect.origin.x += index * (NSWidth(rect) - 1.0);
+ rect.size = [colorSwatch convertSize:rect.size toView:nil];
+ return [NSValue valueWithSize:rect.size];
+ } else {
+ return nil;
+ }
+}
+
+- (BOOL)accessibilityIsAttributeSettable:(NSString *)attribute {
+ return NO;
+}
+
+- (void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute {
+}
+
+- (BOOL)accessibilityIsIgnored {
+ return NO;
+}
+
+- (id)accessibilityHitTest:(NSPoint)point {
+ return NSAccessibilityUnignoredAncestor(self);
+}
+
+- (id)accessibilityFocusedUIElement {
+ return NSAccessibilityUnignoredAncestor(self);
+}
+
[EMAIL PROTECTED]
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit