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

Reply via email to