Accessibility/Traversal

From MozillaWiki
Jump to: navigation, search

This page outlines a proposed core API for accessible tree traversal and document navigation.

nsIAccessibleTreeWalker

interface nsIAccessibleTreeWalker : nsISupports
{
  readonly attribute nsIAccessible          root;
  readonly attribute nsIAccessibleFilter    filter;
           attribute nsIAccessible          currentNode;
  
  short              setFilter(in nsIAccessibleFilter    filter);
  
  /* linear navigation */
  nsIAccessible      previous();
  nsIAccessible      next();
  nsIAccessible      first();
  nsIAccessible      last();
}

nsIAccessibleFilter

interface nsIAccessibleFilter : nsISupports
{
  const short FILTER_ACCEPT = 1;
  const short FILTER_REJECT = 2;
  const short FILTER_SKIP = 3;
 
  static nsIArray roles;
  static nsIArray states;
 
  short acceptAccessible(in nsIAccessible acc);
}

Retrieving and Creating Walkers

interface nsIAccessibleRetrieval : nsISupports
{
  ...
  
  nsIAccessibleTreeWalker createTreeWalker(in nsIAccessible root, 
                                           in nsIAccessibleFilter filter); 
}

Example Usage

Some examples of how this API would be used.

Link Navigation

// Create filter
var LinkFilter = {
  roles = [Components.interfaces.nsIAccessibleRole.ROLE_LINK]
  QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIAccessibleFilter])
}

// Create tree walker
var gAccRetrieval = Cc["@mozilla.org/accessibleRetrieval;1"]
   .getService(Ci.nsIAccessibleRetrieval);
var treeWalker = gAccRetrieval.createTreeWalker(docAcc, LinkFilter);

// Walk it
docAcc.getTreeWalker().next();