blob: 7ced95cdd14450e7405778404098696391568993 [file] [log] [blame]
<html><head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
<body>
<h2>Impress and Draw Accessibility</h2>
<p>Proposal</p>
<p>by Andre Fischer (<a href="mailto:andre.w.fischer@sun.com"
title="Mail address of Andre Fischer">andre.w.fischer@sun.com</a>),<br>
last modification on November 11th 2001</p>
<h3>1. Introduction</h3>
<p>This paper describes how documents of the StarOffice/OpenOffice.org
Impress and Draw applications can be made accessible by using the UNO
Accessibility API (UAA).</p>
<p>It will be shown that making Impress accessible can be (largely) reduced
to making Draw accessible. This proposal will therefore first give a short
introduction to Impress documents and then show that mainly Draw pages
have to be made accessible.</p>
<h3>2. Impress Documents</h3>
<p>Impress documents consist of one ore more pages. Each page can contain a
number of objects like
<ul>
<li>Outliner objects contain text organized in a hierarchical list.</li>
<li>Text objects used e.g. for titles.</li>
<li>Graphical objects like lines, polygons, circles, etc.</li>
<li>OLE objects</li>
</ul>
</p>
<p>Every page of an Impress document is made up of two parts: a drawing page
and a master page. There is one drawing page per document page. Master pages
are used to specify material that is visible on more than one page and
therefore can be shared between drawing pages. A master page can be used for
example to include the page number, time, date, or author.
</p>
<p>
There are six display modes for visualizing an Impress document:
<ol>
<li><b>Drawing View</b><br>
<p>This is the only graphical edit mode. At any one time there is one document
page visible on the screen. Its initial scale is chosen so that the whole
page fits in the document window.</p></li>
<li><b>Outline View</b><br> <p>The textual content of all pages including
title and outliner objects is displayed and can be edited in a hierarchical
list. It gives an overview of the document's structure and offers an easy
and non-graphical way to create and modify the document. The outline view
is certainly very attractive for users which create an Impress slide show
via an AT device.</p></li>
<li><b>Slide View</b><br> <p>Display of all pages at once. This view acts
as a visual selection tool. You can browse the whole document for a
specific page and jump from there into the edit mode.</p></li>
<li><b>Notes View</b><br> <p>This introduces a third kind of page, the notes
page. Each notes page is associated to one document page. It is divided
into two parts. The first contains the document page, the second contains a
list of notes describing the document page. In this display mode you can
not edit document pages.</p></li>
<li><b>Handout View</b><br> <p>At the first glance similar to the slide
view, this mode puts several--defaults to four--document pages onto one
print page. It is used to create a printed version of the whole document.
You can neither edit the pages nor can you jump into the edit mode from
here.</p></li>
<li><b>Slide Show</b><br> <p>The slide show mode displays all document pages
full-screen one slide at a time in a consecutive order. Mouse clicks or
pressing a key advances to the next page. No editing in this mode.</p></li>
</ol> </p>
<p>Only the first mode allows the graphical modification of the document.
The second lets you change at least the text information. All but the
second contain graphical representations of one or more document pages.</p>
<p>As a result we have two different cases. All modes but the second use
draw pages for visualizing the document. This case is handled by making the
Draw application accessible. Special handling due to the editing capability of the
drawing view is not necessary. The outline view has to be handled
separately. The two cases are described in more detail in the next two sections.</p>
<h3>3. UAA representation of Draw Pages</h3>
<p>The UAA uses a set of interfaces to offer a hierarchical representation of an
application window. In the following we will focus on representing one draw
page. If there is more than one draw page visible on the screen then each one
of them is represented by a separate sub-tree.</p>
<p>According to our <a
href="http://ui.openoffice.org/accessibility/docrep-guidelines.html"
title="Document representation guidelines">document representation
guidelines</a> only those objects on a draw page will be represented, that
are visible at the time of a query. Both Draw and Impress scale new pages
so that the whole page fits on the screen. Therefore, only an active
rescaling or placing of objects outside the page boundaries will result in
objects not being represented.</p>
<p>However, there is one exception to the rule to represent only fully or
partially visible objects. If a connector links a visible object to one
object that is currently not visible, this target object will be included
into the UAA representation. This is necessary to be able to provide the
connectors as <code>AccessibleRelation</code> objects.</p>
<h4>3.1. Details</h4>
<p>All classes that implement the draw pages and the objects--shapes and OLE
objects--that can be inserted into a draw page have to be extended to
support the <code>Accessible</code> service. Calls to their
<code>getAccessibleContext</code> method will return references to instances
of classes that are implemented independently from the draw page and shape
classes. That means that the only modification of existing code is needed
for the support of the <code>XAccessible</code> interface. All other coding
can be done independently in another place.</p>
<p>All fully and partially visible objects on a draw page are represented by
objects that support the <code>AccessibleContext</code> service. They
support the additional services <code>AccessibleComponent</code>,
<code>AccessibleEditableText</code>, <code>AccessibleRole</code>, and
<code>AccessibleText</code>. Whether or not the
<code>AccessibleAction</code> service will be supported has yet to be
discussed. If a shape is linked to other shapes via connectors then the
<code>AccessibleContext</code> object of the shape from which such a link
originates will return a non empty relation set when the
<code>getRelationSet</code> method is called.</p>
<p>Each draw page will be represented in a shallow hierarchy. The root node
corresponds to the view that is responsible for drawing a document window.
Its children are the representations of all visible draw pages. The
children of each draw page node are the representations of the visible
shapes on that draw page.</p>
<p>The order of the children of a draw page node depends on the z-order of
the represented shapes, i.e. the order in which they are painted onto the
screen: if shape A is painted over by shape B, then shape A comes
<em>before</em> shape B in the list of children.</p>
<p>The UAA representations of the different view modes described above
differ only in their second layers: There are a different number of draw
pages and the draw pages have different geometries.</p>
<h4>3.2. Roles, Names, and Descriptions</h4>
<p>The task to assign roles, names, and descriptions to draw shapes is not a
trivial one. There is a multitude of shapes which leads to the problem of
creating meaningful default names and descriptions.
<p>The roles could be taken from a small set like 'View', 'DrawPage', and
'Shape' that would have essentially one role per layer. However, this would
render the role quite useless. It is preferable to use a larger set of
roles that gives each type of shape its own role and maybe distinguishes
even between different kinds of views. With this an AT can perform special
actions on certain roles. A shape's role would be quite similar to a
shape's default name but because roles are taken from a fixed set (fixed in
the environment of a given application) while names are free-form strings.
Roles are therefore better suited to be processed automatically than
names.</p>
<p>On the first glance naming the objects may seem to be straightforward.
Simply use the already existing name attribute of the shapes. The problem
lies in finding proper default names. A first and trivial solution is to
use the shape's type and append a number.</p>
<p>The same holds true with descriptions. One approach can be to use a
shape's type and adorn it with a human readable and, more importantly,
understandable representation of the shape's properties like fill color,
outline width, or font.</p>
<p>However good the defaults for name and description will be, they will
never come close to those supplied by the author of a document. Therefore,
the author should be more 'encouraged' to do so. It would be helpful to
have a special accessibility mode that would--at appropriate times--pop up a
dialog box inquiring names and descriptions of shapes that have not yet been
given explicit names or descriptions.</p>
<h4>3.3. Special objects</h4>
<p>There are a number of objects that can appear on a draw page, that
deserve special consideration:</p>
<ul>
<li><b>Animations</b> are normal shapes that can change their positions or
appearances. They will be represented like static shapes. Their state at
the end of the animation will be exposed. It has yet to be discussed
whether to provide a flag that a shape is animated and additional
information that describes the animation.</li>
<li><b>Special effects for changing slides</b> pose the problem that for a
short time two slides can be seen at the same place and that the visibility
changes for all their shapes. The first approach to solve this problem will
be to not represent effects for slide changes at all. At the end of the
effect the AT will be informed of a change of the complete window.</li>
<li><b>Connectors</b> connect exactly two shapes. They are represented by entries in
the <code>XAccessibleRelationSet</code> object returned by the object from
which the connection originates.
</li>
</ul>
<h3>4. Impress Outline View</h3>
<p>The Impress outline view is a relatively simple document visualization and
its UAA representation is straightforward. It consists of a hierarchical
view of most of the textual information on all slides. Each slide has a
top-level entry. The text on the slides follows properly indented.</p>
<p>The UAA tree will use objects implementing
<code>AccessibleEditableText</code> which are nested according to the
hierarchy of the text in the outline view. It will be only those objects be
available that lie inside the visible area.</p>
<p>Entering the outline view creates a preview window that shows a preview
of the slide who's text in the outline view contains the cursor. Its
content is a single draw page and can be represented accordingly. Because
the preview is not directly editable, there is no need to make the preview
window focusable.</p>
<br></body>
</html>