There are around two million blind people in the UK alone, and most computer applications are not really designed with them in mind. Even when there are accessibility features, or when a screen reader is available, accessibility is still a bit of an after-thought. Complex user interfaces take a blind user a lot of time to learn and navigate. So instead of trying to make an existing interface accessible, another approach is to replace the UI entirely with a custom-built one - or add an second method of accessing most of the important functionality.
To this end, I've started AxTk, a new open source project hosted here: http://code.google.com/p/axtk/
AxTk is built on top of wxWidgets and will help you create a menu-based, highly accessible user interface with speech output, mainly for use by visually impaired people. The menu provides a very uniform method of navigation. By menu, I don't mean a menubar or context menu that you find in most applications; instead AxTk uses a list control, refreshed as required to reflect the underlying menu structure. The menus is dynamically extended as the user navigates through the application, and modal (blocking) menu selection is supported when necessary. An example of this is the AxFileMenuItem component, which shows a file hierarchy when clicked and sets a string value to the selected path.
The basic user interface of an AxTk application is likely to consist of the menu, a menu title, a description of the current selection, and a view area for showing contents of an item. Obviously, views should be designed carefully to be navigable using the keyboard. A simple application might get away with text-only views that can be easily spoken.
While much of an application's functionality can be translated into menu selections, not all of it can, and AxTk will also provide speech output for more conventional parts of the interface.
Speech output is provided by the wxTextToSpeech class, which is a wrapper around a variety of alternative external speech engines, such as SAPI, eSpeak and Cepstral. You can quite easily add handlers for further engines.
There's a layer above the basic AxTk UI classes, for building applications based around a library of resources. A resource could be an audio file, an e-book, a text file, a utility or a web service. By dealing with all these objects in a uniform way, we complement the uniformity of the menu-based interface, as well as help developers get a running start in building their own applications.
Here's a screenshot of the basic AxTk sample, showing the standard UI elements as provided by AxContainerCtrl, apart from the button bar along the top which is part of the sample:
AxTk's reference manual is here (it's a work in progress, as is AxTk). You can try building the sample applications (a simple menu sample, a sample using the resource library, and a text to speech sample), for which you'll need to get a copy of DialogBlocks. If you're interested in collaborating, or if you have questions or comments, do drop me a line.