xref: /AOO41X/main/sc/source/ui/inc/AccessibleDocument.hxx (revision 3ea0c3d5cfef7203d1d18b0d5fde9ed31f4a4181)
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_ACCESSIBLEDOCUMENT_HXX
26 #define _SC_ACCESSIBLEDOCUMENT_HXX
27 
28 #include "AccessibleDocumentBase.hxx"
29 #include "viewdata.hxx"
30 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
31 #include <com/sun/star/view/XSelectionChangeListener.hpp>
32 #include <cppuhelper/implbase3.hxx>
33 #include <com/sun/star/accessibility/XAccessibleExtendedAttributes.hpp>
34 #include <com/sun/star/accessibility/XAccessibleGetAccFlowTo.hpp>
35 #include <svx/IAccessibleViewForwarder.hxx>
36 
37 class ScTabViewShell;
38 class ScAccessibleSpreadsheet;
39 class ScChildrenShapes;
40 class ScAccessibleEditObject;
41 
42 namespace accessibility
43 {
44     class AccessibleShape;
45 }
46 namespace utl
47 {
48     class AccessibleRelationSetHelper;
49 }
50 
51 /** @descr
52         This base class provides an implementation of the
53         <code>AccessibleContext</code> service.
54 */
55 
56 typedef cppu::ImplHelper3< ::com::sun::star::accessibility::XAccessibleSelection,
57                             ::com::sun::star::accessibility::XAccessibleExtendedAttributes,
58                             ::com::sun::star::view::XSelectionChangeListener >
59                     ScAccessibleDocumentImpl;
60 
61 class ScAccessibleDocument
62     :   public ScAccessibleDocumentBase,
63         public ScAccessibleDocumentImpl,
64            public com::sun::star::accessibility::XAccessibleGetAccFlowTo,
65         public accessibility::IAccessibleViewForwarder
66 {
67 public:
68     //=====  internal  ========================================================
69     ScAccessibleDocument(
70         const ::com::sun::star::uno::Reference<
71         ::com::sun::star::accessibility::XAccessible>& rxParent,
72         ScTabViewShell* pViewShell,
73         ScSplitPos eSplitPos);
74 
75     virtual void Init();
76 
77 
78     DECL_LINK( WindowChildEventListener, VclSimpleEvent* );
79 protected:
80     virtual ~ScAccessibleDocument(void);
81 
82     using ScAccessibleDocumentBase::IsDefunc;
83 
84 public:
85 
86     virtual void SAL_CALL disposing();
87 
88    ///=====  SfxListener  =====================================================
89 
90     virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
91 
92     ///=====  XInterface  =====================================================
93 
94     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(
95         ::com::sun::star::uno::Type const & rType )
96         throw (::com::sun::star::uno::RuntimeException);
97 
98     virtual void SAL_CALL acquire() throw ();
99 
100     virtual void SAL_CALL release() throw ();
101 
102     ///=====  XAccessibleComponent  ============================================
103 
104     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >
105         SAL_CALL getAccessibleAtPoint(
106         const ::com::sun::star::awt::Point& rPoint )
107         throw (::com::sun::star::uno::RuntimeException);
108 
109     virtual void SAL_CALL grabFocus(  )
110         throw (::com::sun::star::uno::RuntimeException);
111 
112     ///=====  XAccessibleContext  ==============================================
113 
114     /// Return the number of currently visible children.
115     virtual sal_Int32 SAL_CALL
116         getAccessibleChildCount(void)
117         throw (::com::sun::star::uno::RuntimeException);
118 
119     /// Return the specified child or NULL if index is invalid.
120     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL
121         getAccessibleChild(sal_Int32 nIndex)
122         throw (::com::sun::star::uno::RuntimeException,
123                 ::com::sun::star::lang::IndexOutOfBoundsException);
124 
125     /// Return the set of current states.
126     virtual ::com::sun::star::uno::Reference<
127             ::com::sun::star::accessibility::XAccessibleStateSet> SAL_CALL
128         getAccessibleStateSet(void)
129         throw (::com::sun::star::uno::RuntimeException);
130 
131     virtual ::rtl::OUString SAL_CALL
132         getAccessibleName(void)
133         throw (::com::sun::star::uno::RuntimeException);
134 
135     virtual ::com::sun::star::uno::Any SAL_CALL getExtendedAttributes()
136         throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException) ;
137     ///=====  XAccessibleSelection  ===========================================
138 
139     virtual void SAL_CALL
140         selectAccessibleChild( sal_Int32 nChildIndex )
141         throw (::com::sun::star::lang::IndexOutOfBoundsException,
142         ::com::sun::star::uno::RuntimeException);
143 
144     virtual sal_Bool SAL_CALL
145         isAccessibleChildSelected( sal_Int32 nChildIndex )
146         throw (::com::sun::star::lang::IndexOutOfBoundsException,
147         ::com::sun::star::uno::RuntimeException);
148 
149     virtual void SAL_CALL
150         clearAccessibleSelection(  )
151         throw (::com::sun::star::uno::RuntimeException);
152 
153     virtual void SAL_CALL
154         selectAllAccessibleChildren(  )
155         throw (::com::sun::star::uno::RuntimeException);
156 
157     virtual sal_Int32 SAL_CALL
158         getSelectedAccessibleChildCount(  )
159         throw (::com::sun::star::uno::RuntimeException);
160 
161     virtual ::com::sun::star::uno::Reference<
162         ::com::sun::star::accessibility::XAccessible > SAL_CALL
163         getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex )
164         throw (::com::sun::star::lang::IndexOutOfBoundsException,
165         ::com::sun::star::uno::RuntimeException);
166 
167     virtual void SAL_CALL
168         deselectAccessibleChild( sal_Int32 nChildIndex )
169         throw (::com::sun::star::lang::IndexOutOfBoundsException,
170         ::com::sun::star::uno::RuntimeException);
171 
172     ///=====  XSelectionListener  =============================================
173 
174     virtual void SAL_CALL selectionChanged( const ::com::sun::star::lang::EventObject& aEvent )
175         throw (::com::sun::star::uno::RuntimeException);
176 
177     virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source )
178         throw (::com::sun::star::uno::RuntimeException);
179 
180     ///=====  XServiceInfo  ===================================================
181 
182     /** Returns an identifier for the implementation of this object.
183     */
184     virtual ::rtl::OUString SAL_CALL
185         getImplementationName(void)
186         throw (::com::sun::star::uno::RuntimeException);
187 
188     /** Returns a list of all supported services.
189     */
190     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL
191         getSupportedServiceNames(void)
192         throw (::com::sun::star::uno::RuntimeException);
193 
194     ///=====  XTypeProvider  ===================================================
195 
196     /// returns the possible types
197     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL
198         getTypes()
199         throw (::com::sun::star::uno::RuntimeException);
200 
201     /** Returns a implementation id.
202     */
203     virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL
204         getImplementationId(void)
205         throw (::com::sun::star::uno::RuntimeException);
206 
207     ///=====  IAccessibleViewForwarder  ========================================
208 
209     /** This method informs you about the state of the forwarder.  Do not
210         use it when the returned value is <false/>.
211 
212         @return
213             Return <true/> if the view forwarder is valid and <false/> else.
214      */
215     virtual sal_Bool IsValid (void) const;
216 
217     /** Returns the area of the underlying document that is visible in the
218     * corresponding window.
219 
220         @return
221             The rectangle of the visible part of the document. The values
222             are, contrary to the base class, in internal coordinates.
223      */
224     virtual Rectangle GetVisibleArea() const;
225 
226     /** Transform the specified point from internal coordinates to an
227         absolute screen position.
228 
229         @param rPoint
230             Point in internal coordinates.
231 
232         @return
233             The same point but in screen coordinates relative to the upper
234             left corner of the (current) screen.
235      */
236     virtual Point LogicToPixel (const Point& rPoint) const;
237 
238     /** Transform the specified size from internal coordinates to a screen
239     * oriented pixel size.
240 
241         @param rSize
242             Size in internal coordinates.
243 
244         @return
245             The same size but in screen coordinates.
246      */
247     virtual Size LogicToPixel (const Size& rSize) const;
248 
249     /** Transform the specified point from absolute screen coordinates to
250         internal coordinates.
251 
252         @param rPoint
253             Point in screen coordinates relative to the upper left corner of
254             the (current) screen.
255 
256         @return
257             The same point but in internal coordinates.
258      */
259     virtual Point PixelToLogic (const Point& rPoint) const;
260 
261     /** Transform the specified size from screen coordinates to internal
262         coordinates.
263 
264         @param rSize
265             Size in screen coordinates.
266 
267         @return
268             The same size but in internal coordinates.
269      */
270     virtual Size PixelToLogic (const Size& rSize) const;
271 
272     ///======== internal =====================================================
273 
274     utl::AccessibleRelationSetHelper* GetRelationSet(const ScAddress* pAddress) const;
275 
276     ::com::sun::star::uno::Reference
277         < ::com::sun::star::accessibility::XAccessible >
278         GetAccessibleSpreadsheet();
279 
280 protected:
281     /// Return this object's description.
282     virtual ::rtl::OUString SAL_CALL
283         createAccessibleDescription(void)
284         throw (::com::sun::star::uno::RuntimeException);
285 
286     /// Return the object's current name.
287     virtual ::rtl::OUString SAL_CALL
288         createAccessibleName(void)
289         throw (::com::sun::star::uno::RuntimeException);
290 
291     /// Return the object's current bounding box relative to the desktop.
292     virtual Rectangle GetBoundingBoxOnScreen(void) const
293         throw (::com::sun::star::uno::RuntimeException);
294 
295     /// Return the object's current bounding box relative to the parent object.
296     virtual Rectangle GetBoundingBox(void) const
297         throw (::com::sun::star::uno::RuntimeException);
298 
299 private:
300     ScTabViewShell* mpViewShell;
301     ScSplitPos      meSplitPos;
302     ScAccessibleSpreadsheet* mpAccessibleSpreadsheet;
303     ScChildrenShapes* mpChildrenShapes;
304     ScAccessibleEditObject* mpTempAccEdit;
305     com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessible> mxTempAcc;
306     Rectangle maVisArea;
307     sal_Bool mbCompleteSheetSelected;
308 
309 public:
310     SCTAB getVisibleTable() const; // use it in ScChildrenShapes
311 
312 private:
313     void FreeAccessibleSpreadsheet();
314 
315     sal_Bool IsTableSelected() const;
316 
317     sal_Bool IsDefunc(
318         const com::sun::star::uno::Reference<
319         ::com::sun::star::accessibility::XAccessibleStateSet>& rxParentStates);
320     sal_Bool IsEditable(
321         const com::sun::star::uno::Reference<
322         ::com::sun::star::accessibility::XAccessibleStateSet>& rxParentStates);
323 
324     void AddChild(const com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessible>& xAcc, sal_Bool bFireEvent);
325     void RemoveChild(const com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessible>& xAcc, sal_Bool bFireEvent);
326 
327     rtl::OUString GetCurrentCellName() const;
328     rtl::OUString GetCurrentCellDescription() const;
329 
330     Rectangle GetVisibleArea_Impl() const;
331     com::sun::star::uno::Sequence< com::sun::star::uno::Any > GetScAccFlowToSequence();
332 public:
333     ScDocument *GetDocument() const ;
334     ScAddress   GetCurCellAddress() const;
335     //=====  XAccessibleGetAccFromXShape  ============================================
336     ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >
337         SAL_CALL get_AccFlowTo(const ::com::sun::star::uno::Any& rAny, sal_Int32 nType)
338         throw ( ::com::sun::star::uno::RuntimeException );
339 
340      virtual sal_Int32 SAL_CALL getForeground(  )
341         throw (::com::sun::star::uno::RuntimeException);
342 
343     virtual sal_Int32 SAL_CALL getBackground(  )
344         throw (::com::sun::star::uno::RuntimeException);
345 protected:
346     void SwitchViewFireFocus();
347 };
348 
349 
350 #endif
351