<!--***********************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 ***********************************************************-->
<html><body bgcolor="#fffaf0">
<h1>Help for the AWB v1.7</h1>

<p>The AWB, or <em>A</em>ccessibility <em>W</em>ork <em>B</em>ench, is a tool
for testing the implementation UNO Accessibility API.</p>

<p>The main window is roughly divided into three areas:
<ul>
<li>The <a href="#treeview">tree view</a> on the left shows a part of the
accessibility tree of one or more StarOffice/OpenOffice applications.</li>
<li>The <a href="#graphicalview">graphical view</a> on the right side shows
a graphical representation of the accessibility objects in the tree.  To
make objects missing in the graphical view visible expand the corresponding
nodes in the tree view.</li>

<li>The text window at the bottom logs important messages.</li>
</ul>
</p>

<h2><a name="treeview">Tree View</a></h2>
<p>The tree view has a top-level node for every open
  document window of StarOffice/OpenOffice.  Expand those nodes to make them
  visible in the <a href="#graphicalview">graphical view</a>.</p>

<h3>Nodes</h3>
<p>The nodes in the tree view belong to different classes, some of which
  have children others do not:
<ul>
<li><b>Accessible Object</b><br>
  The node represents an accessible object and has corresponding shape in
  the graphical view.  Only this kind of node gets highlighted by clicking
  on those shapes.</li>
<li><b>Simple Property</b><br>
  These leaves represent simple properties of their parent nodes.  Examples
  are the position, size, and color of an accessible object.</li>
<li><b>Complex Properties</b><br>
  These nodes have children that are not accessible objects.  Examples are
  the lists of interfaces or services supported by an accessible object.</li>
</ul>
</p>

<h3>Actions</h3>
<p>The tree view supports the following actions:
<ul><li>Left double click expands the node under the mouse pointer.</li>
<li>Right click shows a context menu.  Entries, when supported, are:
<ul>
<li><b>Expand Shapes</b><br>
Expands all nodes in the sub-tree that lie on a path from the root to a shape.</li>
<li><b>Expand Subtree</b><br>
Expands all nodes in the sub-tree.</li>
<li><b>Select...</b><br>
Show a dialog that gives access to the XAccessibleSelection interface.</li>
<li><b>select...</b>, <b>copy...</b>, <b>cut...</b>, <b>paste...</b>,
  <b>edit...</b>, <b>format...</b><br>
Show dialogs that give access to the XAccessibleText and
XAccessibleEditableText interfaces.
</ul></li>
</ul>
</p>



<h2><a name="graphicalview">Graphical View</a></h2>
<p>The graphical view shows several properties of accessibility objects:
<ul>
<li>The bounding box is represented as a rectangle.</li>
<li>The background color of the accessible object is taken to draw the
  bounding box rectangle.</li>
<li>The foreground color is used to fill the bounding box.</li>
<li>The accessible name is shown when the menu checkbox Options->Show Name
  is check.</li>
<li>The accessible description is shown when the menu checkbox Options->Show
  Descriptions is checked.</li>
<li>If the XAccessibleText interface is supported and the menu checkbox
  Options->Show Text is checked then the text of the accessible object is
  shown.</li>
</ul>
</p>

<h3>Actions</h3>
<p>The graphical view supports three the following actions:
<ul>
<li>Left click (no modifiers) highlights the object under the mouse as well
  as the corresponding node in the tree view.</li>
<li>Left click with Control modifier expands the object under the
  mouse.</li>
<li>Mouse motion with Shift modifier highlights the object under the mouse
  as well as the corresponding node in the tree view.</li>
</ul>

</body></html>
