1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski #include <tools/gen.hxx>
27*b1cdbd2cSJim Jagielski #include "AccessiblePageHeaderArea.hxx"
28*b1cdbd2cSJim Jagielski #include "AccessibleText.hxx"
29*b1cdbd2cSJim Jagielski #include "AccessibilityHints.hxx"
30*b1cdbd2cSJim Jagielski #include "unoguard.hxx"
31*b1cdbd2cSJim Jagielski #include "editsrc.hxx"
32*b1cdbd2cSJim Jagielski #include "prevwsh.hxx"
33*b1cdbd2cSJim Jagielski #include "prevloc.hxx"
34*b1cdbd2cSJim Jagielski #include "scresid.hxx"
35*b1cdbd2cSJim Jagielski #ifndef SC_SC_HRC
36*b1cdbd2cSJim Jagielski #include "sc.hrc"
37*b1cdbd2cSJim Jagielski #endif
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLEROLE_HPP_
40*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRole.hpp>
41*b1cdbd2cSJim Jagielski #endif
42*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLESTATETYPE_HPP_
43*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp>
44*b1cdbd2cSJim Jagielski #endif
45*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleEventId.hpp>
46*b1cdbd2cSJim Jagielski #include <editeng/editobj.hxx>
47*b1cdbd2cSJim Jagielski #include <svx/AccessibleTextHelper.hxx>
48*b1cdbd2cSJim Jagielski #include <rtl/uuid.h>
49*b1cdbd2cSJim Jagielski #include <unotools/accessiblestatesethelper.hxx>
50*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
51*b1cdbd2cSJim Jagielski #include <toolkit/helper/convert.hxx>
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski using namespace	::com::sun::star;
54*b1cdbd2cSJim Jagielski using namespace	::com::sun::star::accessibility;
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski 	//=====  internal  ========================================================
57*b1cdbd2cSJim Jagielski 
ScAccessiblePageHeaderArea(const uno::Reference<XAccessible> & rxParent,ScPreviewShell * pViewShell,const EditTextObject * pEditObj,sal_Bool bHeader,SvxAdjust eAdjust)58*b1cdbd2cSJim Jagielski ScAccessiblePageHeaderArea::ScAccessiblePageHeaderArea(
59*b1cdbd2cSJim Jagielski         const uno::Reference<XAccessible>& rxParent,
60*b1cdbd2cSJim Jagielski         ScPreviewShell* pViewShell,
61*b1cdbd2cSJim Jagielski         const EditTextObject* pEditObj,
62*b1cdbd2cSJim Jagielski         sal_Bool bHeader,
63*b1cdbd2cSJim Jagielski         SvxAdjust eAdjust)
64*b1cdbd2cSJim Jagielski         : ScAccessibleContextBase(rxParent, AccessibleRole::TEXT),
65*b1cdbd2cSJim Jagielski         mpEditObj(pEditObj->Clone()),
66*b1cdbd2cSJim Jagielski     	mpTextHelper(NULL),
67*b1cdbd2cSJim Jagielski         mpViewShell(pViewShell),
68*b1cdbd2cSJim Jagielski         mbHeader(bHeader),
69*b1cdbd2cSJim Jagielski         meAdjust(eAdjust)
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski 	if (mpViewShell)
72*b1cdbd2cSJim Jagielski 		mpViewShell->AddAccessibilityObject(*this);
73*b1cdbd2cSJim Jagielski }
74*b1cdbd2cSJim Jagielski 
~ScAccessiblePageHeaderArea(void)75*b1cdbd2cSJim Jagielski ScAccessiblePageHeaderArea::~ScAccessiblePageHeaderArea(void)
76*b1cdbd2cSJim Jagielski {
77*b1cdbd2cSJim Jagielski 	if (!ScAccessibleContextBase::IsDefunc() && !rBHelper.bInDispose)
78*b1cdbd2cSJim Jagielski 	{
79*b1cdbd2cSJim Jagielski 		// increment refcount to prevent double call off dtor
80*b1cdbd2cSJim Jagielski 		osl_incrementInterlockedCount( &m_refCount );
81*b1cdbd2cSJim Jagielski 		dispose();
82*b1cdbd2cSJim Jagielski 	}
83*b1cdbd2cSJim Jagielski }
84*b1cdbd2cSJim Jagielski 
disposing()85*b1cdbd2cSJim Jagielski void SAL_CALL ScAccessiblePageHeaderArea::disposing()
86*b1cdbd2cSJim Jagielski {
87*b1cdbd2cSJim Jagielski     ScUnoGuard aGuard;
88*b1cdbd2cSJim Jagielski 	if (mpViewShell)
89*b1cdbd2cSJim Jagielski 	{
90*b1cdbd2cSJim Jagielski 		mpViewShell->RemoveAccessibilityObject(*this);
91*b1cdbd2cSJim Jagielski 		mpViewShell = NULL;
92*b1cdbd2cSJim Jagielski 	}
93*b1cdbd2cSJim Jagielski 	if (mpTextHelper)
94*b1cdbd2cSJim Jagielski 		DELETEZ(mpTextHelper);
95*b1cdbd2cSJim Jagielski     if (mpEditObj)
96*b1cdbd2cSJim Jagielski         DELETEZ(mpEditObj);
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski 	ScAccessibleContextBase::disposing();
99*b1cdbd2cSJim Jagielski }
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski //=====  SfxListener  =====================================================
102*b1cdbd2cSJim Jagielski 
Notify(SfxBroadcaster & rBC,const SfxHint & rHint)103*b1cdbd2cSJim Jagielski void ScAccessiblePageHeaderArea::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski 	if (rHint.ISA( SfxSimpleHint ) )
106*b1cdbd2cSJim Jagielski 	{
107*b1cdbd2cSJim Jagielski 		const SfxSimpleHint& rRef = (const SfxSimpleHint&)rHint;
108*b1cdbd2cSJim Jagielski 		// only notify if child exist, otherwise it is not necessary
109*b1cdbd2cSJim Jagielski         if (rRef.GetId() == SC_HINT_ACC_VISAREACHANGED)
110*b1cdbd2cSJim Jagielski         {
111*b1cdbd2cSJim Jagielski             if (mpTextHelper)
112*b1cdbd2cSJim Jagielski                 mpTextHelper->UpdateChildren();
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski             AccessibleEventObject aEvent;
115*b1cdbd2cSJim Jagielski             aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED;
116*b1cdbd2cSJim Jagielski 			aEvent.Source = uno::Reference< XAccessibleContext >(this);
117*b1cdbd2cSJim Jagielski             CommitChange(aEvent);
118*b1cdbd2cSJim Jagielski         }
119*b1cdbd2cSJim Jagielski     }
120*b1cdbd2cSJim Jagielski 	ScAccessibleContextBase::Notify(rBC, rHint);
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski 	//=====  XAccessibleComponent  ============================================
123*b1cdbd2cSJim Jagielski 
getAccessibleAtPoint(const awt::Point & rPoint)124*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL ScAccessiblePageHeaderArea::getAccessibleAtPoint(
125*b1cdbd2cSJim Jagielski 		const awt::Point& rPoint )
126*b1cdbd2cSJim Jagielski 		throw (uno::RuntimeException)
127*b1cdbd2cSJim Jagielski {
128*b1cdbd2cSJim Jagielski     uno::Reference<XAccessible> xRet;
129*b1cdbd2cSJim Jagielski     if (containsPoint(rPoint))
130*b1cdbd2cSJim Jagielski     {
131*b1cdbd2cSJim Jagielski  	    ScUnoGuard aGuard;
132*b1cdbd2cSJim Jagielski         IsObjectValid();
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski     	if(!mpTextHelper)
135*b1cdbd2cSJim Jagielski 	    	CreateTextHelper();
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski         xRet = mpTextHelper->GetAt(rPoint);
138*b1cdbd2cSJim Jagielski     }
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski     return xRet;
141*b1cdbd2cSJim Jagielski }
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski 	//=====  XAccessibleContext  ==============================================
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL
getAccessibleChildCount(void)146*b1cdbd2cSJim Jagielski 	ScAccessiblePageHeaderArea::getAccessibleChildCount(void)
147*b1cdbd2cSJim Jagielski     				throw (uno::RuntimeException)
148*b1cdbd2cSJim Jagielski {
149*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
150*b1cdbd2cSJim Jagielski     IsObjectValid();
151*b1cdbd2cSJim Jagielski 	if (!mpTextHelper)
152*b1cdbd2cSJim Jagielski 		CreateTextHelper();
153*b1cdbd2cSJim Jagielski 	return mpTextHelper->GetChildCount();
154*b1cdbd2cSJim Jagielski }
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski uno::Reference< XAccessible > SAL_CALL
getAccessibleChild(sal_Int32 nIndex)157*b1cdbd2cSJim Jagielski 	ScAccessiblePageHeaderArea::getAccessibleChild(sal_Int32 nIndex)
158*b1cdbd2cSJim Jagielski         throw (uno::RuntimeException,
159*b1cdbd2cSJim Jagielski 		lang::IndexOutOfBoundsException)
160*b1cdbd2cSJim Jagielski {
161*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
162*b1cdbd2cSJim Jagielski     IsObjectValid();
163*b1cdbd2cSJim Jagielski 	if (!mpTextHelper)
164*b1cdbd2cSJim Jagielski 		CreateTextHelper();
165*b1cdbd2cSJim Jagielski 	return mpTextHelper->GetChild(nIndex);
166*b1cdbd2cSJim Jagielski }
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski uno::Reference<XAccessibleStateSet> SAL_CALL
getAccessibleStateSet(void)169*b1cdbd2cSJim Jagielski 	ScAccessiblePageHeaderArea::getAccessibleStateSet(void)
170*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
173*b1cdbd2cSJim Jagielski 	uno::Reference<XAccessibleStateSet> xParentStates;
174*b1cdbd2cSJim Jagielski 	if (getAccessibleParent().is())
175*b1cdbd2cSJim Jagielski 	{
176*b1cdbd2cSJim Jagielski 		uno::Reference<XAccessibleContext> xParentContext = getAccessibleParent()->getAccessibleContext();
177*b1cdbd2cSJim Jagielski 		xParentStates = xParentContext->getAccessibleStateSet();
178*b1cdbd2cSJim Jagielski 	}
179*b1cdbd2cSJim Jagielski 	utl::AccessibleStateSetHelper* pStateSet = new utl::AccessibleStateSetHelper();
180*b1cdbd2cSJim Jagielski 	if (IsDefunc())
181*b1cdbd2cSJim Jagielski 		pStateSet->AddState(AccessibleStateType::DEFUNC);
182*b1cdbd2cSJim Jagielski     else
183*b1cdbd2cSJim Jagielski     {
184*b1cdbd2cSJim Jagielski 	    pStateSet->AddState(AccessibleStateType::ENABLED);
185*b1cdbd2cSJim Jagielski 	    pStateSet->AddState(AccessibleStateType::MULTI_LINE);
186*b1cdbd2cSJim Jagielski 	    if (isShowing())
187*b1cdbd2cSJim Jagielski 		    pStateSet->AddState(AccessibleStateType::SHOWING);
188*b1cdbd2cSJim Jagielski 	    if (isVisible())
189*b1cdbd2cSJim Jagielski 		    pStateSet->AddState(AccessibleStateType::VISIBLE);
190*b1cdbd2cSJim Jagielski     }
191*b1cdbd2cSJim Jagielski 	return pStateSet;
192*b1cdbd2cSJim Jagielski }
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski //=====  XServiceInfo  ========================================================
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL
getImplementationName(void)197*b1cdbd2cSJim Jagielski    	ScAccessiblePageHeaderArea::getImplementationName(void)
198*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
199*b1cdbd2cSJim Jagielski {
200*b1cdbd2cSJim Jagielski     return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM ("ScAccessiblePageHeaderArea"));
201*b1cdbd2cSJim Jagielski }
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski uno::Sequence< ::rtl::OUString> SAL_CALL
getSupportedServiceNames(void)204*b1cdbd2cSJim Jagielski    	ScAccessiblePageHeaderArea::getSupportedServiceNames(void)
205*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
206*b1cdbd2cSJim Jagielski {
207*b1cdbd2cSJim Jagielski 	uno::Sequence< ::rtl::OUString > aSequence = ScAccessibleContextBase::getSupportedServiceNames();
208*b1cdbd2cSJim Jagielski     sal_Int32 nOldSize(aSequence.getLength());
209*b1cdbd2cSJim Jagielski     aSequence.realloc(nOldSize + 1);
210*b1cdbd2cSJim Jagielski     ::rtl::OUString* pNames = aSequence.getArray();
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 	pNames[nOldSize] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.AccessiblePageHeaderFooterAreasView"));
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski 	return aSequence;
215*b1cdbd2cSJim Jagielski }
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski //=====  XTypeProvider  =======================================================
218*b1cdbd2cSJim Jagielski 
219*b1cdbd2cSJim Jagielski uno::Sequence<sal_Int8> SAL_CALL
getImplementationId(void)220*b1cdbd2cSJim Jagielski 	ScAccessiblePageHeaderArea::getImplementationId(void)
221*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
222*b1cdbd2cSJim Jagielski {
223*b1cdbd2cSJim Jagielski     ScUnoGuard aGuard;
224*b1cdbd2cSJim Jagielski     IsObjectValid();
225*b1cdbd2cSJim Jagielski 	static uno::Sequence<sal_Int8> aId;
226*b1cdbd2cSJim Jagielski 	if (aId.getLength() == 0)
227*b1cdbd2cSJim Jagielski 	{
228*b1cdbd2cSJim Jagielski 		aId.realloc (16);
229*b1cdbd2cSJim Jagielski 		rtl_createUuid (reinterpret_cast<sal_uInt8 *>(aId.getArray()), 0, sal_True);
230*b1cdbd2cSJim Jagielski 	}
231*b1cdbd2cSJim Jagielski 	return aId;
232*b1cdbd2cSJim Jagielski }
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski //===== internal ==============================================================
createAccessibleDescription(void)235*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL ScAccessiblePageHeaderArea::createAccessibleDescription(void)
236*b1cdbd2cSJim Jagielski     throw(uno::RuntimeException)
237*b1cdbd2cSJim Jagielski {
238*b1cdbd2cSJim Jagielski     rtl::OUString sDesc;
239*b1cdbd2cSJim Jagielski     switch (meAdjust)
240*b1cdbd2cSJim Jagielski     {
241*b1cdbd2cSJim Jagielski     case SVX_ADJUST_LEFT :
242*b1cdbd2cSJim Jagielski         sDesc = String(ScResId(STR_ACC_LEFTAREA_DESCR));
243*b1cdbd2cSJim Jagielski         break;
244*b1cdbd2cSJim Jagielski     case SVX_ADJUST_RIGHT:
245*b1cdbd2cSJim Jagielski         sDesc = String(ScResId(STR_ACC_RIGHTAREA_DESCR));
246*b1cdbd2cSJim Jagielski         break;
247*b1cdbd2cSJim Jagielski     case SVX_ADJUST_CENTER:
248*b1cdbd2cSJim Jagielski         sDesc = String(ScResId(STR_ACC_CENTERAREA_DESCR));
249*b1cdbd2cSJim Jagielski         break;
250*b1cdbd2cSJim Jagielski     default:
251*b1cdbd2cSJim Jagielski         DBG_ERRORFILE("wrong adjustment found");
252*b1cdbd2cSJim Jagielski     }
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski     return sDesc;
255*b1cdbd2cSJim Jagielski }
256*b1cdbd2cSJim Jagielski 
createAccessibleName(void)257*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL ScAccessiblePageHeaderArea::createAccessibleName(void)
258*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
259*b1cdbd2cSJim Jagielski {
260*b1cdbd2cSJim Jagielski     rtl::OUString sName;
261*b1cdbd2cSJim Jagielski     switch (meAdjust)
262*b1cdbd2cSJim Jagielski     {
263*b1cdbd2cSJim Jagielski     case SVX_ADJUST_LEFT :
264*b1cdbd2cSJim Jagielski         sName = String(ScResId(STR_ACC_LEFTAREA_NAME));
265*b1cdbd2cSJim Jagielski         break;
266*b1cdbd2cSJim Jagielski     case SVX_ADJUST_RIGHT:
267*b1cdbd2cSJim Jagielski         sName = String(ScResId(STR_ACC_RIGHTAREA_NAME));
268*b1cdbd2cSJim Jagielski         break;
269*b1cdbd2cSJim Jagielski     case SVX_ADJUST_CENTER:
270*b1cdbd2cSJim Jagielski         sName = String(ScResId(STR_ACC_CENTERAREA_NAME));
271*b1cdbd2cSJim Jagielski         break;
272*b1cdbd2cSJim Jagielski     default:
273*b1cdbd2cSJim Jagielski         DBG_ERRORFILE("wrong adjustment found");
274*b1cdbd2cSJim Jagielski     }
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski     return sName;
277*b1cdbd2cSJim Jagielski }
278*b1cdbd2cSJim Jagielski 
GetBoundingBoxOnScreen(void) const279*b1cdbd2cSJim Jagielski Rectangle ScAccessiblePageHeaderArea::GetBoundingBoxOnScreen(void) const
280*b1cdbd2cSJim Jagielski     throw(::com::sun::star::uno::RuntimeException)
281*b1cdbd2cSJim Jagielski {
282*b1cdbd2cSJim Jagielski 	Rectangle aRect;
283*b1cdbd2cSJim Jagielski     if (mxParent.is())
284*b1cdbd2cSJim Jagielski     {
285*b1cdbd2cSJim Jagielski         uno::Reference<XAccessibleContext> xContext = mxParent->getAccessibleContext();
286*b1cdbd2cSJim Jagielski         uno::Reference<XAccessibleComponent> xComp(xContext, uno::UNO_QUERY);
287*b1cdbd2cSJim Jagielski         if (xComp.is())
288*b1cdbd2cSJim Jagielski         {
289*b1cdbd2cSJim Jagielski             // has the same size and position on screen like the parent
290*b1cdbd2cSJim Jagielski             aRect = Rectangle(VCLPoint(xComp->getLocationOnScreen()), VCLRectangle(xComp->getBounds()).GetSize());
291*b1cdbd2cSJim Jagielski         }
292*b1cdbd2cSJim Jagielski     }
293*b1cdbd2cSJim Jagielski 	return aRect;
294*b1cdbd2cSJim Jagielski }
295*b1cdbd2cSJim Jagielski 
GetBoundingBox(void) const296*b1cdbd2cSJim Jagielski Rectangle ScAccessiblePageHeaderArea::GetBoundingBox(void) const
297*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
298*b1cdbd2cSJim Jagielski {
299*b1cdbd2cSJim Jagielski 	Rectangle aRect;
300*b1cdbd2cSJim Jagielski     if (mxParent.is())
301*b1cdbd2cSJim Jagielski     {
302*b1cdbd2cSJim Jagielski         uno::Reference<XAccessibleContext> xContext = mxParent->getAccessibleContext();
303*b1cdbd2cSJim Jagielski         uno::Reference<XAccessibleComponent> xComp(xContext, uno::UNO_QUERY);
304*b1cdbd2cSJim Jagielski         if (xComp.is())
305*b1cdbd2cSJim Jagielski         {
306*b1cdbd2cSJim Jagielski             // has the same size and position on screen like the parent and so the pos is (0, 0)
307*b1cdbd2cSJim Jagielski             Rectangle aNewRect(Point(0, 0), VCLRectangle(xComp->getBounds()).GetSize());
308*b1cdbd2cSJim Jagielski             aRect = aNewRect;
309*b1cdbd2cSJim Jagielski         }
310*b1cdbd2cSJim Jagielski     }
311*b1cdbd2cSJim Jagielski 
312*b1cdbd2cSJim Jagielski 	return aRect;
313*b1cdbd2cSJim Jagielski }
314*b1cdbd2cSJim Jagielski 
CreateTextHelper()315*b1cdbd2cSJim Jagielski void ScAccessiblePageHeaderArea::CreateTextHelper()
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski 	if (!mpTextHelper)
318*b1cdbd2cSJim Jagielski 	{
319*b1cdbd2cSJim Jagielski 		::std::auto_ptr < ScAccessibleTextData > pAccessibleHeaderTextData
320*b1cdbd2cSJim Jagielski 			(new ScAccessibleHeaderTextData(mpViewShell, mpEditObj, mbHeader, meAdjust));
321*b1cdbd2cSJim Jagielski 		::std::auto_ptr< SvxEditSource > pEditSource (new ScAccessibilityEditSource(pAccessibleHeaderTextData));
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski 		mpTextHelper = new ::accessibility::AccessibleTextHelper(pEditSource );
324*b1cdbd2cSJim Jagielski         mpTextHelper->SetEventSource(this);
325*b1cdbd2cSJim Jagielski 	}
326*b1cdbd2cSJim Jagielski }
327