The PFiddlesoft Frameworks include the PFAssistive Framework and the PFEventTaps Framework.
The PFAssistive Framework was created in 2003 as the engine driving PFiddlesoft’s highly regarded UI Browser application for developers and for users of Apple’s AppleScript GUI Scripting technology. The framework supports and enhances Apple's Accessibility API.
The Accessibility API implements the concept of a UI element, an object that represents a user interface element on the screen in any running application, such as a menu, a window, or a button, or the application itself. The Accessibility API also implements the concept of an observer, an object that registers to observe a UI element that issues Accessibility notifications when changes occur.
The PFAssistive Framework implements these same concepts in its PFUIElement, PFApplicationUIElement, and PFObserver classes, each of which instantiates and encapsulates an associated Accessibility API object and makes its capabilities available to an assistive application using standard Objective-C and Cocoa techniques. For example, an assistive application using the PFAssistive Framework can implement optional delegate methods declared in the framework’s PFUIElementDelegate and PFObserverDelegate formal protocols to observe Accessibility notifications. The framework bundle includes our Assistive Application Programming Guide for Mac OS X 1.4 and a detailed PFAssistive Framework Reference, as well as the distribution license.
With the PFAssistive Framework, an assistive application discovers UI elements, reads UI element attributes, and controls UI elements and, through them, the target application, all in the interest of supporting assistive applications that enable a user with disabilities to use the computer to perform the same tasks that any user can perform with the graphical user interface. An assistive application typically does this by performing these tasks:
- An assistive application discovers individual UI elements in the target application in one of three ways: by locating an element on the screen, for example, the element currently under the mouse or the element that is the target application’s frontmost window; by receiving a notification from an element that something about it has just changed; or by navigating the element hierarchy from a known starting point.
- When an assistive application discovers a UI element of potential interest, it ascertains the element’s identity and nature by reading its attributes, such as its role, its title, and its position and size on the screen.
- Once it identifies and understands a UI element, an assistive application manipulates or controls the element and, through it, the target application, at the user's direction. There are three ways to do this, depending on the nature of the element: by setting the element's value or other attribute; by performing an action on the element; or by sending a keystroke to the target application while the element has keyboard focus (or by sending a key combination that the application recognizes as a keyboard shortcut).
By performing these tasks—discovering, reading, and controlling a UI element—an assistive application enables a user with disabilities to do everything that a user without disabilities can do with the target application.
The PFEventTaps Framework was created in 2007 as the engine underlying PFiddlesoft’s free Event Taps Testbench utility for developers. The framework supports and enhances Apple's Quartz Event Taps API.
The Event Taps API implements the three concepts of an event tap to monitor and intercept user input events, an event source such as a mouse, keyboard, scroll wheel, tablet, tablet pointer, or virtual input device, and a user input event that is generated by an event source.
The PFEventTaps Framework implements these same concepts in its PFEventTap, PFEventSource, and PFEvent classes, each of which instantiates and encapsulates an associated Event Taps API object and makes its capabilities available to an assistive application using standard Objective-C and Cocoa techniques. For example, an assistive application using the PFEventTaps Framework can implement optional delegate methods declared in the framework’s PFEventTapsDelegate formal protocol to observe Quartz events as they are generated by user input devices and virtual devices, and to filter, modify, block, and respond to the events. The framework bundle includes our Assistive Application Programming Guide for Mac OS X 1.4 and a detailed PFEventTaps Framework Reference, as well as the distribution license.
With the PFEventTaps Framework, an assistive application monitors user input events generated by devices such as a mouse, a keyboard, or a tablet, and it filters, modifies, blocks, and responds to user input events and generates additional synthetic events, all in the interest of supporting assistive devices and applications that enable a user with disabilities to use the computer to perform the same tasks that any user can perform. An assistive application typically does this by performing these tasks:
- An assistive application creates and installs a PFEventTap object that intercepts user input events at one of several points in the system's low-level event handling machinery. It sends delegate messages or callbacks to an assistive application to enable it to filter, modify, block, and respond to the events.
- An assistive application retrieves a PFEvent object that represents a user input event generated by an event source and reported to an assistive application by an installed event tap. The application uses the PFEvent object to filter, modify, block, and respond to the event. It can also respond to the event by sending additional synthetic events before or after the received event and by taking other actions.
- An assistive application creates PFEvent objects that post independent synthetic user input events, for example, from a virtual onscreen keyboard.
- An assistive application retrieves or creates a PFEventSource object that represents a user input device such as a mouse, keyboard, scroll wheel, tablet, or tablet pointer, or a virtual device. An event source reports current state information about the associated device outside of the event stream.
The two frameworks are independent of one another. Both together enable you to write a full-featured assistive application, but you may need only one or the other to accomplish more limited purposes.
For detailed instructions and sample code, read or download our Assistive Application Programming Guide for Mac OS X 1.4, a 38-page PDF document explaining how to use both of the PFiddlesoft Frameworks to write assistive applications, with sample code. Also download the PFAssistive Framework Reference and the PFEventTaps Framework Reference for detailed documentation of all of the frameworks' classes, protocols, and methods. The Programming Guide is also included in both framework bundles along with detailed framework references. Download the source code for our free Event Taps Testbench developer utility in the form of an Xcode 3.2 project file, to serve as example code showing how to use the PFEventTaps framework.
This page was first published by PFiddlesoft on May 25, 2010. Last updated October 23, 2011
Copyright © 2003-2010 Bill Cheeseman. Used by permission. All Rights Reserved.
PFiddlesoft, PFiddle Software, pfiddle, pfiddles, the PFiddlesoft logo, Wheel of Access, and Applidude are trademarks of PreForm Assistive Technologies, LLC.