xref: /trunk/main/svx/inc/svx/AccessibleTableShape.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 
24 #ifndef _SVX_ACCESSIBILITY_ACCESSIBLE_TABLE_SHAPE_HXX
25 #define _SVX_ACCESSIBILITY_ACCESSIBLE_TABLE_SHAPE_HXX
26 
27 #include <com/sun/star/table/XTable.hpp>
28 #include <com/sun/star/accessibility/XAccessibleTable.hpp>
29 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
30 #include <com/sun/star/util/XModifyListener.hpp>
31 
32 #include <rtl/ref.hxx>
33 
34 #include <cppuhelper/implbase2.hxx>
35 
36 #include <svx/AccessibleShape.hxx>
37 #include <com/sun/star/view/XSelectionChangeListener.hpp>
38 #include <com/sun/star/accessibility/XAccessibleTableSelection.hpp>
39 #include <cppuhelper/compbase5.hxx>
40 
41 #include <boost/noncopyable.hpp>
42 
43 namespace sdr { namespace table {
44     class SvxTableController;
45 } }
46 
47 namespace accessibility
48 {
49     class AccessibleTableShapeImpl;
50     class AccessibleCell;
51 
52     /*typedef ::cppu::ImplInheritanceHelper2<   AccessibleShape,
53                                             ::com::sun::star::accessibility::XAccessibleSelection,
54                                             ::com::sun::star::accessibility::XAccessibleTable
55                                           > AccessibleTableShape_Base;*/
56     typedef ::cppu::ImplInheritanceHelper2< AccessibleShape,
57                                             ::com::sun::star::accessibility::XAccessibleTable,
58                                             ::com::sun::star::view::XSelectionChangeListener
59                                           > AccessibleTableShape_Base;
60 /** @descr
61 */
62 class AccessibleTableShape : boost::noncopyable, public AccessibleTableShape_Base, public ::com::sun::star::accessibility::XAccessibleTableSelection
63 {
64 public:
65     AccessibleTableShape( const AccessibleShapeInfo& rShapeInfo, const AccessibleShapeTreeInfo& rShapeTreeInfo );
66     virtual ~AccessibleTableShape( );
67 
68     virtual void Init (void);
69 
70     // XInterface
71     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType );
72     virtual void SAL_CALL acquire(  ) throw ();
73     virtual void SAL_CALL release(  ) throw ();
74 
75     // XAccessible
76     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext> SAL_CALL getAccessibleContext( );
77 
78     // XAccessibleContext
79     virtual sal_Int32 SAL_CALL getAccessibleChildCount( );
80     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i );
81     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet(  );
82     virtual sal_Int16 SAL_CALL getAccessibleRole (void);
83 
84     // XAccessibleTable
85     virtual sal_Int32 SAL_CALL getAccessibleRowCount();
86     virtual sal_Int32 SAL_CALL getAccessibleColumnCount(  );
87     virtual ::rtl::OUString SAL_CALL getAccessibleRowDescription( sal_Int32 nRow );
88     virtual ::rtl::OUString SAL_CALL getAccessibleColumnDescription( sal_Int32 nColumn );
89     virtual sal_Int32 SAL_CALL getAccessibleRowExtentAt( sal_Int32 nRow, sal_Int32 nColumn );
90     virtual sal_Int32 SAL_CALL getAccessibleColumnExtentAt( sal_Int32 nRow, sal_Int32 nColumn );
91     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleTable > SAL_CALL getAccessibleRowHeaders(  );
92     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleTable > SAL_CALL getAccessibleColumnHeaders(  );
93     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleRows(  );
94     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleColumns(  );
95     virtual sal_Bool SAL_CALL isAccessibleRowSelected( sal_Int32 nRow );
96     virtual sal_Bool SAL_CALL isAccessibleColumnSelected( sal_Int32 nColumn );
97     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn );
98     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleCaption(  );
99     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleSummary(  );
100     virtual sal_Bool SAL_CALL isAccessibleSelected( sal_Int32 nRow, sal_Int32 nColumn );
101     virtual sal_Int32 SAL_CALL getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn );
102     virtual sal_Int32 SAL_CALL getAccessibleRow( sal_Int32 nChildIndex );
103     virtual sal_Int32 SAL_CALL getAccessibleColumn( sal_Int32 nChildIndex );
104 
105     // XAccessibleSelection
106     virtual void SAL_CALL selectAccessibleChild( sal_Int32 nChildIndex );
107     virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int32 nChildIndex );
108     virtual void SAL_CALL clearAccessibleSelection(  );
109     virtual void SAL_CALL selectAllAccessibleChildren(  );
110     virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount(  );
111     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex );
112     virtual void SAL_CALL deselectAccessibleChild( sal_Int32 nChildIndex );
113     //=====  XAccessibleTableSelection ============================================
114     virtual sal_Bool SAL_CALL selectRow( sal_Int32 row ) ;
115     virtual sal_Bool SAL_CALL selectColumn( sal_Int32 column ) ;
116     virtual sal_Bool SAL_CALL unselectRow( sal_Int32 row ) ;
117     virtual sal_Bool SAL_CALL unselectColumn( sal_Int32 column ) ;
118 
119     // XServiceInfo
120     virtual ::rtl::OUString SAL_CALL getImplementationName( );
121 
122     // XComponent
123     virtual void SAL_CALL disposing( );
124 
125     // XSelectionChangeListener
126     virtual void SAL_CALL
127         disposing (const ::com::sun::star::lang::EventObject& Source);
128     virtual void  SAL_CALL
129         selectionChanged (const ::com::sun::star::lang::EventObject& rEvent);
130     sal_Int32 mnPreviousSelectionCount;
131     using AccessibleShape::disposing;
132     friend class AccessibleTableHeaderShape;
133 
134     void getColumnAndRow( sal_Int32 nChildIndex, sal_Int32& rnColumn, sal_Int32& rnRow );
135     // overwrite the SetState & ResetState to do special operation for table cell's internal text
136     virtual sal_Bool SetState (sal_Int16 aState);
137     virtual sal_Bool ResetState (sal_Int16 aState);
138     // The following two methods are used to set state directly on table object, instread of the internal cell or paragraph.
139     sal_Bool SetStateDirectly (sal_Int16 aState);
140     sal_Bool ResetStateDirectly (sal_Int16 aState);
141     // Get the currently active cell which is text editing
142     AccessibleCell* GetActiveAccessibleCell();
143 
144 protected:
145     virtual ::rtl::OUString CreateAccessibleBaseName(void);
146 
147     sdr::table::SvxTableController* getTableController();
148 
149     void checkCellPosition( sal_Int32 nCol, sal_Int32 nRow );
150     //IAccessibility2 Implementation 2009, move to public
151     //void getColumnAndRow( sal_Int32 nChildIndex, sal_Int32& rnColumn, sal_Int32& rnRow ) throw (::com::sun::star::lang::IndexOutOfBoundsException );
152 
153 private:
154     rtl::Reference< AccessibleTableShapeImpl > mxImpl;
155     sal_Int32 GetIndexOfSelectedChild( sal_Int32 nSelectedChildIndex ) const;
156 };
157 
158 typedef ::cppu::WeakImplHelper5<
159             ::com::sun::star::accessibility::XAccessible,
160             ::com::sun::star::accessibility::XAccessibleComponent,
161             ::com::sun::star::accessibility::XAccessibleContext,
162             ::com::sun::star::accessibility::XAccessibleTable,
163             ::com::sun::star::accessibility::XAccessibleTableSelection >
164             AccessibleTableHeaderShape_BASE;
165 
166 class AccessibleTableHeaderShape : boost::noncopyable,
167     public MutexOwner,
168     public AccessibleTableHeaderShape_BASE
169 {
170 public:
171     // bRow, sal_True means rowheader, sal_False means columnheader
172     AccessibleTableHeaderShape( AccessibleTableShape* pTable, sal_Bool bRow );
173     virtual ~AccessibleTableHeaderShape();
174 
175     // XAccessible
176     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext> SAL_CALL getAccessibleContext( );
177 
178     // XAccessibleContext
179     virtual sal_Int32 SAL_CALL getAccessibleChildCount(  );
180     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i );
181     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleParent(  );
182     virtual sal_Int32 SAL_CALL getAccessibleIndexInParent(  );
183     virtual sal_Int16 SAL_CALL getAccessibleRole(  );
184     virtual ::rtl::OUString SAL_CALL getAccessibleDescription(  );
185     virtual ::rtl::OUString SAL_CALL getAccessibleName(  );
186     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet(  );
187     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet(  );
188     virtual ::com::sun::star::lang::Locale SAL_CALL getLocale(  );
189 
190     //XAccessibleComponent
191     virtual sal_Bool SAL_CALL containsPoint( const ::com::sun::star::awt::Point& aPoint );
192     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const ::com::sun::star::awt::Point& aPoint );
193     virtual ::com::sun::star::awt::Rectangle SAL_CALL getBounds(  );
194     virtual ::com::sun::star::awt::Point SAL_CALL getLocation(  );
195     virtual ::com::sun::star::awt::Point SAL_CALL getLocationOnScreen(  );
196     virtual ::com::sun::star::awt::Size SAL_CALL getSize(  );
197     virtual sal_Int32 SAL_CALL getForeground(  );
198     virtual sal_Int32 SAL_CALL getBackground(  );
199     virtual void SAL_CALL grabFocus(  );
200 
201     // XAccessibleTable
202     virtual sal_Int32 SAL_CALL getAccessibleRowCount();
203     virtual sal_Int32 SAL_CALL getAccessibleColumnCount(  );
204     virtual ::rtl::OUString SAL_CALL getAccessibleRowDescription( sal_Int32 nRow );
205     virtual ::rtl::OUString SAL_CALL getAccessibleColumnDescription( sal_Int32 nColumn );
206     virtual sal_Int32 SAL_CALL getAccessibleRowExtentAt( sal_Int32 nRow, sal_Int32 nColumn );
207     virtual sal_Int32 SAL_CALL getAccessibleColumnExtentAt( sal_Int32 nRow, sal_Int32 nColumn );
208     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleTable > SAL_CALL getAccessibleRowHeaders(  );
209     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleTable > SAL_CALL getAccessibleColumnHeaders(  );
210     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleRows(  );
211     virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleColumns(  );
212     virtual sal_Bool SAL_CALL isAccessibleRowSelected( sal_Int32 nRow );
213     virtual sal_Bool SAL_CALL isAccessibleColumnSelected( sal_Int32 nColumn );
214     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn );
215     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleCaption(  );
216     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleSummary(  );
217     virtual sal_Bool SAL_CALL isAccessibleSelected( sal_Int32 nRow, sal_Int32 nColumn );
218     virtual sal_Int32 SAL_CALL getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn );
219     virtual sal_Int32 SAL_CALL getAccessibleRow( sal_Int32 nChildIndex );
220     virtual sal_Int32 SAL_CALL getAccessibleColumn( sal_Int32 nChildIndex );
221 
222     //=====  XAccessibleTableSelection  ============================================
223     virtual sal_Bool SAL_CALL selectRow( sal_Int32 row ) ;
224     virtual sal_Bool SAL_CALL selectColumn( sal_Int32 column ) ;
225     virtual sal_Bool SAL_CALL unselectRow( sal_Int32 row ) ;
226     virtual sal_Bool SAL_CALL unselectColumn( sal_Int32 column ) ;
227 private:
228     SVX_DLLPRIVATE explicit AccessibleTableHeaderShape( const ::com::sun::star::uno::Reference<
229             ::com::sun::star::accessibility::XAccessible>& rxParent );
230     sal_Bool mbRow;
231     rtl::Reference< AccessibleTableShape > mpTable;
232 };
233 
234 } // end of namespace accessibility
235 
236 #endif
237