topical media & game development
student-ar-fl-accessibility-SelectableListAccImpl.ax
student-ar-fl-accessibility-SelectableListAccImpl.ax
[swf]
flex
// Copyright 2007. Adobe Systems Incorporated. All Rights Reserved.
package fl.accessibility {
import flash.events.Event;
import flash.accessibility.Accessibility;
import fl.controls.listClasses.ICellRenderer;
import fl.controls.SelectableList;
import fl.core.UIComponent;
The @ax-student-ar-fl-accessibility-SelectableListAccImpl class, also called the SelectableList Accessibility Implementation class,
is used to make a SelectableList component accessible.
see: fl.controls.SelectableList SelectableList
@langversion 3.0
@playerversion Flash 9.0.28.0
public class @ax-student-ar-fl-accessibility-SelectableListAccImpl extends AccImpl {
@private
Static variable triggering the <code>hookAccessibility()</code> method.
This is used for initializing @ax-student-ar-fl-accessibility-SelectableListAccImpl class to hook its
<code>createAccessibilityImplementation()</code> method to SelectableList class
before it gets called from UIComponent.
@langversion 3.0
@playerversion Flash 9.0.28.0
private static var accessibilityHooked:Boolean = hookAccessibility();
@private
Static method for swapping the <code>createAccessibilityImplementation()</code>
method of SelectableList with the @ax-student-ar-fl-accessibility-SelectableListAccImpl class.
@langversion 3.0
@playerversion Flash 9.0.28.0
private static function hookAccessibility():Boolean {
SelectableList.createAccessibilityImplementation = createAccessibilityImplementation;
return true;
}
//--------------------------------------------------------------------------
// Class constants
//--------------------------------------------------------------------------
@private
Role of listItem.
@langversion 3.0
@playerversion Flash 9.0.28.0
private static const ROLE_SYSTEM_LISTITEM:uint = 0x22;
@private
@langversion 3.0
@playerversion Flash 9.0.28.0
private static const STATE_SYSTEM_FOCUSED:uint = 0x00000004;
@private
@langversion 3.0
@playerversion Flash 9.0.28.0
private static const STATE_SYSTEM_INVISIBLE:uint = 0x00008000;
@private
@langversion 3.0
@playerversion Flash 9.0.28.0
private static const STATE_SYSTEM_OFFSCREEN:uint = 0x00010000;
@private
@langversion 3.0
@playerversion Flash 9.0.28.0
private static const STATE_SYSTEM_SELECTABLE:uint = 0x00200000;
@private
@langversion 3.0
@playerversion Flash 9.0.28.0
private static const STATE_SYSTEM_SELECTED:uint = 0x00000002;
@private
Event emitted if 1 item is selected.
@langversion 3.0
@playerversion Flash 9.0.28.0
private static const EVENT_OBJECT_FOCUS:uint = 0x8005;
@private
Event emitted if 1 item is selected.
@langversion 3.0
@playerversion Flash 9.0.28.0
private static const EVENT_OBJECT_SELECTION:uint = 0x8006;
//--------------------------------------------------------------------------
// Class methods
//--------------------------------------------------------------------------
@private
Method for creating the Accessibility class.
This method is called from UIComponent.
parameter: component The UIComponent instance that this AccImpl instance
is making accessible.
@langversion 3.0
@playerversion Flash 9.0.28.0
public static function createAccessibilityImplementation(component:UIComponent):void {
component.accessibilityImplementation = new @ax-student-ar-fl-accessibility-SelectableListAccImpl(component);
}
Enables accessibility for a SelectableList component.
This method is required for the compiler to activate
the accessibility classes for a component.
@langversion 3.0
@playerversion Flash 9.0.28.0
public static function enableAccessibility():void {
}
//--------------------------------------------------------------------------
// Constructor
//--------------------------------------------------------------------------
@private
@internal Nivesh says: I don't think we should document the constructors
for the accessibility classes. End-users just have to call the
static enableAccessibility method. They don't really create an
instance of the classes.
Creates a new SelectableList Accessibility Implementation.
parameter: master The UIComponent instance that this AccImpl instance
is making accessible.
@langversion 3.0
@playerversion Flash 9.0.28.0
public function @ax-student-ar-fl-accessibility-SelectableListAccImpl(master:UIComponent) {
super(master);
role = 0x21;
}
//--------------------------------------------------------------------------
// Overridden properties: AccImpl
//--------------------------------------------------------------------------
@private
Array of events that we should listen for from the master component.
@langversion 3.0
@playerversion Flash 9.0.28.0
override protected function get eventsToHandle():Array {
return super.eventsToHandle.concat([ "change" ]);
}
//--------------------------------------------------------------------------
// Overridden methods: AccessibilityImplementation
//--------------------------------------------------------------------------
@private
Gets the role for the component.
parameter: childID The child id.
returns: Role.
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function get_accRole(childID:uint):uint {
if (childID == 0) {
return role;
}
return ROLE_SYSTEM_LISTITEM;
}
@private
must be overridden in @ax-student-ar-fl-accessibility-SelectableListAccImpl subclasses.
parameter: childID The child id.
returns: Value.
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function get_accValue(childID:uint):String {
return "";
}
@private
IAccessible method for returning the state of the ListItem.
States are predefined for all the components in MSAA.
Values are assigned to each state.
Depending upon the listItem being Selected, Selectable,
Invisible, Offscreen, a value is returned.
parameter: childID The child id.
returns: State.
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function get_accState(childID:uint):uint {
var accState:uint = getState(childID);
if (childID > 0) {
var list:SelectableList = SelectableList(master);
var index:uint = childID - 1;
// For returning states (OffScreen and Invisible)
// when the list Item is not in the displayed rows.
if (index < list.verticalScrollPosition || index >= list.verticalScrollPosition + list.rowCount) {
accState |= (STATE_SYSTEM_OFFSCREEN | STATE_SYSTEM_INVISIBLE);
} else {
accState |= STATE_SYSTEM_SELECTABLE;
var item:Object = list.getItemAt(index);
var selItems:Array = list.selectedIndices;
for(var i:int = 0; i < selItems.length; i++) {
if(selItems[i] == index) {
accState |= STATE_SYSTEM_SELECTED | STATE_SYSTEM_FOCUSED;
break;
}
}
}
}
return accState;
}
@private
IAccessible method for returning the Default Action.
parameter: childID The child id.
returns: DefaultAction.
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function get_accDefaultAction(childID:uint):String {
if (childID == 0) {
return null;
}
return "Double Click";
}
@private
IAccessible method for executing the Default Action.
parameter: childID The child id.
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function accDoDefaultAction(childID:uint):void {
if (childID > 0) {
SelectableList(master).selectedIndex = childID - 1;
}
}
@private
Method to return an array of childIDs.
returns: Array child ids
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function getChildIDArray():Array {
var childIDs:Array = [];
var list:SelectableList = SelectableList(master);
if (list.dataProvider) {
var n:uint = list.dataProvider.length;
for (var i:int = 0; i < n; i++) {
childIDs[i] = i + 1;
}
}
return childIDs;
}
@private
IAccessible method for returning the bounding box of the ListItem.
parameter: childID The child id
returns: Object Location
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function accLocation(childID:uint):* {
var list:SelectableList = SelectableList(master);
if(childID > 0) {
var index:uint = childID - 1;
if (index < list.verticalScrollPosition || index >= list.verticalScrollPosition + list.rowCount) {
return null;
}
var item:Object = list.getItemAt(index);
return list.itemToCellRenderer(item);
}
return list;
}
@private
IAccessible method for returning the child Selections in the List.
parameter: childID The child id
returns: Array child ids.
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function get_accSelection():Array {
var accSelection:Array = [];
var selectedIndices:Array = SelectableList(master).selectedIndices;
var n:int = selectedIndices.length;
for (var i:int = 0; i < n; i++) {
accSelection[i] = selectedIndices[i] + 1;
}
return accSelection;
}
@private
IAccessible method for returning the childFocus of the List.
parameter: childID The child id
returns: uint focused child id.
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function get_accFocus():uint {
var index:uint = SelectableList(master).selectedIndex;
return (index >= 0) ? index + 1 : 0;
}
@private
IAccessible method for selecting an item.
parameter: childID The child id
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function accSelect(selFlag:uint, childID:uint):void {
var list:SelectableList = SelectableList(master);
var index:uint = childID - 1;
if(list.dataProvider) {
if (index >= 0 && index < list.dataProvider.length) {
list.selectedIndex = index;
}
}
}
//--------------------------------------------------------------------------
// Overridden methods: AccImpl
//--------------------------------------------------------------------------
@private
must be overridden in @ax-student-ar-fl-accessibility-SelectableListAccImpl subclasses
parameter: childID The child id.
returns: Name.
@langversion 3.0
@playerversion Flash 9.0.28.0
override protected function getName(childID:uint):String {
return "";
}
//--------------------------------------------------------------------------
// Overridden event handlers: AccImpl
//--------------------------------------------------------------------------
@private
Override the generic event handler.
All AccImpl must implement this
to listen for events from its master component.
parameter: event The event object
@langversion 3.0
@playerversion Flash 9.0.28.0
override protected function eventHandler(event:Event):void {
switch (event.type) {
case "change":
var index:uint = SelectableList(master).selectedIndex;
if (index >= 0) {
if(Accessibility.active) {
var childID:uint = index + 1;
Accessibility.sendEvent(master, childID, EVENT_OBJECT_FOCUS);
Accessibility.sendEvent(master, childID, EVENT_OBJECT_SELECTION);
}
}
break;
}
}
}
}
(C) Æliens
27/08/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.