1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 package org.openoffice.java.accessibility;
25 
26 import com.sun.star.accessibility.XAccessible;
27 import com.sun.star.accessibility.XAccessibleContext;
28 
29 /** This class maps the AccessibleRole(s) of the UNO accessibility API
30  *  to the corresponding javax.accessibility objects.
31  */
32 public abstract class AccessibleRoleAdapter {
33 
34     /* This array is used as a mapping between the UNO AccessibleRole
35     * and the AccessibleRole objects of the Java accessibility API.
36     */
37     public static final javax.accessibility.AccessibleRole[] data = {
38         javax.accessibility.AccessibleRole.UNKNOWN,
39         javax.accessibility.AccessibleRole.ALERT,
40         javax.accessibility.AccessibleRole.COLUMN_HEADER,
41         javax.accessibility.AccessibleRole.CANVAS,
42         javax.accessibility.AccessibleRole.CHECK_BOX,
43         javax.accessibility.AccessibleRole.CHECK_BOX,   // CHECK_MENU_ITEM
44         javax.accessibility.AccessibleRole.COLOR_CHOOSER,
45         javax.accessibility.AccessibleRole.COMBO_BOX,
46         javax.accessibility.AccessibleRole.DATE_EDITOR,
47         javax.accessibility.AccessibleRole.DESKTOP_ICON,
48         javax.accessibility.AccessibleRole.DESKTOP_PANE,
49         javax.accessibility.AccessibleRole.DIRECTORY_PANE,
50         javax.accessibility.AccessibleRole.DIALOG,
51         javax.accessibility.AccessibleRole.CANVAS, // DOCUMENT
52         javax.accessibility.AccessibleRole.PANEL,  // EMBEDDED_OBJECT
53         javax.accessibility.AccessibleRole.PANEL,  // ENDNOTE
54         javax.accessibility.AccessibleRole.FILE_CHOOSER,
55         javax.accessibility.AccessibleRole.FILLER,
56         javax.accessibility.AccessibleRole.FONT_CHOOSER,
57         javax.accessibility.AccessibleRole.FOOTER,
58         javax.accessibility.AccessibleRole.PANEL,  // FOOTNOTE
59         javax.accessibility.AccessibleRole.FRAME,
60         javax.accessibility.AccessibleRole.GLASS_PANE,
61         javax.accessibility.AccessibleRole.PANEL,  // GRAPHIC
62         javax.accessibility.AccessibleRole.GROUP_BOX,
63         javax.accessibility.AccessibleRole.HEADER,
64         javax.accessibility.AccessibleRole.TEXT,   // HEADING
65         javax.accessibility.AccessibleRole.HYPERLINK,
66         javax.accessibility.AccessibleRole.ICON,
67         javax.accessibility.AccessibleRole.INTERNAL_FRAME,
68         javax.accessibility.AccessibleRole.LABEL,
69         javax.accessibility.AccessibleRole.LAYERED_PANE,
70         javax.accessibility.AccessibleRole.LIST,
71         javax.accessibility.AccessibleRole.LABEL,   // LIST_ITEM - required by Zoomtext
72         javax.accessibility.AccessibleRole.MENU,
73         javax.accessibility.AccessibleRole.MENU_BAR,
74         javax.accessibility.AccessibleRole.MENU_ITEM,
75         javax.accessibility.AccessibleRole.OPTION_PANE,
76         javax.accessibility.AccessibleRole.PAGE_TAB,
77         javax.accessibility.AccessibleRole.PAGE_TAB_LIST,
78         javax.accessibility.AccessibleRole.PANEL,
79         javax.accessibility.AccessibleRole.PARAGRAPH,
80         javax.accessibility.AccessibleRole.PASSWORD_TEXT,
81         javax.accessibility.AccessibleRole.POPUP_MENU,
82         javax.accessibility.AccessibleRole.PUSH_BUTTON,
83         javax.accessibility.AccessibleRole.PROGRESS_BAR,
84         javax.accessibility.AccessibleRole.RADIO_BUTTON,
85         javax.accessibility.AccessibleRole.RADIO_BUTTON,  // RADIO_MENU_ITEM
86         javax.accessibility.AccessibleRole.ROW_HEADER,
87         javax.accessibility.AccessibleRole.ROOT_PANE,
88         javax.accessibility.AccessibleRole.SCROLL_BAR,
89         javax.accessibility.AccessibleRole.SCROLL_PANE,
90         javax.accessibility.AccessibleRole.CANVAS,  // SHAPE
91         javax.accessibility.AccessibleRole.SEPARATOR,
92         javax.accessibility.AccessibleRole.SLIDER,
93         javax.accessibility.AccessibleRole.SPIN_BOX,
94         javax.accessibility.AccessibleRole.SPLIT_PANE,
95         javax.accessibility.AccessibleRole.STATUS_BAR,
96         javax.accessibility.AccessibleRole.TABLE,
97         javax.accessibility.AccessibleRole.LABEL,  // TABLE_CELL - required by ZoomText
98         javax.accessibility.AccessibleRole.TEXT,
99         javax.accessibility.AccessibleRole.PANEL,  // TEXT_FRAME
100         javax.accessibility.AccessibleRole.TOGGLE_BUTTON,
101         javax.accessibility.AccessibleRole.TOOL_BAR,
102         javax.accessibility.AccessibleRole.TOOL_TIP,
103         javax.accessibility.AccessibleRole.TREE,
104         javax.accessibility.AccessibleRole.VIEWPORT,
105         javax.accessibility.AccessibleRole.WINDOW,
106 	javax.accessibility.AccessibleRole.RADIO_BUTTON,  // BUTTON_DROPDOWN
107 	javax.accessibility.AccessibleRole.RADIO_BUTTON,  // BUTTON_MENU
108 	javax.accessibility.AccessibleRole.PANEL,  // CAPTION
109 	javax.accessibility.AccessibleRole.PANEL,  // CHART
110 	javax.accessibility.AccessibleRole.EDITBAR,
111 	javax.accessibility.AccessibleRole.PANEL,  // FORM
112 	javax.accessibility.AccessibleRole.PANEL,  // IMAGE_MAP
113 	javax.accessibility.AccessibleRole.PANEL,  // NOTE
114 	javax.accessibility.AccessibleRole.PANEL,  // PAGE
115 	javax.accessibility.AccessibleRole.RULER,
116 	javax.accessibility.AccessibleRole.PANEL,  // SECTION
117 	javax.accessibility.AccessibleRole.LABEL,  // TREE_ITEM
118 	javax.accessibility.AccessibleRole.TABLE   // TREE_TABLE
119     };
120 
getAccessibleRole(short role)121     public static javax.accessibility.AccessibleRole getAccessibleRole(short role) {
122         if(role < data.length) {
123             if(data[role] == null) {
124                 System.err.println("Unmapped role: " + role);
125             }
126             return data[role];
127         }
128         // FIXME: remove debug out
129         System.err.println("Unmappable role: " + role);
130         return null;
131     }
132 
getAccessibleRole(XAccessible unoAccessible)133     public static javax.accessibility.AccessibleRole getAccessibleRole(XAccessible unoAccessible) {
134         try {
135                         XAccessibleContext unoAccessibleContext = unoAccessible.getAccessibleContext();
136                         if (unoAccessibleContext != null) {
137                             return getAccessibleRole(unoAccessibleContext.getAccessibleRole());
138                         }
139                         return null;
140         } catch (com.sun.star.uno.RuntimeException e) {
141             return javax.accessibility.AccessibleRole.UNKNOWN;
142         }
143     }
144 }
145