Revision: 3813
          http://skim-app.svn.sourceforge.net/skim-app/?rev=3813&view=rev
Author:   hofman
Date:     2008-04-24 11:57:06 -0700 (Thu, 24 Apr 2008)

Log Message:
-----------
Add convenience method to identify link annotations. Implement static text 
accessibility properties in appropriate annotation classes. 

Modified Paths:
--------------
    trunk/PDFAnnotation_SKExtensions.h
    trunk/PDFAnnotation_SKExtensions.m
    trunk/SKAccessibilityPDFAnnotationElement.m
    trunk/SKPDFAnnotationCircle.m
    trunk/SKPDFAnnotationFreeText.m
    trunk/SKPDFAnnotationLine.m
    trunk/SKPDFAnnotationMarkup.m
    trunk/SKPDFAnnotationNote.m
    trunk/SKPDFAnnotationSquare.m
    trunk/SKPDFHoverWindow.m
    trunk/SKPDFView.m

Modified: trunk/PDFAnnotation_SKExtensions.h
===================================================================
--- trunk/PDFAnnotation_SKExtensions.h  2008-04-24 17:05:28 UTC (rev 3812)
+++ trunk/PDFAnnotation_SKExtensions.h  2008-04-24 18:57:06 UTC (rev 3813)
@@ -108,6 +108,7 @@
 
 - (BOOL)isNoteAnnotation;
 - (BOOL)isMarkup;
+- (BOOL)isLink;
 - (BOOL)isResizable;
 - (BOOL)isMovable;
 - (BOOL)isEditable;
@@ -145,10 +146,5 @@
 - (id)accessibilityRoleDescriptionAttribute;
 - (id)accessibilityTitleAttribute;
 - (id)accessibilityValueAttribute;
-- (id)accessibilityURLAttribute;
-- (id)accessibilitySelectedTextAttribute;
-- (id)accessibilitySelectedTextRangeAttribute;
-- (id)accessibilityNumberOfCharactersAttribute;
-- (id)accessibilityVisibleCharacterRangeAttribute;
 
 @end

Modified: trunk/PDFAnnotation_SKExtensions.m
===================================================================
--- trunk/PDFAnnotation_SKExtensions.m  2008-04-24 17:05:28 UTC (rev 3812)
+++ trunk/PDFAnnotation_SKExtensions.m  2008-04-24 18:57:06 UTC (rev 3813)
@@ -297,6 +297,8 @@
 
 - (BOOL)isMarkup { return NO; }
 
+- (BOOL)isLink { return NO; }
+
 - (BOOL)isResizable { return NO; }
 
 - (BOOL)isMovable { return NO; }
@@ -551,17 +553,13 @@
             NSAccessibilityEnabledAttribute,
             NSAccessibilityPositionAttribute,
             NSAccessibilitySizeAttribute,
-            NSAccessibilitySelectedTextAttribute,
-            NSAccessibilitySelectedTextRangeAttribute,
-            NSAccessibilityNumberOfCharactersAttribute,
-            NSAccessibilityVisibleCharacterRangeAttribute,
             nil];
     }
     return attributes;
 }
 
 - (id)accessibilityRoleAttribute {
-    return NSAccessibilityStaticTextRole;
+    return NSAccessibilityUnknownRole;
 }
 
 - (id)accessibilityRoleDescriptionAttribute {
@@ -576,26 +574,6 @@
     return [self contents];
 }
 
-- (id)accessibilityURLAttribute {
-    return nil;
-}
-
-- (id)accessibilitySelectedTextAttribute {
-    return @"";
-}
-
-- (id)accessibilitySelectedTextRangeAttribute {
-    return [NSValue valueWithRange:NSMakeRange(0, 0)];
-}
-
-- (id)accessibilityNumberOfCharactersAttribute {
-    return [NSNumber numberWithUnsignedInt:[[self accessibilityValueAttribute] 
length]];
-}
-
-- (id)accessibilityVisibleCharacterRangeAttribute {
-    return [NSValue valueWithRange:NSMakeRange(0, [[self 
accessibilityValueAttribute] length])];
-}
-
 @end
 
 #pragma mark -
@@ -618,23 +596,12 @@
         originalToolTip = OBReplaceMethodImplementationWithSelector(self, 
@selector(toolTip), @selector(replacementToolTip));
 }
 
+- (BOOL)isLink { return YES; }
+
 - (NSArray *)accessibilityAttributeNames {
     static NSArray *attributes = nil;
     if (attributes == nil) {
-        attributes = [[NSArray alloc] initWithObjects:
-            NSAccessibilityRoleAttribute,
-            NSAccessibilityRoleDescriptionAttribute,
-            NSAccessibilityTitleAttribute,
-            NSAccessibilityValueAttribute,
-            NSAccessibilityURLAttribute,
-            NSAccessibilityParentAttribute,
-            NSAccessibilityWindowAttribute,
-            NSAccessibilityTopLevelUIElementAttribute,
-            NSAccessibilityFocusedAttribute,
-            NSAccessibilityEnabledAttribute,
-            NSAccessibilityPositionAttribute,
-            NSAccessibilitySizeAttribute,
-            nil];
+        attributes = [[[super accessibilityAttributeNames] 
arrayByAddingObject:NSAccessibilityURLAttribute] retain];
     }
     return attributes;
 }

Modified: trunk/SKAccessibilityPDFAnnotationElement.m
===================================================================
--- trunk/SKAccessibilityPDFAnnotationElement.m 2008-04-24 17:05:28 UTC (rev 
3812)
+++ trunk/SKAccessibilityPDFAnnotationElement.m 2008-04-24 18:57:06 UTC (rev 
3813)
@@ -99,7 +99,7 @@
     } else if ([attribute isEqualToString:NSAccessibilityFocusedAttribute]) {
         return [NSNumber numberWithBool:[parent 
isAnnotationFocused:annotation]];
     } else if ([attribute isEqualToString:NSAccessibilityEnabledAttribute]) {
-        return [NSNumber numberWithBool:NO];
+        return [NSNumber numberWithBool:[annotation isEditable] || [annotation 
isLink]];
     } else if ([attribute isEqualToString:NSAccessibilityPositionAttribute]) {
         return [NSValue valueWithPoint:[parent 
screenRectForAnnotation:annotation].origin];
     } else if ([attribute isEqualToString:NSAccessibilitySizeAttribute]) {
@@ -134,7 +134,7 @@
 }
 
 - (NSArray *)accessibilityActionNames {
-    if ([[annotation type] isEqualToString:SKLinkString] || [annotation 
isEditable])
+    if ([annotation isLink] || [annotation isEditable])
         return [NSArray arrayWithObject:NSAccessibilityPressAction];
     else
         return [NSArray array];

Modified: trunk/SKPDFAnnotationCircle.m
===================================================================
--- trunk/SKPDFAnnotationCircle.m       2008-04-24 17:05:28 UTC (rev 3812)
+++ trunk/SKPDFAnnotationCircle.m       2008-04-24 18:57:06 UTC (rev 3813)
@@ -118,6 +118,41 @@
     return customCircleScriptingKeys;
 }
 
+#pragma mark Accessibility
+
+- (NSArray *)accessibilityAttributeNames {
+    static NSArray *attributes = nil;
+    if (attributes == nil) {
+        attributes = [[[super accessibilityAttributeNames] 
arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:
+            NSAccessibilitySelectedTextAttribute,
+            NSAccessibilitySelectedTextRangeAttribute,
+            NSAccessibilityNumberOfCharactersAttribute,
+            NSAccessibilityVisibleCharacterRangeAttribute,
+            nil]] retain];
+    }
+    return attributes;
+}
+
+- (id)accessibilityRoleAttribute {
+    return NSAccessibilityStaticTextRole;
+}
+
+- (id)accessibilitySelectedTextAttribute {
+    return @"";
+}
+
+- (id)accessibilitySelectedTextRangeAttribute {
+    return [NSValue valueWithRange:NSMakeRange(0, 0)];
+}
+
+- (id)accessibilityNumberOfCharactersAttribute {
+    return [NSNumber numberWithUnsignedInt:[[self accessibilityValueAttribute] 
length]];
+}
+
+- (id)accessibilityVisibleCharacterRangeAttribute {
+    return [NSValue valueWithRange:NSMakeRange(0, [[self 
accessibilityValueAttribute] length])];
+}
+
 @end
 
 #pragma mark -

Modified: trunk/SKPDFAnnotationFreeText.m
===================================================================
--- trunk/SKPDFAnnotationFreeText.m     2008-04-24 17:05:28 UTC (rev 3812)
+++ trunk/SKPDFAnnotationFreeText.m     2008-04-24 18:57:06 UTC (rev 3813)
@@ -165,6 +165,41 @@
         [self setFont:font];
 }
 
+#pragma mark Accessibility
+
+- (NSArray *)accessibilityAttributeNames {
+    static NSArray *attributes = nil;
+    if (attributes == nil) {
+        attributes = [[[super accessibilityAttributeNames] 
arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:
+            NSAccessibilitySelectedTextAttribute,
+            NSAccessibilitySelectedTextRangeAttribute,
+            NSAccessibilityNumberOfCharactersAttribute,
+            NSAccessibilityVisibleCharacterRangeAttribute,
+            nil]] retain];
+    }
+    return attributes;
+}
+
+- (id)accessibilityRoleAttribute {
+    return NSAccessibilityStaticTextRole;
+}
+
+- (id)accessibilitySelectedTextAttribute {
+    return @"";
+}
+
+- (id)accessibilitySelectedTextRangeAttribute {
+    return [NSValue valueWithRange:NSMakeRange(0, 0)];
+}
+
+- (id)accessibilityNumberOfCharactersAttribute {
+    return [NSNumber numberWithUnsignedInt:[[self accessibilityValueAttribute] 
length]];
+}
+
+- (id)accessibilityVisibleCharacterRangeAttribute {
+    return [NSValue valueWithRange:NSMakeRange(0, [[self 
accessibilityValueAttribute] length])];
+}
+
 @end
 
 #pragma mark -

Modified: trunk/SKPDFAnnotationLine.m
===================================================================
--- trunk/SKPDFAnnotationLine.m 2008-04-24 17:05:28 UTC (rev 3812)
+++ trunk/SKPDFAnnotationLine.m 2008-04-24 18:57:06 UTC (rev 3813)
@@ -301,6 +301,41 @@
     [self setEndLineStyle:SKLineStyleFromScriptingLineStyle(style)];
 }
 
+#pragma mark Accessibility
+
+- (NSArray *)accessibilityAttributeNames {
+    static NSArray *attributes = nil;
+    if (attributes == nil) {
+        attributes = [[[super accessibilityAttributeNames] 
arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:
+            NSAccessibilitySelectedTextAttribute,
+            NSAccessibilitySelectedTextRangeAttribute,
+            NSAccessibilityNumberOfCharactersAttribute,
+            NSAccessibilityVisibleCharacterRangeAttribute,
+            nil]] retain];
+    }
+    return attributes;
+}
+
+- (id)accessibilityRoleAttribute {
+    return NSAccessibilityStaticTextRole;
+}
+
+- (id)accessibilitySelectedTextAttribute {
+    return @"";
+}
+
+- (id)accessibilitySelectedTextRangeAttribute {
+    return [NSValue valueWithRange:NSMakeRange(0, 0)];
+}
+
+- (id)accessibilityNumberOfCharactersAttribute {
+    return [NSNumber numberWithUnsignedInt:[[self accessibilityValueAttribute] 
length]];
+}
+
+- (id)accessibilityVisibleCharacterRangeAttribute {
+    return [NSValue valueWithRange:NSMakeRange(0, [[self 
accessibilityValueAttribute] length])];
+}
+
 @end
 
 #pragma mark -

Modified: trunk/SKPDFAnnotationMarkup.m
===================================================================
--- trunk/SKPDFAnnotationMarkup.m       2008-04-24 17:05:28 UTC (rev 3812)
+++ trunk/SKPDFAnnotationMarkup.m       2008-04-24 18:57:06 UTC (rev 3813)
@@ -420,6 +420,41 @@
         [currentCommand 
setScriptErrorNumber:NSReceiversCantHandleCommandScriptError]; 
 }
 
+#pragma mark Accessibility
+
+- (NSArray *)accessibilityAttributeNames {
+    static NSArray *attributes = nil;
+    if (attributes == nil) {
+        attributes = [[[super accessibilityAttributeNames] 
arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:
+            NSAccessibilitySelectedTextAttribute,
+            NSAccessibilitySelectedTextRangeAttribute,
+            NSAccessibilityNumberOfCharactersAttribute,
+            NSAccessibilityVisibleCharacterRangeAttribute,
+            nil]] retain];
+    }
+    return attributes;
+}
+
+- (id)accessibilityRoleAttribute {
+    return NSAccessibilityStaticTextRole;
+}
+
+- (id)accessibilitySelectedTextAttribute {
+    return @"";
+}
+
+- (id)accessibilitySelectedTextRangeAttribute {
+    return [NSValue valueWithRange:NSMakeRange(0, 0)];
+}
+
+- (id)accessibilityNumberOfCharactersAttribute {
+    return [NSNumber numberWithUnsignedInt:[[self accessibilityValueAttribute] 
length]];
+}
+
+- (id)accessibilityVisibleCharacterRangeAttribute {
+    return [NSValue valueWithRange:NSMakeRange(0, [[self 
accessibilityValueAttribute] length])];
+}
+
 @end
 
 #pragma mark -

Modified: trunk/SKPDFAnnotationNote.m
===================================================================
--- trunk/SKPDFAnnotationNote.m 2008-04-24 17:05:28 UTC (rev 3812)
+++ trunk/SKPDFAnnotationNote.m 2008-04-24 18:57:06 UTC (rev 3813)
@@ -295,25 +295,13 @@
     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];
+        attributes = [[[super accessibilityAttributeNames] 
arrayByAddingObject:NSAccessibilityDescriptionAttribute] retain];
     }
     return attributes;
 }

Modified: trunk/SKPDFAnnotationSquare.m
===================================================================
--- trunk/SKPDFAnnotationSquare.m       2008-04-24 17:05:28 UTC (rev 3812)
+++ trunk/SKPDFAnnotationSquare.m       2008-04-24 18:57:06 UTC (rev 3813)
@@ -118,6 +118,41 @@
     return customSquareScriptingKeys;
 }
 
+#pragma mark Accessibility
+
+- (NSArray *)accessibilityAttributeNames {
+    static NSArray *attributes = nil;
+    if (attributes == nil) {
+        attributes = [[[super accessibilityAttributeNames] 
arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:
+            NSAccessibilitySelectedTextAttribute,
+            NSAccessibilitySelectedTextRangeAttribute,
+            NSAccessibilityNumberOfCharactersAttribute,
+            NSAccessibilityVisibleCharacterRangeAttribute,
+            nil]] retain];
+    }
+    return attributes;
+}
+
+- (id)accessibilityRoleAttribute {
+    return NSAccessibilityStaticTextRole;
+}
+
+- (id)accessibilitySelectedTextAttribute {
+    return @"";
+}
+
+- (id)accessibilitySelectedTextRangeAttribute {
+    return [NSValue valueWithRange:NSMakeRange(0, 0)];
+}
+
+- (id)accessibilityNumberOfCharactersAttribute {
+    return [NSNumber numberWithUnsignedInt:[[self accessibilityValueAttribute] 
length]];
+}
+
+- (id)accessibilityVisibleCharacterRangeAttribute {
+    return [NSValue valueWithRange:NSMakeRange(0, [[self 
accessibilityValueAttribute] length])];
+}
+
 @end
 
 #pragma mark -

Modified: trunk/SKPDFHoverWindow.m
===================================================================
--- trunk/SKPDFHoverWindow.m    2008-04-24 17:05:28 UTC (rev 3812)
+++ trunk/SKPDFHoverWindow.m    2008-04-24 18:57:06 UTC (rev 3813)
@@ -177,7 +177,7 @@
     
     [self cancelDelayedAnimations];
     
-    if ([[annotation type] isEqualToString:SKLinkString]) {
+    if ([annotation isLink]) {
         
         PDFDestination *dest = [annotation destination];
         PDFPage *page = [dest page];

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2008-04-24 17:05:28 UTC (rev 3812)
+++ trunk/SKPDFView.m   2008-04-24 18:57:06 UTC (rev 3813)
@@ -348,13 +348,13 @@
         
         for (i = 0; i < count; i++) {
             PDFAnnotation *annotation = [allAnnotations objectAtIndex: i];
-            if ([[annotation type] isEqualToString:SKLinkString])       
+            if ([annotation isLink])    
                 [(PDFAnnotationLink *)annotation fixRelativeURLIfNeeded];
         }
         
         // activeAnnotation may be a leftover, and we don't want to outline it 
on the wrong page
         if (activeAnnotation && [[activeAnnotation page] isEqual:pdfPage]) {
-            BOOL isLink = [[activeAnnotation type] 
isEqualToString:SKLinkString];
+            BOOL isLink = [activeAnnotation isLink];
             float lineWidth = isLink ? 2.0 : 1.0;
             NSRect bounds = [activeAnnotation bounds];
             NSRect rect = NSInsetRect(NSIntegralRect(bounds), 0.5 * lineWidth, 
0.5 * lineWidth);
@@ -1015,7 +1015,7 @@
 }
 
 - (void)mouseDown:(NSEvent *)theEvent{
-    if ([[activeAnnotation type] isEqualToString:SKLinkString])
+    if ([activeAnnotation isLink])
         [self setActiveAnnotation:nil];
     
     mouseDownLoc = [theEvent locationInWindow];
@@ -1109,7 +1109,7 @@
                      [self setNeedsDisplayInRect:selectionRect];        
                      selectionRect = NSZeroRect;        
                      [[NSNotificationCenter defaultCenter] 
postNotificationName:SKPDFViewSelectionChangedNotification object:self];     
-                 } else if ([[activeAnnotation type] 
isEqualToString:SKLinkString]) {   
+                 } else if ([activeAnnotation isLink]) {        
                      NSPoint p = [self convertPoint:[theEvent 
locationInWindow] fromView:nil];          
                      PDFPage *page = [self pageForPoint:p nearest:NO];         
 
                      if (page && NSPointInRect([self convertPoint:p 
toPage:page], [activeAnnotation bounds]))   
@@ -1167,7 +1167,7 @@
     else
         [super mouseMoved:theEvent];
     
-    if ([[activeAnnotation type] isEqualToString:SKLinkString]) {
+    if ([activeAnnotation isLink]) {
         [[SKPDFHoverWindow sharedHoverWindow] fadeOut];
         [self setActiveAnnotation:nil];
     }
@@ -2032,7 +2032,7 @@
         NSArray *annotations = [[pdfDoc pageAtIndex:pageIndex] annotations];
         while (++i < (int)[annotations count] && annotation == nil) {
             annotation = [annotations objectAtIndex:i];
-            if (([self hideNotes] || [annotation isNoteAnnotation] == NO) && 
[[annotation type] isEqualToString:SKLinkString] == NO)
+            if (([self hideNotes] || [annotation isNoteAnnotation] == NO) && 
[annotation isLink] == NO)
                 annotation = nil;
         }
         if (startPageIndex == -1)
@@ -2046,7 +2046,7 @@
     if (annotation) {
         [self scrollAnnotationToVisible:annotation];
         [self setActiveAnnotation:annotation];
-        if ([[annotation type] isEqualToString:SKLinkString] || [annotation 
text]) {
+        if ([annotation isLink] || [annotation text]) {
             NSRect bounds = [annotation bounds]; 
             NSPoint point = NSMakePoint(NSMinX(bounds) + 0.3 * 
NSWidth(bounds), NSMinY(bounds) + 0.3 * NSHeight(bounds));
             point = [self convertPoint:[self convertPoint:point 
fromPage:[annotation page]] toView:nil];
@@ -2080,7 +2080,7 @@
     while (annotation == nil) {
         while (--i >= 0 && annotation == nil) {
             annotation = [annotations objectAtIndex:i];
-            if (([self hideNotes] || [annotation isNoteAnnotation] == NO) && 
[[annotation type] isEqualToString:SKLinkString] == NO)
+            if (([self hideNotes] || [annotation isNoteAnnotation] == NO) && 
[annotation isLink] == NO)
                 annotation = nil;
         }
         if (startPageIndex == -1)
@@ -2095,7 +2095,7 @@
     if (annotation) {
         [self scrollAnnotationToVisible:annotation];
         [self setActiveAnnotation:annotation];
-        if ([[annotation type] isEqualToString:SKLinkString] || [annotation 
text]) {
+        if ([annotation isLink] || [annotation text]) {
             NSRect bounds = [annotation bounds]; 
             NSPoint point = NSMakePoint(NSMinX(bounds) + 0.3 * 
NSWidth(bounds), NSMinY(bounds) + 0.3 * NSHeight(bounds));
             point = [self convertPoint:[self convertPoint:point 
fromPage:[annotation page]] toView:nil];
@@ -2160,7 +2160,7 @@
             NSEnumerator *annotationEnum = [[page annotations] 
objectEnumerator];
             PDFAnnotation *annotation;
             while (annotation = [annotationEnum nextObject]) {
-                if ([[annotation type] isEqualToString:SKLinkString] || 
[annotation isNoteAnnotation])
+                if ([annotation isLink] || [annotation isNoteAnnotation])
                     [children addObject:[SKAccessibilityPDFAnnotationElement 
elementWithAnnotation:annotation parent:[self documentView]]];
             }
         }
@@ -2181,7 +2181,7 @@
         PDFPage *page = [self pageForPoint:localPoint nearest:NO];
         if (page) {
             PDFAnnotation *annotation = [page annotationAtPoint:[self 
convertPoint:localPoint toPage:page]];
-            if ([[annotation type] isEqualToString:SKLinkString] || 
[annotation isNoteAnnotation])
+            if ([annotation isLink] || [annotation isNoteAnnotation])
                 child = 
NSAccessibilityUnignoredAncestor([SKAccessibilityPDFAnnotationElement 
elementWithAnnotation:annotation parent:[self documentView]]);
         }
     }
@@ -2858,7 +2858,7 @@
             if ([annotation isTemporaryAnnotation]) {
                 // register this, so we can do our own selection later
                 mouseDownInAnnotation = YES;
-            } else if ([[annotation type] isEqualToString:SKLinkString]) {
+            } else if ([annotation isLink]) {
                 if (mouseDownInAnnotation && (toolMode == SKTextToolMode || 
annotationMode == SKHighlightNote || annotationMode == SKUnderlineNote || 
annotationMode == SKStrikeOutNote))
                     newActiveAnnotation = annotation;
                 break;


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