xref: /aoo41x/main/sw/source/core/access/acctable.hxx (revision 1d2dbeb0)
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 #ifndef _ACCTABLE_HXX
24 #define _ACCTABLE_HXX
25 #include <com/sun/star/accessibility/XAccessibleTable.hpp>
26 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
27 
28 #include <acccontext.hxx>
29 
30 class SwTabFrm;
31 class SwAccessibleTableData_Impl;
32 class SwTableBox;
33 class SwSelBoxes;
34 
35 namespace sw { namespace access {
36     class SwAccessibleChild;
37 } }
38 
39 class SwAccessibleTable :
40 		public SwAccessibleContext,
41 		public ::com::sun::star::accessibility::XAccessibleTable,
42         public ::com::sun::star::accessibility::XAccessibleSelection,
43 		public SwClient
44 {
45 	SwAccessibleTableData_Impl *mpTableData;	// the table's data, prot by Sol-Mutex
46 	::rtl::OUString	sDesc;
47 	const SwSelBoxes *GetSelBoxes() const;
48 
49 	void FireTableChangeEvent( const SwAccessibleTableData_Impl& rTableData );
50 
51     /** get the SwTableBox* for the given child */
52     const SwTableBox* GetTableBox( sal_Int32 ) const;
53 
54 	sal_Bool IsChildSelected( sal_Int32 nChildIndex ) const;
55 
56 	sal_Int32 GetIndexOfSelectedChild( sal_Int32 nSelectedChildIndex ) const;
57 
58 protected:
59 
60 	// Set states for getAccessibleStateSet.
61 	// This drived class additinaly sets MULTISELECTABLE(+)
62 	virtual void GetStates( ::utl::AccessibleStateSetHelper& rStateSet );
63 
64 	virtual ~SwAccessibleTable();
65 
66     // --> OD 2007-06-27 #i77106#
67     inline void SetDesc( ::rtl::OUString sNewDesc )
68     {
69         sDesc = sNewDesc;
70     }
71 
72     // --> OD 2007-06-28 #i77106#
73     virtual SwAccessibleTableData_Impl* CreateNewTableData();
74     // <--
75 
76 	// force update of table data
77     void UpdateTableData();
78 
79 	// remove the current table data
80 	void ClearTableData();
81 
82 	// get table data, update if necessary
83 	inline SwAccessibleTableData_Impl& GetTableData();
84 
85 	// Is table data evailable?
86     sal_Bool HasTableData() const { return (mpTableData != 0); }
87 
88 	virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew);
89 
90 public:
91 
92     SwAccessibleTable( SwAccessibleMap* pInitMap, const SwTabFrm* pTableFrm );
93 
94 	//=====  XInterface  ======================================================
95 
96     // (XInterface methods need to be implemented to disambigouate
97     // between those inherited through SwAcessibleContext and
98     // XAccessibleTable).
99 
100     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
101         const ::com::sun::star::uno::Type& aType )
102         throw (::com::sun::star::uno::RuntimeException);
103 
104     virtual void SAL_CALL acquire(  ) throw ()
105         { SwAccessibleContext::acquire(); };
106 
107     virtual void SAL_CALL release(  ) throw ()
108         { SwAccessibleContext::release(); };
109 
110 	//====== XTypeProvider ====================================================
111 	virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes(  ) throw(::com::sun::star::uno::RuntimeException);
112     virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId(  ) throw(::com::sun::star::uno::RuntimeException);
113 
114 	//=====  XAccessibleContext  ==============================================
115 
116     ///	Return this object's description.
117 	virtual ::rtl::OUString SAL_CALL
118     	getAccessibleDescription (void)
119         throw (com::sun::star::uno::RuntimeException);
120 
121 	//=====  XAccessibleTable  ================================================
122 
123     virtual sal_Int32 SAL_CALL getAccessibleRowCount()
124 		throw (::com::sun::star::uno::RuntimeException);
125     virtual sal_Int32 SAL_CALL getAccessibleColumnCount(  )
126 		throw (::com::sun::star::uno::RuntimeException);
127     virtual ::rtl::OUString SAL_CALL getAccessibleRowDescription(
128 			sal_Int32 nRow )
129 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
130 				::com::sun::star::uno::RuntimeException);
131     virtual ::rtl::OUString SAL_CALL getAccessibleColumnDescription(
132 			sal_Int32 nColumn )
133 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
134 				::com::sun::star::uno::RuntimeException);
135     virtual sal_Int32 SAL_CALL getAccessibleRowExtentAt(
136 			sal_Int32 nRow, sal_Int32 nColumn )
137 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
138 				::com::sun::star::uno::RuntimeException);
139     virtual sal_Int32 SAL_CALL getAccessibleColumnExtentAt(
140 		   	sal_Int32 nRow, sal_Int32 nColumn )
141 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
142 				::com::sun::star::uno::RuntimeException);
143     virtual ::com::sun::star::uno::Reference<
144 				::com::sun::star::accessibility::XAccessibleTable >
145 		SAL_CALL getAccessibleRowHeaders(  )
146 	   	throw (::com::sun::star::uno::RuntimeException);
147     virtual ::com::sun::star::uno::Reference<
148 				::com::sun::star::accessibility::XAccessibleTable >
149 		SAL_CALL getAccessibleColumnHeaders(  )
150 		throw (::com::sun::star::uno::RuntimeException);
151     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL
152 		getSelectedAccessibleRows(  )
153 		throw (::com::sun::star::uno::RuntimeException);
154     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL
155 		getSelectedAccessibleColumns(  )
156 		throw (::com::sun::star::uno::RuntimeException);
157     virtual sal_Bool SAL_CALL isAccessibleRowSelected( sal_Int32 nRow )
158 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
159 				::com::sun::star::uno::RuntimeException);
160     virtual sal_Bool SAL_CALL isAccessibleColumnSelected( sal_Int32 nColumn )
161 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
162 				::com::sun::star::uno::RuntimeException);
163     virtual ::com::sun::star::uno::Reference<
164 		::com::sun::star::accessibility::XAccessible > SAL_CALL
165 		getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn )
166 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
167 				::com::sun::star::uno::RuntimeException);
168     virtual ::com::sun::star::uno::Reference<
169 		::com::sun::star::accessibility::XAccessible > SAL_CALL
170 		getAccessibleCaption(  )
171 		throw (::com::sun::star::uno::RuntimeException);
172     virtual ::com::sun::star::uno::Reference<
173 		::com::sun::star::accessibility::XAccessible > SAL_CALL
174 		getAccessibleSummary(  )
175 		throw (::com::sun::star::uno::RuntimeException);
176     virtual sal_Bool SAL_CALL isAccessibleSelected(
177 			sal_Int32 nRow, sal_Int32 nColumn )
178 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
179 				::com::sun::star::uno::RuntimeException);
180     virtual sal_Int32 SAL_CALL getAccessibleIndex(
181 			sal_Int32 nRow, sal_Int32 nColumn )
182 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
183 				::com::sun::star::uno::RuntimeException);
184     virtual sal_Int32 SAL_CALL getAccessibleRow( sal_Int32 nChildIndex )
185 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
186 				::com::sun::star::uno::RuntimeException);
187     virtual sal_Int32 SAL_CALL getAccessibleColumn( sal_Int32 nChildIndex )
188 		throw (::com::sun::star::lang::IndexOutOfBoundsException,
189 				::com::sun::star::uno::RuntimeException);
190 
191 	//=====  XServiceInfo  ====================================================
192 
193     /**	Returns an identifier for the implementation of this object.
194     */
195 	virtual ::rtl::OUString SAL_CALL
196     	getImplementationName (void)
197         throw (::com::sun::star::uno::RuntimeException);
198 
199     /**	Return whether the specified service is supported by this class.
200     */
201     virtual sal_Bool SAL_CALL
202     	supportsService (const ::rtl::OUString& sServiceName)
203         throw (::com::sun::star::uno::RuntimeException);
204 
205     /** Returns a list of all supported services.  In this case that is just
206     	the AccessibleContext service.
207     */
208 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL
209     	getSupportedServiceNames (void)
210         throw (::com::sun::star::uno::RuntimeException);
211 
212 	//===== C++ interface ======================================================
213 
214 	// The object has been moved by the layout
215 	virtual void InvalidatePosOrSize( const SwRect& rOldBox );
216 
217 	// The object is not visible an longer and should be destroyed
218 	virtual void Dispose( sal_Bool bRecursive = sal_False );
219 
220     virtual void DisposeChild( const sw::access::SwAccessibleChild& rFrmOrObj,
221                                sal_Bool bRecursive );
222     virtual void InvalidateChildPosOrSize( const sw::access::SwAccessibleChild& rFrmOrObj,
223                                            const SwRect& rFrm );
224 
225 	//=====  XAccessibleSelection  ============================================
226 
227     virtual void SAL_CALL selectAccessibleChild(
228         sal_Int32 nChildIndex )
229         throw ( ::com::sun::star::lang::IndexOutOfBoundsException,
230                 ::com::sun::star::uno::RuntimeException );
231 
232     virtual sal_Bool SAL_CALL isAccessibleChildSelected(
233         sal_Int32 nChildIndex )
234         throw ( ::com::sun::star::lang::IndexOutOfBoundsException,
235                 ::com::sun::star::uno::RuntimeException );
236 
237     virtual void SAL_CALL clearAccessibleSelection(  )
238         throw ( ::com::sun::star::uno::RuntimeException );
239 
240     virtual void SAL_CALL selectAllAccessibleChildren(  )
241         throw ( ::com::sun::star::uno::RuntimeException );
242 
243     virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount(  )
244         throw ( ::com::sun::star::uno::RuntimeException );
245 
246     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild(
247         sal_Int32 nSelectedChildIndex )
248         throw ( ::com::sun::star::lang::IndexOutOfBoundsException,
249                 ::com::sun::star::uno::RuntimeException);
250 
251     // --> OD 2004-11-16 #111714# - index has to be treated as global child index.
252     virtual void SAL_CALL deselectAccessibleChild(
253         sal_Int32 nChildIndex )
254         throw ( ::com::sun::star::lang::IndexOutOfBoundsException,
255                 ::com::sun::star::uno::RuntimeException );
256 
257 };
258 
259 inline SwAccessibleTableData_Impl& SwAccessibleTable::GetTableData()
260 {
261 	if( !mpTableData )
262 		UpdateTableData();
263 	return *mpTableData;
264 }
265 
266 // --> OD 2007-06-28 #i77106#
267 // subclass to represent table column headers
268 class SwAccessibleTableColHeaders : public SwAccessibleTable
269 {
270 protected:
271 
272     virtual ~SwAccessibleTableColHeaders()
273     {}
274 
275     virtual SwAccessibleTableData_Impl* CreateNewTableData();
276     virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew);
277 
278 public:
279 
280     SwAccessibleTableColHeaders( SwAccessibleMap *pMap, const SwTabFrm *pTabFrm );
281 
282     //=====  XInterface  ======================================================
283 
284     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
285         const ::com::sun::star::uno::Type& aType )
286         throw (::com::sun::star::uno::RuntimeException);
287 
288     virtual void SAL_CALL acquire(  ) throw ()
289         { SwAccessibleContext::acquire(); };
290 
291     virtual void SAL_CALL release(  ) throw ()
292         { SwAccessibleContext::release(); };
293 
294     //=====  XAccessibleContext  ==============================================
295 
296     /// Return the number of currently visible children.
297     virtual sal_Int32 SAL_CALL getAccessibleChildCount (void)
298         throw (::com::sun::star::uno::RuntimeException);
299 
300     /// Return the specified child or NULL if index is invalid.
301     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL
302         getAccessibleChild (sal_Int32 nIndex)
303         throw (::com::sun::star::uno::RuntimeException,
304                 ::com::sun::star::lang::IndexOutOfBoundsException);
305 
306     //=====  XAccessibleTable  ================================================
307 
308     virtual ::com::sun::star::uno::Reference<
309                 ::com::sun::star::accessibility::XAccessibleTable >
310         SAL_CALL getAccessibleRowHeaders(  )
311         throw (::com::sun::star::uno::RuntimeException);
312     virtual ::com::sun::star::uno::Reference<
313                 ::com::sun::star::accessibility::XAccessibleTable >
314         SAL_CALL getAccessibleColumnHeaders(  )
315         throw (::com::sun::star::uno::RuntimeException);
316 
317     //=====  XServiceInfo  ====================================================
318 
319     /** Returns an identifier for the implementation of this object.
320     */
321     virtual ::rtl::OUString SAL_CALL
322         getImplementationName (void)
323         throw (::com::sun::star::uno::RuntimeException);
324 
325 };
326 // <--
327 #endif
328