Add OakSetAccessibilityLabel function

This function makes it easy to set accessibility "labels" for UI elements.
It is flexible - takes care of NSView vs. NSControl case, labels can be
specified directly as a string or as a user interface element.
This commit is contained in:
Boris Dušek
2014-03-31 21:41:34 +02:00
committed by Allan Odgaard
parent 617e9df202
commit b80d60db57
2 changed files with 21 additions and 0 deletions

View File

@@ -16,3 +16,4 @@ PUBLIC NSImageView* OakCreateDividerImageView ();
PUBLIC NSBox* OakCreateViewWithColor (NSColor* color = nil, NSColor* secondaryColor = nil);
PUBLIC NSBox* OakCreateVerticalLine (NSColor* primaryColor, NSColor* secondaryColor = nil);
PUBLIC NSBox* OakCreateHorizontalLine (NSColor* primaryColor, NSColor* secondaryColor = nil);
PUBLIC BOOL OakSetAccessibilityLabel (NSObject* element, NSObject* label);

View File

@@ -211,3 +211,23 @@ NSImageView* OakCreateDividerImageView ()
[res setContentCompressionResistancePriority:NSLayoutPriorityDefaultLow forOrientation:NSLayoutConstraintOrientationVertical];
return res;
}
BOOL OakSetAccessibilityLabel (NSObject* element, NSObject* label)
{
if([element isKindOfClass:[NSControl class]])
element = [(NSControl*)element cell] ?: element; // e.g. NSTableView is an NSControl with a nil cell
else if(!([element isKindOfClass:[NSView class]] || [element isKindOfClass:[NSCell class]]))
return NO;
NSString* attribute = NSAccessibilityDescriptionAttribute;
if([label isKindOfClass:[NSView class]] || [label isKindOfClass:[NSCell class]])
{
attribute = NSAccessibilityTitleUIElementAttribute;
if([label isKindOfClass:[NSControl class]])
label = [(NSControl*)label cell] ?: label;
}
else if(![label isKindOfClass:[NSString class]])
return NO;
return [element accessibilitySetOverrideValue:label forAttribute:attribute];
}