<!--***********************************************************
 * 
 * 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
  Descriptons 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>
