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_ACCESSIBLEEDITOBJECT_HXX
26 #define _SC_ACCESSIBLEEDITOBJECT_HXX
27 
28 #include "AccessibleContextBase.hxx"
29 
30 namespace accessibility
31 {
32     class AccessibleTextHelper;
33 }
34 class EditView;
35 class Window;
36 
37 enum EditObjectType
38 {
39     CellInEditMode,
40     EditLine,
41     EditControl
42 };
43 
44 /**	@descr
45         This base class provides an implementation of the
46         <code>AccessibleCell</code> service.
47 */
48 class ScAccessibleEditObject
49 	:	public	ScAccessibleContextBase
50 {
51 public:
52 	//=====  internal  ========================================================
53 	ScAccessibleEditObject(
54         const ::com::sun::star::uno::Reference<
55         ::com::sun::star::accessibility::XAccessible>& rxParent,
56         EditView* pEditView, Window* pWin, const rtl::OUString& rName,
57         const rtl::OUString& rDescription, EditObjectType eObjectType);
58 
59 protected:
60 	virtual ~ScAccessibleEditObject();
61 
62     using ScAccessibleContextBase::IsDefunc;
63 
64 public:
65     using ScAccessibleContextBase::addEventListener;
66     using ScAccessibleContextBase::removeEventListener;
67     using ScAccessibleContextBase::disposing;
68 
69     virtual void SAL_CALL disposing();
70 
71     virtual void LostFocus();
72 
73     virtual void GotFocus();
74 
75 	///=====  XAccessibleComponent  ============================================
76 
77     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >
78 		SAL_CALL getAccessibleAtPoint(
79 		const ::com::sun::star::awt::Point& rPoint )
80 		throw (::com::sun::star::uno::RuntimeException);
81 
82 protected:
83     ///	Return the object's current bounding box relative to the desktop.
84 	virtual Rectangle GetBoundingBoxOnScreen(void) const
85 		throw (::com::sun::star::uno::RuntimeException);
86 
87 	///	Return the object's current bounding box relative to the parent object.
88 	virtual Rectangle GetBoundingBox(void) const
89 		throw (::com::sun::star::uno::RuntimeException);
90 
91 public:
92 	///=====  XAccessibleContext  ==============================================
93 
94     ///	Return the number of currently visible children.
95     // is overloaded to calculate this on demand
96     virtual sal_Int32 SAL_CALL
97     	getAccessibleChildCount(void)
98     				throw (::com::sun::star::uno::RuntimeException);
99 
100     ///	Return the specified child or NULL if index is invalid.
101     // is overloaded to calculate this on demand
102     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL
103     	getAccessibleChild(sal_Int32 nIndex)
104         throw (::com::sun::star::uno::RuntimeException,
105 				::com::sun::star::lang::IndexOutOfBoundsException);
106 
107 	///	Return the set of current states.
108 	virtual ::com::sun::star::uno::Reference<
109             ::com::sun::star::accessibility::XAccessibleStateSet> SAL_CALL
110     	getAccessibleStateSet(void)
111         throw (::com::sun::star::uno::RuntimeException);
112 
113 protected:
114     ///	Return this object's description.
115 	virtual ::rtl::OUString SAL_CALL
116     	createAccessibleDescription(void)
117         throw (::com::sun::star::uno::RuntimeException);
118 
119     ///	Return the object's current name.
120 	virtual ::rtl::OUString SAL_CALL
121     	createAccessibleName(void)
122         throw (::com::sun::star::uno::RuntimeException);
123 
124 public:
125 	///=====  XAccessibleEventBroadcaster  =====================================
126 
127     /**	Add listener that is informed of future changes of name,
128       	description and so on events.
129     */
130 	virtual void SAL_CALL
131     	addEventListener(
132         	const ::com::sun::star::uno::Reference<
133                 ::com::sun::star::accessibility::XAccessibleEventListener>& xListener)
134         throw (com::sun::star::uno::RuntimeException);
135 
136     //	Remove an existing event listener.
137 	virtual void SAL_CALL
138     	removeEventListener(
139 			const ::com::sun::star::uno::Reference<
140                 ::com::sun::star::accessibility::XAccessibleEventListener>& xListener)
141         throw (com::sun::star::uno::RuntimeException);
142 
143     ///=====  XServiceInfo  ====================================================
144 
145     /**	Returns an identifier for the implementation of this object.
146     */
147 	virtual ::rtl::OUString SAL_CALL
148     	getImplementationName(void)
149         throw (::com::sun::star::uno::RuntimeException);
150 
151 	///=====  XTypeProvider  ===================================================
152 
153     /**	Returns a implementation id.
154     */
155     virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL
156         getImplementationId(void)
157         throw (::com::sun::star::uno::RuntimeException);
158 
159 private:
160 	accessibility::AccessibleTextHelper* mpTextHelper;
161     EditView* mpEditView;
162     Window* mpWindow;
163     EditObjectType meObjectType;
164     sal_Bool mbHasFocus;
165 
166 	sal_Bool IsDefunc(
167 		const com::sun::star::uno::Reference<
168 		::com::sun::star::accessibility::XAccessibleStateSet>& rxParentStates);
169 
170 	void CreateTextHelper();
171 };
172 
173 
174 #endif
175