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