xref: /trunk/main/sc/source/ui/inc/AccessibleTableBase.hxx (revision ffad8df045fe8db79e3e50f731c1fa6ab6501c83)
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 
25 #ifndef _SC_ACCESSIBLETABLEBASE_HXX
26 #define _SC_ACCESSIBLETABLEBASE_HXX
27 
28 #include "AccessibleContextBase.hxx"
29 #include "global.hxx"
30 #include "address.hxx"
31 #include <com/sun/star/accessibility/XAccessibleTable.hpp>
32 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
33 //IAccessibility2 Implementation 2009-----
34 #include <com/sun/star/accessibility/XAccessibleTableSelection.hpp>
35 //-----IAccessibility2 Implementation 2009
36 #include <cppuhelper/implbase2.hxx>
37 
38 class ScTabViewShell;
39 
40 /** @descr
41         This base class provides an implementation of the
42         <code>AccessibleTable</code> service.
43 */
44 
45 typedef cppu::ImplHelper2< ::com::sun::star::accessibility::XAccessibleTable,
46                     ::com::sun::star::accessibility::XAccessibleSelection>
47                     ScAccessibleTableBaseImpl;
48 
49 class ScAccessibleTableBase :
50             public ScAccessibleContextBase,
51 //IAccessibility2 Implementation 2009-----
52             public   ::com::sun::star::accessibility::XAccessibleTableSelection,
53 //-----IAccessibility2 Implementation 2009
54             public ScAccessibleTableBaseImpl
55 {
56 public:
57     //=====  internal  ========================================================
58     ScAccessibleTableBase(
59         const ::com::sun::star::uno::Reference<
60         ::com::sun::star::accessibility::XAccessible>& rxParent,
61         ScDocument* pDoc,
62         const ScRange& rRange);
63 protected:
64     virtual ~ScAccessibleTableBase();
65 public:
66 
67     using ScAccessibleContextBase::disposing;
68     virtual void SAL_CALL disposing();
69 
70     ///=====  XInterface  =====================================================
71 
72     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
73         ::com::sun::star::uno::Type const & rType )
74         throw (::com::sun::star::uno::RuntimeException);
75 
76     virtual void SAL_CALL acquire() throw ();
77 
78     virtual void SAL_CALL release() throw ();
79 
80     ///=====  XAccessibleTable  ================================================
81 
82     /// Returns the number of rows in the table.
83     virtual sal_Int32 SAL_CALL
84                 getAccessibleRowCount(  )
85                     throw (::com::sun::star::uno::RuntimeException);
86 
87     /// Returns the number of columns in the table.
88     virtual sal_Int32 SAL_CALL
89                 getAccessibleColumnCount(  )
90                     throw (::com::sun::star::uno::RuntimeException);
91 
92     /// Returns the description of the specified row in the table.
93     virtual ::rtl::OUString SAL_CALL
94                 getAccessibleRowDescription( sal_Int32 nRow )
95                     throw (::com::sun::star::uno::RuntimeException,
96                     ::com::sun::star::lang::IndexOutOfBoundsException);
97 
98     /// Returns the description text of the specified column in the table.
99     virtual ::rtl::OUString SAL_CALL
100                 getAccessibleColumnDescription( sal_Int32 nColumn )
101                     throw (::com::sun::star::uno::RuntimeException,
102                     ::com::sun::star::lang::IndexOutOfBoundsException);
103 
104     /** Returns the number of rows occupied by the Accessible at a specified row and column in the table.
105     Returns 1 if it is only a cell and the number of rows the cell is merged if the cell is a merged cell.
106     */
107     virtual sal_Int32 SAL_CALL
108                 getAccessibleRowExtentAt( sal_Int32 nRow, sal_Int32 nColumn )
109                     throw (::com::sun::star::uno::RuntimeException,
110                     ::com::sun::star::lang::IndexOutOfBoundsException);
111 
112     /** Returns the number of columns occupied by the Accessible at a specified row and column in the table.
113     Returns 1 if it is only a cell and the number of columns the cell is merged if the cell is a merged cell.
114     */
115     virtual sal_Int32 SAL_CALL
116                 getAccessibleColumnExtentAt( sal_Int32 nRow, sal_Int32 nColumn )
117                     throw (::com::sun::star::uno::RuntimeException,
118                     ::com::sun::star::lang::IndexOutOfBoundsException);
119 
120     /// Returns the row headers as an AccessibleTable.
121     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleTable > SAL_CALL
122                 getAccessibleRowHeaders(  )
123                     throw (::com::sun::star::uno::RuntimeException);
124 
125     /// Returns the column headers as an AccessibleTable.
126     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleTable > SAL_CALL
127                 getAccessibleColumnHeaders(  )
128                     throw (::com::sun::star::uno::RuntimeException);
129 
130     /// Returns the selected rows in a table.
131     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL
132                 getSelectedAccessibleRows(  )
133                     throw (::com::sun::star::uno::RuntimeException);
134 
135     /// Returns the selected columns in a table.
136     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL
137                 getSelectedAccessibleColumns(  )
138                     throw (::com::sun::star::uno::RuntimeException);
139 
140     /// Returns a boolean value indicating whether the specified row is selected.
141     virtual sal_Bool SAL_CALL
142                 isAccessibleRowSelected( sal_Int32 nRow )
143                     throw (::com::sun::star::uno::RuntimeException,
144                     ::com::sun::star::lang::IndexOutOfBoundsException);
145 
146     /// Returns a boolean value indicating whether the specified column is selected.
147     virtual sal_Bool SAL_CALL
148                 isAccessibleColumnSelected( sal_Int32 nColumn )
149                     throw (::com::sun::star::uno::RuntimeException,
150                     ::com::sun::star::lang::IndexOutOfBoundsException);
151 
152     /// Returns the Accessible at a specified row and column in the table.
153     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL
154                 getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn )
155                     throw (::com::sun::star::uno::RuntimeException,
156                             ::com::sun::star::lang::IndexOutOfBoundsException);
157 
158     /// Returns the caption for the table.
159     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL
160                 getAccessibleCaption(  )
161                     throw (::com::sun::star::uno::RuntimeException);
162 
163     /// Returns the summary description of the table.
164     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL
165                 getAccessibleSummary(  )
166                     throw (::com::sun::star::uno::RuntimeException);
167 
168     /// Returns a boolean value indicating whether the accessible at a specified row and column is selected.
169     virtual sal_Bool SAL_CALL
170                 isAccessibleSelected( sal_Int32 nRow, sal_Int32 nColumn )
171                     throw (::com::sun::star::uno::RuntimeException,
172                     ::com::sun::star::lang::IndexOutOfBoundsException);
173 
174     ///=====  XAccessibleExtendedTable  ========================================
175 
176     /// Returns the index of the cell on the given position.
177     virtual sal_Int32 SAL_CALL
178                 getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn )
179                     throw (::com::sun::star::uno::RuntimeException,
180                     ::com::sun::star::lang::IndexOutOfBoundsException);
181 
182     /// Returns the row number of an index in the table.
183     virtual sal_Int32 SAL_CALL
184                 getAccessibleRow( sal_Int32 nChildIndex )
185                     throw (::com::sun::star::uno::RuntimeException,
186                     ::com::sun::star::lang::IndexOutOfBoundsException);
187 
188     /// Returns the column number of an index in the table.
189     virtual sal_Int32 SAL_CALL
190                 getAccessibleColumn( sal_Int32 nChildIndex )
191                     throw (::com::sun::star::uno::RuntimeException,
192                     ::com::sun::star::lang::IndexOutOfBoundsException);
193 
194     //=====  XAccessibleContext  ==============================================
195 
196     /// Return the number of currently visible children.
197     // is overloaded to calculate this on demand
198     virtual sal_Int32 SAL_CALL
199         getAccessibleChildCount(void)
200                     throw (::com::sun::star::uno::RuntimeException);
201 
202     /// Return the specified child or NULL if index is invalid.
203     // is overloaded to calculate this on demand
204     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL
205         getAccessibleChild(sal_Int32 nIndex)
206         throw (::com::sun::star::uno::RuntimeException,
207                 ::com::sun::star::lang::IndexOutOfBoundsException);
208 //IAccessibility2 Implementation 2009-----
209     virtual sal_Bool SAL_CALL selectRow( sal_Int32 row )
210         throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException) ;
211     virtual sal_Bool SAL_CALL selectColumn( sal_Int32 column )
212         throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException) ;
213     virtual sal_Bool SAL_CALL unselectRow( sal_Int32 row )
214         throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException) ;
215     virtual sal_Bool SAL_CALL unselectColumn( sal_Int32 column )
216         throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException) ;
217 //-----IAccessibility2 Implementation 2009
218 
219 protected:
220     /// Return this object's description.
221     virtual ::rtl::OUString SAL_CALL
222         createAccessibleDescription(void)
223         throw (::com::sun::star::uno::RuntimeException);
224 
225     /// Return the object's current name.
226     virtual ::rtl::OUString SAL_CALL
227         createAccessibleName(void)
228         throw (::com::sun::star::uno::RuntimeException);
229 
230 public:
231     /// Return NULL to indicate that an empty relation set.
232     virtual ::com::sun::star::uno::Reference<
233             ::com::sun::star::accessibility::XAccessibleRelationSet> SAL_CALL
234         getAccessibleRelationSet(void)
235         throw (::com::sun::star::uno::RuntimeException);
236 
237     /// Return the set of current states.
238     // perhaps sometimes to be implemented
239     virtual ::com::sun::star::uno::Reference<
240             ::com::sun::star::accessibility::XAccessibleStateSet> SAL_CALL
241         getAccessibleStateSet(void)
242         throw (::com::sun::star::uno::RuntimeException);
243 
244     ///=====  XAccessibleSelection  ===========================================
245 
246     virtual void SAL_CALL
247         selectAccessibleChild( sal_Int32 nChildIndex )
248         throw (::com::sun::star::lang::IndexOutOfBoundsException,
249         ::com::sun::star::uno::RuntimeException);
250 
251     virtual sal_Bool SAL_CALL
252         isAccessibleChildSelected( sal_Int32 nChildIndex )
253         throw (::com::sun::star::lang::IndexOutOfBoundsException,
254         ::com::sun::star::uno::RuntimeException);
255 
256     virtual void SAL_CALL
257         clearAccessibleSelection(  )
258         throw (::com::sun::star::uno::RuntimeException);
259 
260     virtual void SAL_CALL
261         selectAllAccessibleChildren(  )
262         throw (::com::sun::star::uno::RuntimeException);
263 
264     virtual sal_Int32 SAL_CALL
265         getSelectedAccessibleChildCount(  )
266         throw (::com::sun::star::uno::RuntimeException);
267 
268     virtual ::com::sun::star::uno::Reference<
269         ::com::sun::star::accessibility::XAccessible > SAL_CALL
270         getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex )
271         throw (::com::sun::star::lang::IndexOutOfBoundsException,
272         ::com::sun::star::uno::RuntimeException);
273 
274     virtual void SAL_CALL
275         deselectAccessibleChild( sal_Int32 nSelectedChildIndex )
276         throw (::com::sun::star::lang::IndexOutOfBoundsException,
277         ::com::sun::star::uno::RuntimeException);
278 
279     ///=====  XServiceInfo  ===================================================
280 
281     /** Returns an identifier for the implementation of this object.
282     */
283     virtual ::rtl::OUString SAL_CALL
284         getImplementationName(void)
285         throw (::com::sun::star::uno::RuntimeException);
286 
287     ///=====  XTypeProvider  ===================================================
288 
289     /// returns the possible types
290     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL
291         getTypes()
292         throw (::com::sun::star::uno::RuntimeException);
293 
294     /** Returns a implementation id.
295     */
296     virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL
297         getImplementationId(void)
298         throw (::com::sun::star::uno::RuntimeException);
299 
300 protected:
301     /// contains the range of the table, because it could be a subrange of the complete table
302     ScRange maRange;
303 
304     ScDocument* mpDoc;
305 
306     void CommitTableModelChange(sal_Int32 nStartRow, sal_Int32 nStartCol, sal_Int32 nEndRow, sal_Int32 nEndCol, sal_uInt16 nId);
307 };
308 
309 
310 #endif
311