Revision: 3803
http://skim-app.svn.sourceforge.net/skim-app/?rev=3803&view=rev
Author: hofman
Date: 2008-04-23 09:38:14 -0700 (Wed, 23 Apr 2008)
Log Message:
-----------
Use custom KVC to get accessibility attributes for annotations. Use button role
for anchored notes.
Modified Paths:
--------------
trunk/PDFAnnotation_SKExtensions.m
trunk/SKAccessibilityPDFAnnotationElement.m
trunk/SKPDFAnnotationNote.m
Modified: trunk/PDFAnnotation_SKExtensions.m
===================================================================
--- trunk/PDFAnnotation_SKExtensions.m 2008-04-23 14:55:04 UTC (rev 3802)
+++ trunk/PDFAnnotation_SKExtensions.m 2008-04-23 16:38:14 UTC (rev 3803)
@@ -643,10 +643,6 @@
return NSAccessibilityLinkRole;
}
-- (id)accessibilityRoleDescriptionAttribute {
- return NSAccessibilityRoleDescription([self accessibilityRoleAttribute],
nil);
-}
-
- (id)accessibilityTitleAttribute {
NSString *title = nil;
if (originalToolTip != NULL)
@@ -664,20 +660,4 @@
return [[[self page] selectionForRect:NSInsetRect([self bounds], -3.0,
-3.0)] string];
}
-- (id)accessibilitySelectedTextAttribute {
- return nil;
-}
-
-- (id)accessibilitySelectedTextRangeAttribute {
- return nil;
-}
-
-- (id)accessibilityNumberOfCharactersAttribute {
- return nil;
-}
-
-- (id)accessibilityVisibleCharacterRangeAttribute {
- return nil;
-}
-
@end
Modified: trunk/SKAccessibilityPDFAnnotationElement.m
===================================================================
--- trunk/SKAccessibilityPDFAnnotationElement.m 2008-04-23 14:55:04 UTC (rev
3802)
+++ trunk/SKAccessibilityPDFAnnotationElement.m 2008-04-23 16:38:14 UTC (rev
3803)
@@ -42,7 +42,14 @@
#import "PDFDisplayView_SKExtensions.h"
#import "SKStringConstants.h"
+static NSString *SKAttributeWithoutAXPrefix(NSString *attribute) {
+ return [attribute hasPrefix:@"AX"] ? [attribute substringFromIndex:2] :
attribute;
+}
+static SEL SKAttributeGetter(NSString *attribute) {
+ return NSSelectorFromString([NSString stringWithFormat:@"[EMAIL
PROTECTED]", SKAttributeWithoutAXPrefix(attribute)]);
+}
+
@implementation SKAccessibilityPDFAnnotationElement
+ (id)elementWithAnnotation:(PDFAnnotation *)anAnnotation parent:(id)aParent {
@@ -81,25 +88,7 @@
}
- (id)accessibilityAttributeValue:(NSString *)attribute {
- if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
- return [annotation accessibilityRoleAttribute];
- } else if ([attribute
isEqualToString:NSAccessibilityRoleDescriptionAttribute]) {
- return [annotation accessibilityRoleDescriptionAttribute];
- } else if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {
- return [annotation accessibilityValueAttribute];
- } else if ([attribute isEqualToString:NSAccessibilityTitleAttribute]) {
- return [annotation accessibilityTitleAttribute];
- } else if ([attribute
isEqualToString:NSAccessibilitySelectedTextAttribute]) {
- return [annotation accessibilitySelectedTextAttribute];
- } else if ([attribute
isEqualToString:NSAccessibilitySelectedTextRangeAttribute]) {
- return [annotation accessibilitySelectedTextRangeAttribute];
- } else if ([attribute
isEqualToString:NSAccessibilityNumberOfCharactersAttribute]) {
- return [annotation accessibilityNumberOfCharactersAttribute];
- } else if ([attribute
isEqualToString:NSAccessibilityVisibleCharacterRangeAttribute]) {
- return [annotation accessibilityVisibleCharacterRangeAttribute];
- } else if ([attribute isEqualToString:NSAccessibilityURLAttribute]) {
- return [annotation accessibilityURLAttribute];
- } else if ([attribute isEqualToString:NSAccessibilityParentAttribute]) {
+ if ([attribute isEqualToString:NSAccessibilityParentAttribute]) {
return NSAccessibilityUnignoredAncestor(parent);
} else if ([attribute isEqualToString:NSAccessibilityWindowAttribute]) {
// We're in the same window as our parent.
@@ -115,6 +104,9 @@
return [NSValue valueWithPoint:[parent
screenRectForAnnotation:annotation].origin];
} else if ([attribute isEqualToString:NSAccessibilitySizeAttribute]) {
return [NSValue valueWithSize:[parent
screenRectForAnnotation:annotation].size];
+ } else if ([[annotation accessibilityAttributeNames]
containsObject:attribute]) {
+ SEL getter = SKAttributeGetter(attribute);
+ return [annotation respondsToSelector:getter] ? [annotation
performSelector:getter] : nil;
} else {
return nil;
}
Modified: trunk/SKPDFAnnotationNote.m
===================================================================
--- trunk/SKPDFAnnotationNote.m 2008-04-23 14:55:04 UTC (rev 3802)
+++ trunk/SKPDFAnnotationNote.m 2008-04-23 16:38:14 UTC (rev 3803)
@@ -295,7 +295,45 @@
else
return [[NSScriptCoercionHandler sharedCoercionHandler]
coerceValue:value toClass:[NSTextStorage class]];
}
+#pragma mark Accessibility
+- (NSArray *)accessibilityAttributeNames {
+ static NSArray *attributes = nil;
+ if (attributes == nil) {
+ attributes = [[NSArray alloc] initWithObjects:
+ NSAccessibilityRoleAttribute,
+ NSAccessibilityRoleDescriptionAttribute,
+ NSAccessibilityTitleAttribute,
+ NSAccessibilityValueAttribute,
+ NSAccessibilityDescriptionAttribute,
+ NSAccessibilityParentAttribute,
+ NSAccessibilityWindowAttribute,
+ NSAccessibilityTopLevelUIElementAttribute,
+ NSAccessibilityFocusedAttribute,
+ NSAccessibilityEnabledAttribute,
+ NSAccessibilityPositionAttribute,
+ NSAccessibilitySizeAttribute,
+ nil];
+ }
+ return attributes;
+}
+
+- (id)accessibilityRoleAttribute {
+ return NSAccessibilityButtonRole;
+}
+
+- (id)accessibilityTitleAttribute {
+ return [self string];
+}
+
+- (id)accessibilityValueAttribute {
+ return [self contents];
+}
+
+- (id)accessibilityDescriptionAttribute {
+ return [[self type] typeName];
+}
+
@end
#pragma mark -
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