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