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