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