5 lines
6.9 KiB
ActionScript
Executable File
5 lines
6.9 KiB
ActionScript
Executable File
/*
|
||
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.MenuBar;
|
||
import com.yahoo.astra.fl.events.MenuEvent;
|
||
|
||
import fl.accessibility.AccImpl;
|
||
import fl.core.UIComponent;
|
||
|
||
import flash.accessibility.Accessibility;
|
||
import flash.events.Event;
|
||
|
||
|
||
|
||
/**
|
||
* The MenuBarAccImpl class is the accessibility class for MenuBar.
|
||
*
|
||
* @author Alaric Cole
|
||
*/
|
||
public class MenuBarAccImpl extends AccImpl
|
||
{
|
||
|
||
//--------------------------------------------------------------------------
|
||
//
|
||
// Class initialization
|
||
//
|
||
//--------------------------------------------------------------------------
|
||
|
||
/**
|
||
* @private
|
||
* Static variable triggering the hookAccessibility() method.
|
||
* This is used for initializing MenuBarAccImpl class to hook its
|
||
* createAccessibilityImplementation() method to MenuBar class
|
||
* before it gets called from UIComponent.
|
||
*/
|
||
private static var accessibilityHooked:Boolean = hookAccessibility();
|
||
|
||
/**
|
||
* @private
|
||
* Static method for swapping the createAccessibilityImplementation()
|
||
* method of MenuBar with the MenuBarAccImpl class.
|
||
*/
|
||
private static function hookAccessibility():Boolean
|
||
{
|
||
MenuBar.createAccessibilityImplementation = createAccessibilityImplementation;
|
||
|
||
return true;
|
||
}
|
||
|
||
//--------------------------------------------------------------------------
|
||
//
|
||
// Class methods
|
||
//
|
||
//--------------------------------------------------------------------------
|
||
|
||
/**
|
||
* @private
|
||
* Method for creating the Accessibility class.
|
||
* This method is called from UIComponent.
|
||
* @review
|
||
*/
|
||
private static function createAccessibilityImplementation(component:UIComponent):void
|
||
{
|
||
component.accessibilityImplementation = new MenuBarAccImpl(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
|
||
{
|
||
|
||
}
|
||
|
||
//--------------------------------------------------------------------------
|
||
//
|
||
// Constructor
|
||
//
|
||
//--------------------------------------------------------------------------
|
||
|
||
/**
|
||
* Constructor.
|
||
*
|
||
* @param master The UIComponent instance that this AccImpl instance
|
||
* is making accessible.
|
||
*/
|
||
public function MenuBarAccImpl(master:UIComponent)
|
||
{
|
||
super(master);
|
||
|
||
role = ObjectRoles.ROLE_SYSTEM_MENUBAR;//0x02;
|
||
}
|
||
|
||
|
||
/**
|
||
* @private
|
||
* Array of events that we should listen for from the master component.
|
||
*/
|
||
override protected function get eventsToHandle():Array
|
||
{
|
||
return super.eventsToHandle.concat(
|
||
[ "menuShow", "menuHide", "focusIn", "focusOut" ]);
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
override public function get_accRole(childID:uint):uint
|
||
{
|
||
if (childID == 0)
|
||
return role;
|
||
|
||
return ObjectRoles.ROLE_SYSTEM_MENUITEM;
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
override public function get_accState(childID:uint):uint
|
||
{
|
||
var accState:uint = getState(childID);
|
||
|
||
if (childID > 0)
|
||
{
|
||
var menuBar:MenuBar = MenuBar(master);
|
||
|
||
var index:int = childID - 1;
|
||
|
||
if (!menuBar.menus[index] || !menuBar.menus[index].enabled)
|
||
{
|
||
accState |= ObjectStates.STATE_SYSTEM_UNAVAILABLE;
|
||
}
|
||
else
|
||
{
|
||
accState |= ObjectStates.STATE_SYSTEM_SELECTABLE | ObjectStates.STATE_SYSTEM_FOCUSABLE;
|
||
|
||
if (index == menuBar.selectedIndex)
|
||
accState |= ObjectStates.STATE_SYSTEM_HOTTRACKED | ObjectStates.STATE_SYSTEM_FOCUSED;
|
||
}
|
||
}
|
||
return accState;
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
override public function get_accDefaultAction(childID:uint):String
|
||
{
|
||
if (childID == 0)
|
||
return null;
|
||
|
||
//return childID - 1 == MenuBar(master).selectedIndex ? "Close" : "Open";
|
||
return "Open";
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
override public function accDoDefaultAction(childID:uint):void
|
||
{
|
||
if (childID > 0)
|
||
{
|
||
var index:int = childID - 1;
|
||
//MenuBar(master).selectedIndex = index;
|
||
//MenuBar(master).showMenu(index);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
override public function getChildIDArray():Array
|
||
{
|
||
var childIDs:Array = [];
|
||
|
||
if (MenuBar(master).menus)
|
||
{
|
||
var n:int = MenuBar(master).menus.length;
|
||
for (var i:int = 0; i < n; i++)
|
||
{
|
||
childIDs[i] = i + 1;
|
||
}
|
||
}
|
||
return childIDs;
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
override public function accLocation(childID:uint):*
|
||
{
|
||
//should check that this is returning the needed component
|
||
return MenuBar(master).menus[childID - 1];
|
||
//return MenuBar(master).getMenuBarItemAt(childID - 1);
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
override public function get_accFocus():uint
|
||
{
|
||
var index:int = 0//MenuBar(master).selectedIndex;
|
||
|
||
return index >= 0 ? index + 1 : 0;
|
||
}
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
override protected function getName(childID:uint):String
|
||
{
|
||
if (childID == 0)
|
||
return "";
|
||
var menuBar:MenuBar = MenuBar(master);
|
||
var index:int = childID - 1;
|
||
|
||
/* if (menuBar.menus && menuBar.menus.length > index)
|
||
{
|
||
if (menuBar.menus[index] && menuBar.menus[index].dataProvider)
|
||
return Menu(null).itemToLabel(menuBar.menus[index].data);
|
||
}
|
||
*/
|
||
return "MenuBar";
|
||
}
|
||
|
||
|
||
/**
|
||
* @inheritDoc
|
||
*/
|
||
override public function get_accValue(childID:uint):String
|
||
{
|
||
if (childID > 0)
|
||
return "";
|
||
|
||
var menuBar:MenuBar = MenuBar(master);
|
||
var accValue:String = "MenuBar";
|
||
|
||
var selectedIndex:int = menuBar.selectedIndex;
|
||
if (selectedIndex > -1)
|
||
{
|
||
var item:Object = menuBar.menus[selectedIndex];
|
||
|
||
accValue = item.toString();
|
||
}
|
||
|
||
return accValue;
|
||
}
|
||
|
||
/**
|
||
* @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 "menuShow":
|
||
{
|
||
var index:int = 0; //MenuBar(master).selectedIndex;
|
||
|
||
if(Accessibility.active)
|
||
{
|
||
if (index >= 0 && !MenuEvent(event).menu.parentMenu)
|
||
{
|
||
var childID:uint = index + 1;
|
||
|
||
Accessibility.sendEvent(master, childID, EventTypes.EVENT_OBJECT_FOCUS);
|
||
|
||
Accessibility.sendEvent(master, childID, EventTypes.EVENT_OBJECT_SELECTION);
|
||
}
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
case "menuHide":
|
||
{
|
||
if (!MenuEvent(event).menu.parentMenu)
|
||
if(Accessibility.active)
|
||
{
|
||
Accessibility.sendEvent(master, 0, EventTypes.EVENT_OBJECT_MENUPOPUPEND);
|
||
}
|
||
break;
|
||
}
|
||
|
||
case "focusIn":
|
||
{
|
||
if(Accessibility.active)
|
||
{
|
||
Accessibility.sendEvent(master, 0, EventTypes.EVENT_OBJECT_SELECTION);
|
||
}
|
||
break;
|
||
}
|
||
|
||
/* case "focusOut":
|
||
{
|
||
if (MenuBar(master).selectedIndex == -1)
|
||
{
|
||
if(Accessibility.active)
|
||
{
|
||
Accessibility.sendEvent(master, 0, EventTypes.EVENT_OBJECT_MENUPOPUPEND);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
*/
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|