1*b1cdbd2cSJim Jagielski/**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski// MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski#include "precompiled_vcl.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski#include "aqua/aqua11yfactory.h"
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski#include "aqua11yrolehelper.h"
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski#include <com/sun/star/accessibility/AccessibleRole.hpp>
32*b1cdbd2cSJim Jagielski#include <com/sun/star/accessibility/AccessibleStateType.hpp>
33*b1cdbd2cSJim Jagielski
34*b1cdbd2cSJim Jagielskiusing namespace ::com::sun::star::accessibility;
35*b1cdbd2cSJim Jagielskiusing namespace ::com::sun::star::uno;
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski@implementation AquaA11yRoleHelper
38*b1cdbd2cSJim Jagielski
39*b1cdbd2cSJim Jagielski+(id)simpleMapNativeRoleFrom: (XAccessibleContext *) accessibleContext {
40*b1cdbd2cSJim Jagielski    id nativeRole = nil;
41*b1cdbd2cSJim Jagielski    switch( accessibleContext -> getAccessibleRole() ) {
42*b1cdbd2cSJim Jagielski#define MAP(a,b) \
43*b1cdbd2cSJim Jagielski        case a: nativeRole = b; break
44*b1cdbd2cSJim Jagielski
45*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::UNKNOWN, NSAccessibilityUnknownRole );
46*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::ALERT, NSAccessibilityUnknownRole ); // FIXME
47*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::COLUMN_HEADER, NSAccessibilityColumnRole );
48*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::CANVAS, NSAccessibilityUnknownRole ); // FIXME
49*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::CHECK_BOX, NSAccessibilityCheckBoxRole );
50*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::CHECK_MENU_ITEM, NSAccessibilityUnknownRole ); // FIXME
51*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::COLOR_CHOOSER, NSAccessibilityColorWellRole ); // FIXME
52*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::COMBO_BOX, NSAccessibilityComboBoxRole );
53*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DATE_EDITOR, NSAccessibilityUnknownRole ); // FIXME
54*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DESKTOP_ICON, NSAccessibilityUnknownRole ); // FIXME
55*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DESKTOP_PANE, NSAccessibilityUnknownRole ); // FIXME
56*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DIRECTORY_PANE, NSAccessibilityUnknownRole ); // FIXME
57*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DIALOG, NSAccessibilityGroupRole );
58*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DOCUMENT, NSAccessibilityGroupRole );
59*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::EMBEDDED_OBJECT, NSAccessibilityUnknownRole ); // FIXME
60*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::END_NOTE, NSAccessibilityUnknownRole ); // FIXME
61*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FILE_CHOOSER, NSAccessibilityUnknownRole ); // FIXME
62*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FILLER, NSAccessibilityUnknownRole ); // FIXME
63*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FONT_CHOOSER, NSAccessibilityUnknownRole ); // FIXME
64*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FOOTER, NSAccessibilityUnknownRole ); // FIXME
65*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FOOTNOTE, NSAccessibilityUnknownRole ); // FIXME
66*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FRAME, NSAccessibilityWindowRole );
67*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::GLASS_PANE, NSAccessibilityUnknownRole ); // FIXME
68*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::GRAPHIC, NSAccessibilityImageRole );
69*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::GROUP_BOX, NSAccessibilityGroupRole );
70*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::HEADER, NSAccessibilityUnknownRole ); // FIXME
71*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::HEADING, NSAccessibilityUnknownRole ); // FIXME
72*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::HYPER_LINK, NSAccessibilityLinkRole );
73*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::ICON, NSAccessibilityImageRole );
74*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::INTERNAL_FRAME, NSAccessibilityUnknownRole ); // FIXME
75*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::LABEL, NSAccessibilityStaticTextRole );
76*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::LAYERED_PANE, NSAccessibilityUnknownRole ); // FIXME
77*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::LIST, NSAccessibilityMenuRole );
78*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::LIST_ITEM, NSAccessibilityMenuItemRole );
79*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::MENU, NSAccessibilityMenuRole );
80*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::MENU_BAR, NSAccessibilityMenuBarRole );
81*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::MENU_ITEM, NSAccessibilityMenuItemRole );
82*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::OPTION_PANE, NSAccessibilityUnknownRole ); // FIXME
83*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PAGE_TAB, NSAccessibilityButtonRole );
84*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PAGE_TAB_LIST, NSAccessibilityTabGroupRole );
85*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PANEL, NSAccessibilityGroupRole );
86*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PARAGRAPH, NSAccessibilityTextAreaRole );
87*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PASSWORD_TEXT, NSAccessibilityTextFieldRole );
88*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::POPUP_MENU, NSAccessibilityMenuRole );
89*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PUSH_BUTTON, NSAccessibilityButtonRole );
90*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PROGRESS_BAR, NSAccessibilityProgressIndicatorRole );
91*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::RADIO_BUTTON, NSAccessibilityRadioButtonRole );
92*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::RADIO_MENU_ITEM, NSAccessibilityUnknownRole ); // FIXME
93*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::ROW_HEADER, NSAccessibilityRowRole );
94*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::ROOT_PANE, NSAccessibilityUnknownRole ); // FIXME
95*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SCROLL_BAR, NSAccessibilityScrollBarRole );
96*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SCROLL_PANE, NSAccessibilityScrollAreaRole );
97*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SHAPE, NSAccessibilityUnknownRole ); // FIXME
98*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SEPARATOR, NSAccessibilitySplitterRole ); // FIXME
99*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SLIDER, NSAccessibilitySliderRole );
100*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SPIN_BOX, NSAccessibilityUnknownRole ); // FIXME
101*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SPLIT_PANE, NSAccessibilitySplitterRole );
102*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::STATUS_BAR, NSAccessibilityGroupRole ); // FIXME
103*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TABLE, NSAccessibilityTableRole );
104*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TABLE_CELL, NSAccessibilityTextFieldRole );
105*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TEXT, NSAccessibilityTextAreaRole );
106*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TEXT_FRAME, NSAccessibilityGroupRole );
107*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TOGGLE_BUTTON, NSAccessibilityCheckBoxRole );
108*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TOOL_BAR, NSAccessibilityToolbarRole );
109*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TOOL_TIP, NSAccessibilityUnknownRole ); // FIXME
110*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TREE, NSAccessibilityGroupRole );
111*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::VIEW_PORT, NSAccessibilityUnknownRole ); // FIXME
112*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::WINDOW, NSAccessibilityWindowRole );
113*b1cdbd2cSJim Jagielski
114*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::BUTTON_DROPDOWN, NSAccessibilityMenuButtonRole );
115*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::BUTTON_MENU, NSAccessibilityMenuButtonRole );
116*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::CAPTION, NSAccessibilityUnknownRole );
117*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::CHART, NSAccessibilityUnknownRole );
118*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FORM, NSAccessibilityUnknownRole );
119*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::IMAGE_MAP, NSAccessibilityUnknownRole );
120*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::NOTE, NSAccessibilityUnknownRole );
121*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PAGE, NSAccessibilityUnknownRole );
122*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::RULER, NSAccessibilityUnknownRole );
123*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SECTION, NSAccessibilityUnknownRole );
124*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TREE_ITEM, NSAccessibilityUnknownRole );
125*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TREE_TABLE, NSAccessibilityUnknownRole );
126*b1cdbd2cSJim Jagielski
127*b1cdbd2cSJim Jagielski#undef MAP
128*b1cdbd2cSJim Jagielski        default:
129*b1cdbd2cSJim Jagielski            break;
130*b1cdbd2cSJim Jagielski    }
131*b1cdbd2cSJim Jagielski    return nativeRole;
132*b1cdbd2cSJim Jagielski}
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski+(id)getNativeRoleFrom: (XAccessibleContext *) accessibleContext {
135*b1cdbd2cSJim Jagielski    id nativeRole = [ AquaA11yRoleHelper simpleMapNativeRoleFrom: accessibleContext ];
136*b1cdbd2cSJim Jagielski    if ( accessibleContext -> getAccessibleRole() == AccessibleRole::LABEL ) {
137*b1cdbd2cSJim Jagielski        if ( accessibleContext -> getAccessibleChildCount() > 0 ) {
138*b1cdbd2cSJim Jagielski            [ nativeRole release ];
139*b1cdbd2cSJim Jagielski            nativeRole = NSAccessibilityOutlineRole;
140*b1cdbd2cSJim Jagielski        } else if ( accessibleContext -> getAccessibleParent().is() ) {
141*b1cdbd2cSJim Jagielski            Reference < XAccessibleContext > rxParentContext = accessibleContext -> getAccessibleParent() -> getAccessibleContext();
142*b1cdbd2cSJim Jagielski            if ( rxParentContext.is() ) {
143*b1cdbd2cSJim Jagielski                NSString * roleParent = (NSString *) [ AquaA11yRoleHelper simpleMapNativeRoleFrom: rxParentContext.get() ];
144*b1cdbd2cSJim Jagielski                if ( [ roleParent isEqualToString: NSAccessibilityOutlineRole ] ) {
145*b1cdbd2cSJim Jagielski                    [ nativeRole release ];
146*b1cdbd2cSJim Jagielski                    nativeRole = NSAccessibilityRowRole;
147*b1cdbd2cSJim Jagielski                }
148*b1cdbd2cSJim Jagielski                [ roleParent release ];
149*b1cdbd2cSJim Jagielski            }
150*b1cdbd2cSJim Jagielski        }
151*b1cdbd2cSJim Jagielski    } else if ( accessibleContext -> getAccessibleRole() == AccessibleRole::COMBO_BOX ) {
152*b1cdbd2cSJim Jagielski        Reference < XAccessible > rxAccessible = accessibleContext -> getAccessibleChild(0);
153*b1cdbd2cSJim Jagielski        if ( rxAccessible.is() ) {
154*b1cdbd2cSJim Jagielski            Reference < XAccessibleContext > rxAccessibleContext = rxAccessible -> getAccessibleContext();
155*b1cdbd2cSJim Jagielski            if ( rxAccessibleContext.is() && rxAccessibleContext -> getAccessibleRole() == AccessibleRole::TEXT ) {
156*b1cdbd2cSJim Jagielski                if ( ! rxAccessibleContext -> getAccessibleStateSet() -> contains ( AccessibleStateType::EDITABLE ) ) {
157*b1cdbd2cSJim Jagielski                    [ nativeRole release ];
158*b1cdbd2cSJim Jagielski                    nativeRole = NSAccessibilityPopUpButtonRole;
159*b1cdbd2cSJim Jagielski                }
160*b1cdbd2cSJim Jagielski            }
161*b1cdbd2cSJim Jagielski        }
162*b1cdbd2cSJim Jagielski    }
163*b1cdbd2cSJim Jagielski    return nativeRole;
164*b1cdbd2cSJim Jagielski}
165*b1cdbd2cSJim Jagielski
166*b1cdbd2cSJim Jagielski+(id)getNativeSubroleFrom: (sal_Int16) nRole {
167*b1cdbd2cSJim Jagielski    id nativeSubrole = nil;
168*b1cdbd2cSJim Jagielski    switch( nRole ) {
169*b1cdbd2cSJim Jagielski#define MAP(a,b) \
170*b1cdbd2cSJim Jagielski        case a: nativeSubrole = b; break
171*b1cdbd2cSJim Jagielski
172*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::UNKNOWN, NSAccessibilityUnknownSubrole );
173*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::ALERT, NSAccessibilitySystemDialogSubrole );
174*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::COLUMN_HEADER, @"" );
175*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::CANVAS, @"" );
176*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::CHECK_BOX, @"" );
177*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::CHECK_MENU_ITEM, @"" );
178*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::COLOR_CHOOSER, @"" );
179*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::COMBO_BOX, @"" );
180*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DATE_EDITOR, @"" );
181*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DESKTOP_ICON, @"" );
182*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DESKTOP_PANE, @"" );
183*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DIRECTORY_PANE, @"" );
184*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DIALOG, NSAccessibilityDialogSubrole );
185*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::DOCUMENT, @"" );
186*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::EMBEDDED_OBJECT, @"" );
187*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::END_NOTE, @"" );
188*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FILE_CHOOSER, @"" );
189*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FILLER, @"" );
190*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FONT_CHOOSER, @"" );
191*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FOOTER, @"" );
192*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FOOTNOTE, @"" );
193*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FRAME, @"" );
194*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::GLASS_PANE, @"" );
195*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::GRAPHIC, @"" );
196*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::GROUP_BOX, @"" );
197*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::HEADER, @"" );
198*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::HEADING, @"" );
199*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::HYPER_LINK, NSAccessibilityTextLinkSubrole );
200*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::ICON, @"" );
201*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::INTERNAL_FRAME, @"" );
202*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::LABEL, @"" );
203*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::LAYERED_PANE, @"" );
204*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::LIST, @"" );
205*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::LIST_ITEM, NSAccessibilityOutlineRowSubrole );
206*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::MENU, @"" );
207*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::MENU_BAR, @"" );
208*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::MENU_ITEM, @"" );
209*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::OPTION_PANE, @"" );
210*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PAGE_TAB, @"" );
211*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PAGE_TAB_LIST, @"" );
212*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PANEL, @"" );
213*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PARAGRAPH, @"" );
214*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PASSWORD_TEXT, NSAccessibilitySecureTextFieldSubrole );
215*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::POPUP_MENU, @"" );
216*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PUSH_BUTTON, @"" );
217*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PROGRESS_BAR, @"" );
218*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::RADIO_BUTTON, @"" );
219*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::RADIO_MENU_ITEM, @"" );
220*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::ROW_HEADER, @"" );
221*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::ROOT_PANE, @"" );
222*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SCROLL_BAR, @"" );
223*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SCROLL_PANE, @"" );
224*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SHAPE, @"" );
225*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SEPARATOR, @"" );
226*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SLIDER, @"" );
227*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SPIN_BOX, @"" );
228*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SPLIT_PANE, @"" );
229*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::STATUS_BAR, @"" );
230*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TABLE, @"" );
231*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TABLE_CELL, @"" );
232*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TEXT, @"" );
233*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TEXT_FRAME, @"" );
234*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TOGGLE_BUTTON, @"" );
235*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TOOL_BAR, @"" );
236*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TOOL_TIP, @"" );
237*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TREE, @"" );
238*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::VIEW_PORT, @"" );
239*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::WINDOW, NSAccessibilityStandardWindowSubrole );
240*b1cdbd2cSJim Jagielski
241*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::BUTTON_DROPDOWN, @"" );
242*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::BUTTON_MENU, @"" );
243*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::CAPTION, @"" );
244*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::CHART, @"" );
245*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::FORM, @"" );
246*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::IMAGE_MAP, @"" );
247*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::NOTE, @"" );
248*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::PAGE, @"" );
249*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::RULER, @"" );
250*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::SECTION, @"" );
251*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TREE_ITEM, @"" );
252*b1cdbd2cSJim Jagielski        MAP( AccessibleRole::TREE_TABLE, @"" );
253*b1cdbd2cSJim Jagielski
254*b1cdbd2cSJim Jagielski#undef MAP
255*b1cdbd2cSJim Jagielski        default:
256*b1cdbd2cSJim Jagielski            break;
257*b1cdbd2cSJim Jagielski    }
258*b1cdbd2cSJim Jagielski    return nativeSubrole;
259*b1cdbd2cSJim Jagielski}
260*b1cdbd2cSJim Jagielski
261*b1cdbd2cSJim Jagielski+(id)getRoleDescriptionFrom: (NSString *) role with: (NSString *) subRole {
262*b1cdbd2cSJim Jagielski	id roleDescription;
263*b1cdbd2cSJim Jagielski	if ( [ subRole length ] == 0 )
264*b1cdbd2cSJim Jagielski		roleDescription = NSAccessibilityRoleDescription( role, nil );
265*b1cdbd2cSJim Jagielski	else
266*b1cdbd2cSJim Jagielski		roleDescription = NSAccessibilityRoleDescription( role, subRole );
267*b1cdbd2cSJim Jagielski    return roleDescription;
268*b1cdbd2cSJim Jagielski}
269*b1cdbd2cSJim Jagielski
270*b1cdbd2cSJim Jagielski@end
271