first commit
This commit is contained in:
		
							
								
								
									
										182
									
								
								com/yahoo/astra/fl/accessibility/CarouselAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										182
									
								
								com/yahoo/astra/fl/accessibility/CarouselAccImpl.as
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,182 @@ | ||||
| /* | ||||
| Copyright (c) 2009 Yahoo! Inc.  All rights reserved.   | ||||
| The copyrights embodied in the content of this file are licensed under the BSD (revised) open source license | ||||
| */ | ||||
| package com.yahoo.astra.fl.accessibility | ||||
| { | ||||
| 	import com.yahoo.astra.accessibility.EventTypes; | ||||
| 	import com.yahoo.astra.accessibility.ObjectRoles; | ||||
| 	import com.yahoo.astra.accessibility.ObjectStates; | ||||
| 	 | ||||
| 	import com.yahoo.astra.fl.controls.Carousel; | ||||
| 	 | ||||
| 	import fl.accessibility.SelectableListAccImpl; | ||||
| 	import fl.core.UIComponent; | ||||
|  | ||||
| 	/** | ||||
|      * The CarouselAccImpl class is used to make a Carousel component accessible. | ||||
| 	 *  | ||||
| 	 * <p>A Carousel reports the role <code>ROLE_SYSTEM_LIST</code> (0x21) to a screen  | ||||
| 	 * reader. Its items report the role <code>ROLE_SYSTEM_LISTITEM</code> (0x22).</p> | ||||
|      * | ||||
|      * @see com.yahoo.astra.fl.controls.Carousel | ||||
|      * | ||||
|      * @author Alaric Cole | ||||
| 	 */ | ||||
| 	public class CarouselAccImpl extends SelectableListAccImpl  | ||||
| 	{ | ||||
| 		 | ||||
| 		/** | ||||
| 		 *  @private | ||||
|          *  Static variable triggering the <code>hookAccessibility()</code> method. | ||||
| 		 *  This is used for initializing CarouselAccImpl class to hook its | ||||
|          *  <code>createAccessibilityImplementation()</code> method to Carousel class  | ||||
|          *  before it gets called from UIComponent. | ||||
|          * | ||||
| 		 */ | ||||
| 		private static var accessibilityHooked:Boolean = hookAccessibility(); | ||||
|  | ||||
| 		/** | ||||
| 		 *  @private | ||||
|          *  Static method for swapping the <code>createAccessibilityImplementation()</code> | ||||
|          *  method of Carousel with the CarouselAccImpl class. | ||||
|          * | ||||
| 		 */  | ||||
| 		private static function hookAccessibility():Boolean  | ||||
| 		{ | ||||
| 			Carousel.createAccessibilityImplementation = createAccessibilityImplementation; | ||||
| 			return true; | ||||
| 		} | ||||
|  | ||||
| 	 | ||||
| 		/** | ||||
| 		 *  @private | ||||
| 		 *  Method for creating the Accessibility class. | ||||
| 		 *  This method is called from UIComponent. | ||||
| 		 *  | ||||
| 		 *  @param component The UIComponent instance that this AccImpl instance | ||||
|          *  is making accessible. | ||||
|          * | ||||
| 		 */ | ||||
| 		public static function createAccessibilityImplementation(component:UIComponent):void  | ||||
| 		{ | ||||
| 			component.accessibilityImplementation = new CarouselAccImpl(component); | ||||
| 		} | ||||
|  | ||||
| 		/** | ||||
| 		 *  Enables accessibility for a Carousel component. | ||||
| 		 *  This method is required for the compiler to activate | ||||
|          *  the accessibility classes for a component. | ||||
| 		 */ | ||||
| 		public static function enableAccessibility():void  | ||||
| 		{ | ||||
| 			// | ||||
| 		} | ||||
|  | ||||
| 		//-------------------------------------------------------------------------- | ||||
| 		//  Constructor | ||||
| 		//-------------------------------------------------------------------------- | ||||
|  | ||||
|         /** | ||||
| 		 *  Creates a new Carousel Accessibility Implementation. | ||||
| 		 * | ||||
| 		 *  @param master The UIComponent instance that this AccImpl instance | ||||
|          *  is making accessible. | ||||
|          * | ||||
| 		 */ | ||||
| 		public function CarouselAccImpl(master:UIComponent)  | ||||
| 		{ | ||||
| 			super(master); | ||||
| 		} | ||||
|  | ||||
|  | ||||
| 		//-------------------------------------------------------------------------- | ||||
| 		//  Name | ||||
| 		//-------------------------------------------------------------------------- | ||||
| 		/** | ||||
| 		 *  @inheritDoc | ||||
|          * | ||||
| 		 */ | ||||
| 		override protected function getName(childID:uint):String  | ||||
| 		{ | ||||
| 			if (childID == 0) { | ||||
| 				return ""; | ||||
| 			} | ||||
| 			var list:Carousel = Carousel(master); | ||||
| 			 | ||||
| 			if(list.dataProvider)  | ||||
| 			{ | ||||
| 				var index:int = childID - 1; | ||||
| 		 | ||||
| 				if (index > -1) | ||||
| 				{ | ||||
| 					var item:Object = list.getItemAt(index); | ||||
| 					var ext:String = " " + childID + " of " + list.dataProvider.length; | ||||
| 					if (item is String) { | ||||
| 						return item + ext; | ||||
| 					} else { | ||||
| 						return list.itemToLabel(item) + ext; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			return ""; | ||||
| 		}	 | ||||
| 			 | ||||
| 		//-------------------------------------------------------------------------- | ||||
| 		//  Value | ||||
| 		//-------------------------------------------------------------------------- | ||||
| 		/** | ||||
| 		 *  @inheritDoc | ||||
| 		 */ | ||||
| 		override public function get_accValue(childID:uint):String  | ||||
| 		{ | ||||
| 			var accValue:String; | ||||
| 			var list:Carousel = Carousel(master); | ||||
| 			var index:int = list.selectedIndex; | ||||
| 			if (childID == 0) { | ||||
| 				if (index > -1) { | ||||
| 					var ext:String = " " + (index + 1) + " of " + list.dataProvider.length; | ||||
| 					var item:Object = list.getItemAt(index); | ||||
| 					if (item is String) { | ||||
| 						accValue = item + ext; | ||||
| 					} else { | ||||
| 						accValue = list.itemToLabel(item) + ext; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			return accValue; | ||||
| 		} | ||||
|  | ||||
| 		//-------------------------------------------------------------------------- | ||||
| 		//  State | ||||
| 		//-------------------------------------------------------------------------- | ||||
| 		/** | ||||
| 		 *  @inheritDoc | ||||
| 		 */ | ||||
| 		override public function get_accState(childID:uint):uint  | ||||
| 		{ | ||||
| 			var accState:uint = getState(childID); | ||||
| 			if (childID > 0) { | ||||
| 				var list:Carousel = Carousel(master); | ||||
| 				var index:uint = childID - 1; | ||||
| 				 | ||||
| 				if (index < list.horizontalScrollPosition || index >= list.horizontalScrollPosition + list.columnCount) { | ||||
| 					accState |= (ObjectStates.STATE_SYSTEM_OFFSCREEN | ObjectStates.STATE_SYSTEM_INVISIBLE); | ||||
| 				} else { | ||||
| 					accState |= ObjectStates.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 |= ObjectStates.STATE_SYSTEM_SELECTED | ObjectStates.STATE_SYSTEM_FOCUSED; | ||||
| 							break; | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			return accState; | ||||
| 		} | ||||
|  | ||||
|  | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										5
									
								
								com/yahoo/astra/fl/accessibility/DialogBoxAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								com/yahoo/astra/fl/accessibility/DialogBoxAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										5
									
								
								com/yahoo/astra/fl/accessibility/MediaInfoViewAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								com/yahoo/astra/fl/accessibility/MediaInfoViewAccImpl.as
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,5 @@ | ||||
| /* | ||||
| Copyright (c) 2009 Yahoo! Inc.  All rights reserved.   | ||||
| The copyrights embodied in the content of this file are licensed under the BSD (revised) open source license | ||||
| */ | ||||
| package com.yahoo.astra.fl.accessibility  | ||||
							
								
								
									
										5
									
								
								com/yahoo/astra/fl/accessibility/MenuAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								com/yahoo/astra/fl/accessibility/MenuAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										5
									
								
								com/yahoo/astra/fl/accessibility/MenuBarAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								com/yahoo/astra/fl/accessibility/MenuBarAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										353
									
								
								com/yahoo/astra/fl/accessibility/TabBarAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										353
									
								
								com/yahoo/astra/fl/accessibility/TabBarAccImpl.as
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,353 @@ | ||||
| /* | ||||
| Copyright (c) 2009 Yahoo! Inc.  All rights reserved.   | ||||
| The copyrights embodied in the content of this file are licensed under the BSD (revised) open source license | ||||
| */ | ||||
| package com.yahoo.astra.fl.accessibility | ||||
| { | ||||
| 	import com.yahoo.astra.accessibility.EventTypes; | ||||
| 	import com.yahoo.astra.accessibility.ObjectRoles; | ||||
| 	import com.yahoo.astra.accessibility.ObjectStates; | ||||
| 	 | ||||
| 	import com.yahoo.astra.fl.controls.TabBar; | ||||
| 	import com.yahoo.astra.fl.controls.tabBarClasses.TabButton; | ||||
| 	 | ||||
| 	import fl.accessibility.AccImpl; | ||||
| 	import fl.core.UIComponent; | ||||
| 	 | ||||
| 	import flash.accessibility.Accessibility; | ||||
| 	import flash.events.Event; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * The TabBarAccImpl class, also called the TabBar Accessibility Implementation class, | ||||
| 	 * is used to make a TabBar component accessible. | ||||
| 	 * | ||||
| 	 * @see com.yahoo.astra.fl.controls.TabBar | ||||
| 	 */ | ||||
| 	public class TabBarAccImpl extends AccImpl | ||||
| 	{		 | ||||
| 		 | ||||
| 	//-------------------------------------- | ||||
| 	//  Class Properties | ||||
| 	//-------------------------------------- | ||||
|  | ||||
| 		/** | ||||
| 		 * @private | ||||
|          * Static variable triggering the <code>hookAccessibility()</code> method. | ||||
| 		 * This is used for initializing TabBarAccImpl class to hook its | ||||
|          * <code>createAccessibilityImplementation()</code> method to TabBar class  | ||||
|          * before it gets called from UIComponent. | ||||
| 		 */ | ||||
| 		private static var accessibilityHooked:Boolean = hookAccessibility(); | ||||
| 		 | ||||
| 	//-------------------------------------- | ||||
| 	//  Class Methods | ||||
| 	//-------------------------------------- | ||||
|  | ||||
| 		/** | ||||
| 		 * @private | ||||
|          * Static method for swapping the <code>createAccessibilityImplementation()</code> | ||||
|          * method of TabBar with the TabBarAccImpl class. | ||||
| 		 */  | ||||
| 		private static function hookAccessibility():Boolean | ||||
| 		{ | ||||
| 			TabBar.createAccessibilityImplementation = createAccessibilityImplementation; | ||||
| 			return true; | ||||
| 		} | ||||
| 		 | ||||
| 		/** | ||||
| 		 *  @private | ||||
| 		 *  Method for creating the Accessibility class. | ||||
| 		 *  This method is called from UIComponent. | ||||
| 		 *  | ||||
| 		 *  @param component The UIComponent instance that this AccImpl instance | ||||
|          *  is making accessible. | ||||
| 		 */ | ||||
| 		public static function createAccessibilityImplementation(component:UIComponent):void | ||||
| 		{ | ||||
| 			component.accessibilityImplementation = new TabBarAccImpl(component); | ||||
| 		} | ||||
| 		 | ||||
| 		/** | ||||
| 		 * Enables accessibility for a TabBar component. | ||||
| 		 * This method is required for the compiler to activate | ||||
|          * the accessibility classes for a component. | ||||
| 		 */ | ||||
| 		public static function enableAccessibility():void | ||||
| 		{ | ||||
| 			//do nothing | ||||
| 		} | ||||
| 		 | ||||
| 	//-------------------------------------- | ||||
| 	//  Constants | ||||
| 	//-------------------------------------- | ||||
| 	 | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 */ | ||||
| 		private static const MAX_NUM:uint = 100000; | ||||
| 		 | ||||
| 	//-------------------------------------- | ||||
| 	//  Constructor | ||||
| 	//-------------------------------------- | ||||
| 	 | ||||
| 		/** | ||||
|          * @private | ||||
|          * | ||||
| 		 * Creates a new TabBar Accessibility Implementation. | ||||
| 		 * | ||||
| 		 * @param master The UIComponent instance that this AccImpl instance | ||||
|          * is making accessible. | ||||
| 		 */ | ||||
| 		public function TabBarAccImpl(master:UIComponent) | ||||
| 		{ | ||||
| 			super(master); | ||||
| 			this.role = ObjectRoles.ROLE_SYSTEM_PAGETABLIST; | ||||
| 		} | ||||
| 		 | ||||
| 	//-------------------------------------- | ||||
| 	//  Properties | ||||
| 	//-------------------------------------- | ||||
| 	 | ||||
| 		/** | ||||
| 		 * @private | ||||
|          * Array of events that we should listen for from the master component. | ||||
| 		 */ | ||||
| 		override protected function get eventsToHandle():Array | ||||
| 		{ | ||||
| 			return super.eventsToHandle.concat([ Event.CHANGE, "focusUpdate" ]); | ||||
| 		} | ||||
| 		 | ||||
| 	//-------------------------------------- | ||||
| 	//  Public Methods | ||||
| 	//-------------------------------------- | ||||
| 	 | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * Gets the role for the component. | ||||
| 		 * | ||||
| 		 * @param childID The child id. | ||||
| 		 *  | ||||
|          * @return Role. | ||||
| 		 */ | ||||
| 		override public function get_accRole(childID:uint):uint | ||||
| 		{ | ||||
| 			if(childID == 0) | ||||
| 			{ | ||||
| 				return this.role; | ||||
| 			} | ||||
| 			 | ||||
| 			//tabs use this role: | ||||
| 			return ObjectRoles.ROLE_SYSTEM_PAGETAB; | ||||
| 		} | ||||
| 		 | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * IAccessible method for returning the state of the Tabs. | ||||
| 		 * States are predefined for all the components in MSAA. Values are assigned to each state. | ||||
| 		 * Depending upon the Tab being Focusable, Focused and Moveable, a value is returned. | ||||
| 		 * | ||||
| 		 * @param childID The child id. | ||||
| 		 * | ||||
|          * @return State. | ||||
| 		 */ | ||||
| 		override public function get_accState(childID:uint):uint | ||||
| 		{ | ||||
| 			var accState:uint = getState(childID); | ||||
|  | ||||
| 			var tabBar:TabBar = TabBar(master); | ||||
| 			 | ||||
| 			if(childID > 0) | ||||
| 			{ | ||||
| 				accState = ObjectStates.STATE_SYSTEM_SELECTABLE | ObjectStates.STATE_SYSTEM_FOCUSABLE; | ||||
|  | ||||
| 				var index:int = childID < MAX_NUM ? childID - 1 : childID - MAX_NUM - 1; | ||||
|  | ||||
| 				if(index == tabBar.selectedIndex) | ||||
| 				{ | ||||
| 					accState |= ObjectStates.STATE_SYSTEM_SELECTED; | ||||
| 				} | ||||
| 					 | ||||
| 				if(index == tabBar.focusIndex) | ||||
| 				{ | ||||
| 					accState |= ObjectStates.STATE_SYSTEM_FOCUSED; | ||||
| 				} | ||||
| 			}		 | ||||
| 			return accState; | ||||
| 		} | ||||
|  | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * IAccessible method for returning the Default Action. | ||||
| 		 * | ||||
| 		 * @param childID uint | ||||
| 		 * | ||||
| 		 * @return DefaultAction. | ||||
| 		 */ | ||||
| 		override public function get_accDefaultAction(childID:uint):String | ||||
| 		{ | ||||
| 			return "Switch"; | ||||
| 		} | ||||
| 		 | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * IAccessible method for executing the Default Action. | ||||
| 		 * | ||||
| 		 * @param childID uint | ||||
| 		 */ | ||||
| 		override public function accDoDefaultAction(childID:uint):void | ||||
| 		{ | ||||
| 			if(childID > 0) | ||||
| 			{ | ||||
| 				var index:int = childID < MAX_NUM ? | ||||
| 								childID - 1 : | ||||
| 								childID - MAX_NUM - 1; | ||||
| 								 | ||||
| 				TabBar(master).selectedIndex = index; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * Method to return the childID Array. | ||||
| 		 * | ||||
| 		 * @return Array | ||||
| 		 */ | ||||
| 		override public function getChildIDArray():Array | ||||
| 		{ | ||||
| 			var childIDs:Array = []; | ||||
| 			 | ||||
| 			var n:int = TabBar(master).numChildren; | ||||
| 			for(var i:int = 0; i < n; i++) | ||||
| 			{ | ||||
| 				childIDs[i] = i + 1; | ||||
| 			} | ||||
| 			 | ||||
| 			return childIDs; | ||||
| 		} | ||||
|  | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * IAccessible method for returning the bounding box of the Tabs. | ||||
| 		 *  | ||||
| 		 * @param childID The child id | ||||
| 		 * | ||||
| 		 * @return Object Location | ||||
| 		 */ | ||||
| 		override public function accLocation(childID:uint):* | ||||
| 		{ | ||||
| 			var index:int = childID < MAX_NUM ? | ||||
| 							childID - 1 : | ||||
| 							childID - MAX_NUM - 1; | ||||
|  | ||||
| 			return TabBar(master).getChildAt(index); | ||||
| 		} | ||||
|  | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * IAccessible method for returning the childFocus of the TabBar. | ||||
| 		 * | ||||
| 		 * @param childID uint | ||||
| 		 * | ||||
| 		 * @return focused childID. | ||||
| 		 */ | ||||
| 		override public function get_accFocus():uint | ||||
| 		{ | ||||
| 			var index:int = TabBar(master).focusIndex; | ||||
| 			 | ||||
| 			if(index >= 0) | ||||
| 			{ | ||||
| 				return index + 1; | ||||
| 			} | ||||
| 			return 0; | ||||
| 		} | ||||
| 		 | ||||
| 	//-------------------------------------- | ||||
| 	//  Protected Methods | ||||
| 	//-------------------------------------- | ||||
|  | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * method for returning the name of the Tab | ||||
| 		 * which is spoken out by the screen reader. | ||||
| 		 * | ||||
| 		 * @param childID The child id. | ||||
| 		 * | ||||
| 		 * @return Name | ||||
| 		 */ | ||||
| 		override protected function getName(childID:uint):String | ||||
| 		{ | ||||
| 			if(childID == 0) | ||||
| 			{ | ||||
| 				return ""; | ||||
| 			} | ||||
|  | ||||
| 			var name:String; | ||||
|  | ||||
| 			var tabBar:TabBar = TabBar(master); | ||||
| 			 | ||||
| 			// Assuming childID is always ItemID + 1 | ||||
| 			// because getChildIDArray is not always invoked. | ||||
| 			var index:int = childID < MAX_NUM ? | ||||
| 							childID - 1 : | ||||
| 							childID - MAX_NUM - 1; | ||||
| 			 | ||||
| 			var item:TabButton = TabButton(tabBar.getChildAt(index)); | ||||
|  | ||||
| 			name = item.label; | ||||
|  | ||||
| 			return name; | ||||
| 		} | ||||
| 		 | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * Override the generic event handler. | ||||
| 		 * All AccImpl must implement this to listen for events | ||||
| 		 * from its master component.  | ||||
| 		 */ | ||||
| 		override protected function eventHandler(event:Event):void | ||||
| 		{ | ||||
| 			switch (event.type) | ||||
| 			{ | ||||
| 				case "change": | ||||
| 					this.updateSelection(TabBar(master).selectedIndex); | ||||
| 					break; | ||||
| 				case "focusUpdate": | ||||
| 					this.updateFocus(TabBar(master).focusIndex); | ||||
| 					break; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * Tells the client that a tab has been selected. | ||||
| 		 */ | ||||
| 		protected function updateSelection(index:int):void | ||||
| 		{ | ||||
| 			 if(index < 0 || !Accessibility.active) | ||||
| 			{ | ||||
| 				return; | ||||
| 			}  | ||||
| 			 | ||||
| 			var childID:uint = index + 1; | ||||
| 			Accessibility.sendEvent(master, childID, EventTypes.EVENT_OBJECT_FOCUS); | ||||
| 			Accessibility.sendEvent(master, childID, EventTypes.EVENT_OBJECT_SELECTION); | ||||
| 			//Accessibility.updateProperties(); | ||||
| 		} | ||||
| 		 | ||||
| 		/** | ||||
| 		 * @private | ||||
| 		 * Tells the client that a tab has been focused. | ||||
| 		 */ | ||||
| 		protected function updateFocus(index:int):void | ||||
| 		{ | ||||
| 			 if(index < 0 || !Accessibility.active) | ||||
| 			{ | ||||
| 				return; | ||||
| 			}  | ||||
| 			 | ||||
| 			var childID:uint = index + 1; | ||||
| 			Accessibility.sendEvent(master, childID, EventTypes.EVENT_OBJECT_FOCUS); | ||||
| 			//Accessibility.updateProperties(); | ||||
| 		} | ||||
| 	}	 | ||||
| } | ||||
							
								
								
									
										431
									
								
								com/yahoo/astra/fl/accessibility/TreeAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										431
									
								
								com/yahoo/astra/fl/accessibility/TreeAccImpl.as
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,431 @@ | ||||
| /* | ||||
| Copyright (c) 2009 Yahoo! Inc.  All rights reserved.   | ||||
| The copyrights embodied in the content of this file are licensed under the BSD (revised) open source license | ||||
| */ | ||||
| package com.yahoo.astra.fl.accessibility | ||||
| { | ||||
| import com.yahoo.astra.accessibility.EventTypes; | ||||
| import com.yahoo.astra.accessibility.ObjectRoles; | ||||
| import com.yahoo.astra.accessibility.ObjectStates; | ||||
|  | ||||
| import com.yahoo.astra.fl.controls.Tree; | ||||
| import com.yahoo.astra.fl.controls.treeClasses.BranchNode; | ||||
| import com.yahoo.astra.fl.controls.treeClasses.TNode; | ||||
| import com.yahoo.astra.fl.events.TreeEvent; | ||||
|  | ||||
| import fl.accessibility.SelectableListAccImpl; | ||||
| import fl.controls.listClasses.ICellRenderer; | ||||
| import fl.core.UIComponent; | ||||
|  | ||||
| import flash.accessibility.Accessibility; | ||||
| import flash.events.Event; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * The TreeAccImpl class, also called the Tree Accessiblity Implementation class,  | ||||
|  * is used to make a Tree component accessible. | ||||
|  *  | ||||
|  * <p>The TreeAccImpl class supports system roles, object-based events, and states.</p> | ||||
|  *  | ||||
|  * <p>A Tree reports the role <code>ObjectRoles.ROLE_SYSTEM_OUTLINE</code> (0x23) to a screen  | ||||
|  * reader. Items of a Tree report the role <code>ObjectRoles.ROLE_SYSTEM_OUTLINEITEM</code> (0x24).</p> | ||||
|  * | ||||
|  * | ||||
|  * @see com.yahoo.astra.fl.controls.Tree | ||||
|  * @see http://msdn.microsoft.com/en-us/library/ms697605(VS.85).aspx Microsoft Accessibility Developer Center User Interface Element Reference: Tree View Control | ||||
|  *  | ||||
|  * @author Alaric Cole | ||||
|  */ | ||||
| public class TreeAccImpl extends SelectableListAccImpl | ||||
| { | ||||
|  | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	// | ||||
| 	//  Class initialization | ||||
| 	// | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	 | ||||
| 	/** | ||||
| 	 *  Static variable triggering the <code>hookAccessibility()</code> method. | ||||
| 	 *  This is used for initializing <code>TreeAccImpl</code> class to hook its | ||||
| 	 *  <code>createAccessibilityImplementation()</code> method to the <code>Tree</code> class  | ||||
| 	 *  before it gets called when <code>UIComponent</code> invokes the <code>initializeAccessibility()</code> method. | ||||
| 	 *  | ||||
| 	 *  @see fl.accessibility.UIComponent#createAccessibilityImplementation() | ||||
| 	 *  @see fl.accessibility.UIComponent#initializeAccessibility() | ||||
| 	 *  @see fl.accessibility.UIComponent#initialize() | ||||
| 	 */ | ||||
| 	private static var accessibilityHooked:Boolean = hookAccessibility(); | ||||
| 	 | ||||
| 	/** | ||||
| 	 *  Static method that swaps the <code>createAccessibilityImplementation()</code> | ||||
| 	 *  method of <code>UIComponent</code> subclass with the appropriate <code>AccImpl</code> subclass. | ||||
| 	 *  | ||||
| 	 *  @see fl.accessibility.UIComponent#createAccessibilityImplementation() | ||||
| 	 *  @see fl.accessibility.UIComponent#initializeAccessibility() | ||||
| 	 *  @see fl.accessibility.UIComponent#initialize() | ||||
| 	 */ | ||||
| 	private static function hookAccessibility():Boolean | ||||
| 	{ | ||||
| 		Tree.createAccessibilityImplementation = createAccessibilityImplementation; | ||||
|  | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	// | ||||
| 	//  Enabling Accessibility | ||||
| 	// | ||||
| 	//-------------------------------------------------------------------------- | ||||
|  | ||||
| 	/** | ||||
| 	 *  Method for creating the Accessibility Implementation class for a component. | ||||
| 	 *  <p>This method is called by the <code>initializeAccessibility()</code> method for the <code>UIComponent</code>  | ||||
| 	 *  subclass when the component initializes.</p> | ||||
| 	 *  <p>All <code>AccImpl</code> subclasses must implement this method</p> | ||||
| 	 *  | ||||
| 	 *  @param component The UIComponent instance that this TreeAccImpl instance makes accessible. | ||||
| 	 *  | ||||
| 	 *  @see fl.accessibility.AccImpl#createAccessibilityImplementation() | ||||
| 	 *  @see fl.core.UIComponent#createAccessibilityImplementation()  | ||||
| 	 *  @see fl.core.UIComponent#initalizeAccessibility() | ||||
| 	 *  @see fl.core.UIComponent#initialize() | ||||
| 	 */ | ||||
| 	public static function createAccessibilityImplementation(component:UIComponent):void | ||||
| 	{ | ||||
| 		component.accessibilityImplementation = new TreeAccImpl(component); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Method call for enabling accessibility for a component. | ||||
| 	 *  This method is required for the compiler to activate the accessibility classes for a component. | ||||
| 	 */ | ||||
| 	public static function enableAccessibility():void | ||||
| 	{ | ||||
| 		//empty | ||||
| 	} | ||||
|  | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	// | ||||
| 	//  Constructor | ||||
| 	// | ||||
| 	//-------------------------------------------------------------------------- | ||||
|  | ||||
| 	/** | ||||
| 	 * Creates a new TreeAccImpl instance for the specified Tree component. | ||||
| 	 * | ||||
| 	 * @param master The UIComponent instance that this TreeAccImpl instance is making accessible. | ||||
| 	 *  | ||||
| 	 */ | ||||
| 	public function TreeAccImpl(master:UIComponent) | ||||
| 	{ | ||||
| 		super(master); | ||||
|  | ||||
| 		role = ObjectRoles.ROLE_SYSTEM_OUTLINE; | ||||
| 	} | ||||
|  | ||||
|  | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	//  Role | ||||
| 	//-------------------------------------------------------------------------- | ||||
|  | ||||
| 	/** | ||||
| 	 * @inheritDoc | ||||
| 	 * @see http://msdn.microsoft.com/en-us/library/ms697605(VS.85).aspx Microsoft Accessibility Developer Center User Interface Element Reference: Tree View Control | ||||
| 	 *  | ||||
| 	 */ | ||||
| 	override public function get_accRole(childID:uint):uint | ||||
| 	{ | ||||
| 		//return the Tree's role itself, or the role of the items | ||||
| 		if (childID == 0) | ||||
| 		{ | ||||
| 			return role;			 | ||||
| 		} | ||||
|  | ||||
| 		return ObjectRoles.ROLE_SYSTEM_OUTLINEITEM; | ||||
| 	} | ||||
|  | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	//  Name | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	 | ||||
| 	/** | ||||
| 	 *  @inheritDoc | ||||
| 	 */ | ||||
| 	override protected function getName(childID:uint):String | ||||
| 	{ | ||||
| 		if (childID == 0) | ||||
| 			return ""; | ||||
|  | ||||
| 		var name:String = ""; | ||||
| 		 | ||||
| 		var tree:Tree = Tree(master); | ||||
|  | ||||
| 		var index:int = childID - 1; | ||||
| 		if (index > -1) | ||||
| 		{ | ||||
| 			var item:Object = tree.dataProvider.getItemAt(index); | ||||
| 			if (!item) | ||||
| 				return name; | ||||
| 		 | ||||
| 		 | ||||
| 			if (tree.itemToLabel(item)) | ||||
| 				name = tree.itemToLabel(item); | ||||
|  | ||||
| 			name += getLocationDescription(item); | ||||
| 		} | ||||
| 			 | ||||
| 		return name; | ||||
| 	} | ||||
| 	 | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	//  Value | ||||
| 	//-------------------------------------------------------------------------- | ||||
|  | ||||
| 	/** | ||||
| 	 *  @inheritDoc | ||||
| 	 *  @see http://msdn.microsoft.com/en-us/library/ms697605(VS.85).aspx Microsoft Accessibility Developer Center User Interface Element Reference: Tree View Control | ||||
| 	 */ | ||||
| 	override public function get_accValue(childID:uint):String | ||||
| 	{ | ||||
| 		var accValue:String = ""; | ||||
| 		 | ||||
| 		var tree:Tree = Tree(master); | ||||
| 		var index:int; | ||||
| 		var item:Object; | ||||
|  | ||||
| 		if (childID == 0) | ||||
| 		{ | ||||
| 			index = tree.selectedIndex; | ||||
| 			if (index > -1) | ||||
| 			{ | ||||
| 				item = tree.dataProvider.getItemAt(index); | ||||
| 				if (!item) | ||||
| 					return accValue; | ||||
| 				 | ||||
| 				if (tree.itemToLabel(item)) | ||||
| 					accValue = tree.itemToLabel(item) | ||||
| 					 | ||||
| 				//return the item plus its location | ||||
| 				accValue += getLocationDescription(item); | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			index = childID - 1; | ||||
| 			if (index > -1) | ||||
| 			{ | ||||
| 				item = tree.dataProvider.getItemAt(index); | ||||
| 				if (!item) | ||||
| 					return accValue; | ||||
| 				var node:TNode = item as TNode; | ||||
| 				accValue = node.nodeLevel + 1 + ""; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		return accValue; | ||||
| 	} | ||||
|  | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	//  State | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	 | ||||
| 	/** | ||||
| 	 *  @inheritDoc | ||||
| 	 *  @see http://msdn.microsoft.com/en-us/library/ms697605(VS.85).aspx Microsoft Accessibility Developer Center User Interface Element Reference: Tree View Control | ||||
| 	 */ | ||||
| 	override public function get_accState(childID:uint):uint | ||||
| 	{ | ||||
| 		var accState:uint = getState(childID); | ||||
| 		 | ||||
| 		if (childID > 0) | ||||
| 		{ | ||||
| 			var tree:Tree = Tree(master); | ||||
|  | ||||
| 			var index:int = childID - 1; | ||||
|  | ||||
| 			if (index < tree.verticalScrollPosition || | ||||
| 				index >= tree.verticalScrollPosition + tree.rowCount) | ||||
| 			{ | ||||
| 				accState |= ObjectStates.STATE_SYSTEM_INVISIBLE; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				accState |= ObjectStates.STATE_SYSTEM_SELECTABLE; | ||||
|  | ||||
| 				var item:Object = tree.dataProvider.getItemAt(index); | ||||
| 				var node:TNode = item as TNode; | ||||
| 		 | ||||
| 				if (item && item is BranchNode) | ||||
| 				{ | ||||
| 					if (BranchNode(item).isOpen()) | ||||
| 						accState |= ObjectStates.STATE_SYSTEM_EXPANDED; | ||||
| 					else | ||||
| 						accState |= ObjectStates.STATE_SYSTEM_COLLAPSED; | ||||
| 				} | ||||
|  | ||||
| 				var renderer:ICellRenderer = tree.itemToCellRenderer(item); | ||||
|  | ||||
| 				if (renderer != null && tree.isItemSelected(renderer.data)) | ||||
| 					accState |= ObjectStates.STATE_SYSTEM_SELECTED | ObjectStates.STATE_SYSTEM_FOCUSED; | ||||
| 			} | ||||
| 		} | ||||
| 		return accState; | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 *	@inheritDoc | ||||
| 	 */ | ||||
| 	override protected function get eventsToHandle():Array | ||||
| 	{ | ||||
| 		return super.eventsToHandle.concat([TreeEvent.ITEM_CLOSE, TreeEvent.ITEM_OPEN]); | ||||
| 	} | ||||
| 	 | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	// | ||||
| 	//  Event Handler | ||||
| 	// | ||||
| 	//-------------------------------------------------------------------------- | ||||
|  | ||||
| 	/** | ||||
| 	 *  @private | ||||
| 	 *  Override the generic event handler. | ||||
| 	 *  All AccImpl must implement this to listen for events from its master component.  | ||||
| 	 *  Here we add a few events. | ||||
| 	 *  | ||||
|      *  @param event The event object | ||||
|      */ | ||||
| 	override protected function eventHandler(event:Event):void | ||||
| 	{ | ||||
| 		var index:int = Tree(master).selectedIndex; | ||||
| 		 | ||||
| 		var childID:uint = index + 1; | ||||
|  | ||||
| 		switch (event.type) | ||||
| 		{ | ||||
| 			case Event.CHANGE: | ||||
| 			{ | ||||
| 				if (index >= -1) | ||||
| 				{ | ||||
| 					if(Accessibility.active)  | ||||
| 					{ | ||||
| 						Accessibility.sendEvent(master, childID, | ||||
| 												EventTypes.EVENT_OBJECT_FOCUS); | ||||
| 	 | ||||
| 						Accessibility.sendEvent(master, childID, | ||||
| 												EventTypes.EVENT_OBJECT_SELECTION); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 										 | ||||
| 			case TreeEvent.ITEM_OPEN: | ||||
| 			case TreeEvent.ITEM_CLOSE: | ||||
| 			{ | ||||
| 				if (index >= -1) | ||||
| 				{ | ||||
| 					if(Accessibility.active)  | ||||
| 					{ | ||||
| 						Accessibility.sendEvent(master, childID, | ||||
| 											EventTypes.EVENT_OBJECT_STATECHANGE); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			}  | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	//  Default Action | ||||
| 	//-------------------------------------------------------------------------- | ||||
| 	 | ||||
| 	/** | ||||
| 	 *  @inheritDoc | ||||
| 	 */ | ||||
| 	override public function get_accDefaultAction(childID:uint):String | ||||
| 	{ | ||||
| 		if (childID == 0) | ||||
| 			return null; | ||||
|  | ||||
| 		var tree:Tree = Tree(master); | ||||
|  | ||||
| 		var item:Object = tree.dataProvider.getItemAt(childID - 1); | ||||
| 		if (!item) | ||||
| 			return null; | ||||
| 		 | ||||
| 		if ( item is BranchNode) | ||||
| 			return BranchNode(item).isOpen() ? "Collapse" : "Expand"; | ||||
|  | ||||
| 		return null; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @inheritDoc | ||||
| 	 */ | ||||
| 	override public function accDoDefaultAction(childID:uint):void | ||||
| 	{ | ||||
| 		var tree:Tree = Tree(master); | ||||
|  | ||||
| 		if (childID == 0 || !tree.enabled) | ||||
| 			return; | ||||
|  | ||||
| 		var item:Object = tree.dataProvider.getItemAt(childID - 1); | ||||
| 		 | ||||
| 		if (!item) | ||||
| 			return; | ||||
| 		 | ||||
| 		if (item is BranchNode) | ||||
| 		{ | ||||
| 			var node:BranchNode = item as BranchNode; | ||||
| 			 | ||||
| 			if(node.isOpen()) node.closeNode(); | ||||
| 			else node.openNode(); | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 *  Returns a string with information about the location of a node within a tree structure.  | ||||
| 	 *  | ||||
| 	 * <p>E.g. "[item] 2 of 12 [items]"</p> | ||||
| 	 * | ||||
| 	 *  @param item Object | ||||
| 	 * | ||||
| 	 *  @return String. | ||||
| 	 */ | ||||
| 	private function getLocationDescription(item:Object):String | ||||
| 	{ | ||||
|  		var tree:Tree = Tree(master); | ||||
| 		var i:int = 0; | ||||
| 		var n:int = 0; | ||||
|  | ||||
| 		var node:TNode = item as TNode; | ||||
| 		var parent:BranchNode = node.parentNode; | ||||
| 		var childNodes:Array =  parent.children; | ||||
| 		 | ||||
| 		if (childNodes) | ||||
| 		{ | ||||
| 			n = childNodes.length; | ||||
| 			for (i = 0; i < n; i++) | ||||
| 			{ | ||||
| 				//get the index of this node, in relation to sibling nodes | ||||
| 				if (item == childNodes[i]) | ||||
| 					break; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		 | ||||
| 		if (i == n) | ||||
| 			i = 0; | ||||
|  | ||||
| 		//make it 1-based. | ||||
| 		if (n > 0) | ||||
| 			i++; | ||||
| 		 | ||||
| 		return ", " + i + " of " + n;  | ||||
| 	} | ||||
|  | ||||
|  | ||||
| } | ||||
|  | ||||
| } | ||||
							
								
								
									
										5
									
								
								com/yahoo/astra/fl/accessibility/VolumeSliderAccImpl.as
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								com/yahoo/astra/fl/accessibility/VolumeSliderAccImpl.as
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,5 @@ | ||||
| /* | ||||
| Copyright (c) 2009 Yahoo! Inc.  All rights reserved.   | ||||
| The copyrights embodied in the content of this file are licensed under the BSD (revised) open source license | ||||
| */ | ||||
| package com.yahoo.astra.fl.accessibility  | ||||
		Reference in New Issue
	
	Block a user