xref: /trunk/main/sw/source/core/access/acctable.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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