merge the formfield patch from ooo-build
[ooovba.git] / vcl / aqua / source / a11y / aqua11ytablewrapper.mm
blob017e0b4ad72420dce0ff6e8911f441c991c6cb03
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  * 
5  * Copyright 2008 by Sun Microsystems, Inc.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * $RCSfile: aqua11ytablewrapper.mm,v $
10  *
11  * $Revision: 1.2 $
12  *
13  * This file is part of OpenOffice.org.
14  *
15  * OpenOffice.org is free software: you can redistribute it and/or modify
16  * it under the terms of the GNU Lesser General Public License version 3
17  * only, as published by the Free Software Foundation.
18  *
19  * OpenOffice.org is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU Lesser General Public License version 3 for more details
23  * (a copy is included in the LICENSE file that accompanied this code).
24  *
25  * You should have received a copy of the GNU Lesser General Public License
26  * version 3 along with OpenOffice.org.  If not, see
27  * <http://www.openoffice.org/license.html>
28  * for a copy of the LGPLv3 License.
29  *
30  ************************************************************************/
32 // MARKER(update_precomp.py): autogen include statement, do not remove
33 #include "precompiled_vcl.hxx"
35 #include "aqua11ytablewrapper.h"
36 #include "aqua11yfactory.h"
38 using namespace ::com::sun::star::accessibility;
39 using namespace ::com::sun::star::awt;
40 using namespace ::com::sun::star::uno;
42 @implementation AquaA11yTableWrapper : NSObject
44 +(id)childrenAttributeForElement:(AquaA11yWrapper *)wrapper
46     try
47     {
48         NSMutableArray * cells = [ [ NSMutableArray alloc ] init ];
49         XAccessibleComponent * accessibleComponent = [ wrapper accessibleComponent ];
50         XAccessibleTable * accessibleTable = [ wrapper accessibleTable ];
51         // find out which cells are actually visible by determining the top-left-cell and the bottom-right-cell
52         Size tableSize = accessibleComponent -> getSize();
53         Point point;
54         point.X = 0;
55         point.Y = 0;
56         Reference < XAccessible > rAccessibleTopLeft = accessibleComponent -> getAccessibleAtPoint ( point );
57         point.X = tableSize.Width - 1;
58         point.Y = tableSize.Height - 1;
59         Reference < XAccessible > rAccessibleBottomRight = accessibleComponent -> getAccessibleAtPoint ( point );
60         if ( rAccessibleTopLeft.is() && rAccessibleBottomRight.is() )
61         {
62             sal_Int32 idxTopLeft = rAccessibleTopLeft -> getAccessibleContext() -> getAccessibleIndexInParent();
63             sal_Int32 idxBottomRight = rAccessibleBottomRight -> getAccessibleContext() -> getAccessibleIndexInParent();
64             sal_Int32 rowTopLeft = accessibleTable -> getAccessibleRow ( idxTopLeft );
65             sal_Int32 columnTopLeft = accessibleTable -> getAccessibleColumn ( idxTopLeft );
66             sal_Int32 rowBottomRight = accessibleTable -> getAccessibleRow ( idxBottomRight );
67             sal_Int32 columnBottomRight = accessibleTable -> getAccessibleColumn ( idxBottomRight );
68             // create an array containing the visible cells
69             for ( sal_Int32 rowCount = rowTopLeft; rowCount <= rowBottomRight; rowCount++ )
70             {
71                 for ( sal_Int32 columnCount = columnTopLeft; columnCount <= columnBottomRight; columnCount++ )
72                 {
73                     Reference < XAccessible > rAccessibleCell = accessibleTable -> getAccessibleCellAt ( rowCount, columnCount );
74                     if ( rAccessibleCell.is() )
75                     {
76                         id cell_wrapper = [ AquaA11yFactory wrapperForAccessibleContext: rAccessibleCell -> getAccessibleContext() ];
77                         [ cells addObject: cell_wrapper ];
78                         [ cell_wrapper release ];
79                     }
80                 }
81             }
82         }
83         [ cells autorelease ];
84         return NSAccessibilityUnignoredChildren( cells );
85     }
86     catch (const Exception &e) 
87     {
88         // TODO: Log
89         return nil;
90     }
93 @end