xref: /trunk/main/sw/source/core/access/accdoc.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5efeef26fSAndrew Rist  * distributed with this work for additional information
6efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17efeef26fSAndrew Rist  * specific language governing permissions and limitations
18efeef26fSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20efeef26fSAndrew Rist  *************************************************************/
21efeef26fSAndrew Rist 
22efeef26fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir #include <vcl/window.hxx>
27cdf0e10cSrcweir #include <rootfrm.hxx>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir 
30cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleRole.hpp>
31cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleStateType.hpp>
32cdf0e10cSrcweir #include <com/sun/star/beans/XPropertyChangeListener.hpp>
33cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleEventId.hpp>
34cdf0e10cSrcweir #include <unotools/accessiblestatesethelper.hxx>
35cdf0e10cSrcweir #include <tools/link.hxx>
36cdf0e10cSrcweir #include <sfx2/viewsh.hxx>
37cdf0e10cSrcweir #include <vos/mutex.hxx>
38cdf0e10cSrcweir #include <vcl/svapp.hxx>
39cdf0e10cSrcweir #include <viewsh.hxx>
40cdf0e10cSrcweir #include <doc.hxx>
41cdf0e10cSrcweir #include <accmap.hxx>
42cdf0e10cSrcweir #include <accdoc.hxx>
43cdf0e10cSrcweir #ifndef _ACCESS_HRC
44cdf0e10cSrcweir #include "access.hrc"
45cdf0e10cSrcweir #endif
46cdf0e10cSrcweir #include <pagefrm.hxx>
47cdf0e10cSrcweir 
48*ca62e2c2SSteve Yin #include <editeng/brshitem.hxx>
49*ca62e2c2SSteve Yin #include <swatrset.hxx>
50*ca62e2c2SSteve Yin #include <frmatr.hxx>
51*ca62e2c2SSteve Yin #include "unostyle.hxx"
52*ca62e2c2SSteve Yin #include "viewsh.hxx"
53*ca62e2c2SSteve Yin #include "docsh.hxx"
54*ca62e2c2SSteve Yin #include <crsrsh.hxx>
55*ca62e2c2SSteve Yin #include "fesh.hxx"
56*ca62e2c2SSteve Yin #include <fmtclds.hxx>
57*ca62e2c2SSteve Yin #include <flyfrm.hxx>
58*ca62e2c2SSteve Yin #include <colfrm.hxx>
59*ca62e2c2SSteve Yin #include <txtfrm.hxx>
60*ca62e2c2SSteve Yin #include <sectfrm.hxx>
61*ca62e2c2SSteve Yin #include <section.hxx>
62*ca62e2c2SSteve Yin #include <svx/unoapi.hxx>
63*ca62e2c2SSteve Yin #include <swmodule.hxx>
64*ca62e2c2SSteve Yin #include <svtools/colorcfg.hxx>
65*ca62e2c2SSteve Yin 
66*ca62e2c2SSteve Yin #include <fmtanchr.hxx>
67*ca62e2c2SSteve Yin #include <viewimp.hxx>
68*ca62e2c2SSteve Yin #include <dview.hxx>
69*ca62e2c2SSteve Yin #include <dcontact.hxx>
70*ca62e2c2SSteve Yin #include <svx/svdmark.hxx>
71cdf0e10cSrcweir const sal_Char sServiceName[] = "com.sun.star.text.AccessibleTextDocumentView";
72cdf0e10cSrcweir const sal_Char sImplementationName[] = "com.sun.star.comp.Writer.SwAccessibleDocumentView";
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 
75cdf0e10cSrcweir using namespace ::com::sun::star;
76cdf0e10cSrcweir using namespace ::com::sun::star::accessibility;
77cdf0e10cSrcweir using ::rtl::OUString;
78cdf0e10cSrcweir 
79cdf0e10cSrcweir using lang::IndexOutOfBoundsException;
80cdf0e10cSrcweir 
81cdf0e10cSrcweir 
82cdf0e10cSrcweir 
83cdf0e10cSrcweir //
84cdf0e10cSrcweir // SwAccessibleDocumentBase: base class for SwAccessibleDocument and
85cdf0e10cSrcweir // SwAccessiblePreview
86cdf0e10cSrcweir //
87cdf0e10cSrcweir 
SwAccessibleDocumentBase(SwAccessibleMap * _pMap)88cdf0e10cSrcweir SwAccessibleDocumentBase::SwAccessibleDocumentBase ( SwAccessibleMap *_pMap ) :
89cdf0e10cSrcweir     SwAccessibleContext( _pMap, AccessibleRole::DOCUMENT,
90cdf0e10cSrcweir                          _pMap->GetShell()->GetLayout() ),//swmod 071107//swmod 071225
91cdf0e10cSrcweir     mxParent( _pMap->GetShell()->GetWin()->GetAccessibleParentWindow()->GetAccessible() ),
92cdf0e10cSrcweir     mpChildWin( 0 )
93cdf0e10cSrcweir {
94cdf0e10cSrcweir }
95cdf0e10cSrcweir 
~SwAccessibleDocumentBase()96cdf0e10cSrcweir SwAccessibleDocumentBase::~SwAccessibleDocumentBase()
97cdf0e10cSrcweir {
98cdf0e10cSrcweir }
99cdf0e10cSrcweir 
SetVisArea()100cdf0e10cSrcweir void SwAccessibleDocumentBase::SetVisArea()
101cdf0e10cSrcweir {
102cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
103cdf0e10cSrcweir 
104cdf0e10cSrcweir     SwRect aOldVisArea( GetVisArea() );
105cdf0e10cSrcweir     const SwRect& rNewVisArea = GetMap()->GetVisArea();
106cdf0e10cSrcweir     if( aOldVisArea != rNewVisArea )
107cdf0e10cSrcweir     {
108cdf0e10cSrcweir         SwAccessibleFrame::SetVisArea( GetMap()->GetVisArea() );
109cdf0e10cSrcweir         // --> OD 2007-12-07 #i58139#
110cdf0e10cSrcweir         // showing state of document view needs also be updated.
111cdf0e10cSrcweir         // Thus, call method <Scrolled(..)> instead of <ChildrenScrolled(..)>
112cdf0e10cSrcweir //        ChildrenScrolled( GetFrm(), aOldVisArea );
113cdf0e10cSrcweir         Scrolled( aOldVisArea );
114cdf0e10cSrcweir         // <--
115cdf0e10cSrcweir     }
116cdf0e10cSrcweir }
117cdf0e10cSrcweir 
AddChild(Window * pWin,sal_Bool bFireEvent)118cdf0e10cSrcweir void SwAccessibleDocumentBase::AddChild( Window *pWin, sal_Bool bFireEvent )
119cdf0e10cSrcweir {
120cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
121cdf0e10cSrcweir 
122cdf0e10cSrcweir     ASSERT( !mpChildWin, "only one child window is supported" );
123cdf0e10cSrcweir     if( !mpChildWin )
124cdf0e10cSrcweir     {
125cdf0e10cSrcweir         mpChildWin = pWin;
126cdf0e10cSrcweir 
127cdf0e10cSrcweir         if( bFireEvent )
128cdf0e10cSrcweir         {
129cdf0e10cSrcweir             AccessibleEventObject aEvent;
130cdf0e10cSrcweir             aEvent.EventId = AccessibleEventId::CHILD;
131cdf0e10cSrcweir             aEvent.NewValue <<= mpChildWin->GetAccessible();
132cdf0e10cSrcweir             FireAccessibleEvent( aEvent );
133cdf0e10cSrcweir         }
134cdf0e10cSrcweir     }
135cdf0e10cSrcweir }
136cdf0e10cSrcweir 
RemoveChild(Window * pWin)137cdf0e10cSrcweir void SwAccessibleDocumentBase::RemoveChild( Window *pWin )
138cdf0e10cSrcweir {
139cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
140cdf0e10cSrcweir 
141cdf0e10cSrcweir     ASSERT( !mpChildWin || pWin == mpChildWin, "invalid child window to remove" );
142cdf0e10cSrcweir     if( mpChildWin && pWin == mpChildWin )
143cdf0e10cSrcweir     {
144cdf0e10cSrcweir         AccessibleEventObject aEvent;
145cdf0e10cSrcweir         aEvent.EventId = AccessibleEventId::CHILD;
146cdf0e10cSrcweir         aEvent.OldValue <<= mpChildWin->GetAccessible();
147cdf0e10cSrcweir         FireAccessibleEvent( aEvent );
148cdf0e10cSrcweir 
149cdf0e10cSrcweir         mpChildWin = 0;
150cdf0e10cSrcweir     }
151cdf0e10cSrcweir }
152cdf0e10cSrcweir 
getAccessibleChildCount(void)153cdf0e10cSrcweir sal_Int32 SAL_CALL SwAccessibleDocumentBase::getAccessibleChildCount( void )
154cdf0e10cSrcweir         throw (uno::RuntimeException)
155cdf0e10cSrcweir {
156cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
157cdf0e10cSrcweir 
158cdf0e10cSrcweir     // CHECK_FOR_DEFUNC is called by parent
159cdf0e10cSrcweir 
160cdf0e10cSrcweir     sal_Int32 nChildren = SwAccessibleContext::getAccessibleChildCount();
161cdf0e10cSrcweir     if( !IsDisposing() && mpChildWin )
162cdf0e10cSrcweir         nChildren++;
163cdf0e10cSrcweir 
164cdf0e10cSrcweir     return nChildren;
165cdf0e10cSrcweir }
166cdf0e10cSrcweir 
167cdf0e10cSrcweir uno::Reference< XAccessible> SAL_CALL
getAccessibleChild(sal_Int32 nIndex)168cdf0e10cSrcweir     SwAccessibleDocumentBase::getAccessibleChild( sal_Int32 nIndex )
169cdf0e10cSrcweir         throw (uno::RuntimeException,
170cdf0e10cSrcweir                 lang::IndexOutOfBoundsException)
171cdf0e10cSrcweir {
172cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
173cdf0e10cSrcweir 
174cdf0e10cSrcweir     if( mpChildWin  )
175cdf0e10cSrcweir     {
176cdf0e10cSrcweir         CHECK_FOR_DEFUNC( XAccessibleContext )
177cdf0e10cSrcweir         if ( nIndex == GetChildCount( *(GetMap()) ) )
178cdf0e10cSrcweir         {
179cdf0e10cSrcweir             return mpChildWin->GetAccessible();
180cdf0e10cSrcweir         }
181cdf0e10cSrcweir     }
182cdf0e10cSrcweir 
183cdf0e10cSrcweir     return SwAccessibleContext::getAccessibleChild( nIndex );
184cdf0e10cSrcweir }
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 
getAccessibleParent(void)187cdf0e10cSrcweir uno::Reference< XAccessible> SAL_CALL SwAccessibleDocumentBase::getAccessibleParent (void)
188cdf0e10cSrcweir         throw (uno::RuntimeException)
189cdf0e10cSrcweir {
190cdf0e10cSrcweir     return mxParent;
191cdf0e10cSrcweir }
192cdf0e10cSrcweir 
getAccessibleIndexInParent(void)193cdf0e10cSrcweir sal_Int32 SAL_CALL SwAccessibleDocumentBase::getAccessibleIndexInParent (void)
194cdf0e10cSrcweir         throw (uno::RuntimeException)
195cdf0e10cSrcweir {
196cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
197cdf0e10cSrcweir 
198cdf0e10cSrcweir     uno::Reference < XAccessibleContext > xAcc( mxParent->getAccessibleContext() );
199cdf0e10cSrcweir     uno::Reference < XAccessible > xThis( this );
200cdf0e10cSrcweir     sal_Int32 nCount = xAcc->getAccessibleChildCount();
201cdf0e10cSrcweir 
202cdf0e10cSrcweir     for( sal_Int32 i=0; i < nCount; i++ )
203cdf0e10cSrcweir     {
204*ca62e2c2SSteve Yin         try
205*ca62e2c2SSteve Yin         {
206cdf0e10cSrcweir             if( xAcc->getAccessibleChild( i ) == xThis )
207cdf0e10cSrcweir                 return i;
208cdf0e10cSrcweir         }
209*ca62e2c2SSteve Yin         catch(::com::sun::star::lang::IndexOutOfBoundsException e)
210*ca62e2c2SSteve Yin         {
211*ca62e2c2SSteve Yin             return -1L;
212*ca62e2c2SSteve Yin         }
213*ca62e2c2SSteve Yin     }
214cdf0e10cSrcweir     return -1L;
215cdf0e10cSrcweir }
216cdf0e10cSrcweir 
getAccessibleDescription(void)217cdf0e10cSrcweir OUString SAL_CALL SwAccessibleDocumentBase::getAccessibleDescription (void)
218cdf0e10cSrcweir     throw (uno::RuntimeException)
219cdf0e10cSrcweir {
220cdf0e10cSrcweir     return GetResource( STR_ACCESS_DOC_DESC );
221cdf0e10cSrcweir }
222cdf0e10cSrcweir 
getAccessibleName(void)223*ca62e2c2SSteve Yin OUString SAL_CALL SwAccessibleDocumentBase::getAccessibleName (void)
224*ca62e2c2SSteve Yin         throw (::com::sun::star::uno::RuntimeException)
225*ca62e2c2SSteve Yin {
226*ca62e2c2SSteve Yin     OUString sAccName = GetResource( STR_ACCESS_DOC_WORDPROCESSING );
227*ca62e2c2SSteve Yin     SwDoc *pDoc = GetShell()->GetDoc();
228*ca62e2c2SSteve Yin     if ( pDoc )
229*ca62e2c2SSteve Yin     {
230*ca62e2c2SSteve Yin         OUString sFileName = pDoc->getDocAccTitle();
231*ca62e2c2SSteve Yin         if ( !sFileName.getLength() )
232*ca62e2c2SSteve Yin         {
233*ca62e2c2SSteve Yin             SwDocShell* pDocSh = pDoc->GetDocShell();
234*ca62e2c2SSteve Yin             if ( pDocSh )
235*ca62e2c2SSteve Yin             {
236*ca62e2c2SSteve Yin                 sFileName = pDocSh->GetTitle( SFX_TITLE_APINAME );
237*ca62e2c2SSteve Yin             }
238*ca62e2c2SSteve Yin         }
239*ca62e2c2SSteve Yin         OUString sReadOnly;
240*ca62e2c2SSteve Yin         if(pDoc->getDocReadOnly())
241*ca62e2c2SSteve Yin         {
242*ca62e2c2SSteve Yin             sReadOnly = GetResource( STR_ACCESS_DOC_WORDPROCESSING_READONLY );
243*ca62e2c2SSteve Yin         }
244*ca62e2c2SSteve Yin 
245*ca62e2c2SSteve Yin         if ( sFileName.getLength() )
246*ca62e2c2SSteve Yin         {
247*ca62e2c2SSteve Yin             sAccName = sFileName + sReadOnly + OUString(RTL_CONSTASCII_USTRINGPARAM(" - ")) + sAccName;
248*ca62e2c2SSteve Yin         }
249*ca62e2c2SSteve Yin     }
250*ca62e2c2SSteve Yin 
251*ca62e2c2SSteve Yin     return sAccName;
252*ca62e2c2SSteve Yin }
253*ca62e2c2SSteve Yin 
getBounds()254cdf0e10cSrcweir awt::Rectangle SAL_CALL SwAccessibleDocumentBase::getBounds()
255cdf0e10cSrcweir         throw (uno::RuntimeException)
256cdf0e10cSrcweir {
257*ca62e2c2SSteve Yin     try
258*ca62e2c2SSteve Yin     {
259cdf0e10cSrcweir         vos::OGuard aGuard(Application::GetSolarMutex());
260cdf0e10cSrcweir 
261cdf0e10cSrcweir         Window *pWin = GetWindow();
262cdf0e10cSrcweir 
263cdf0e10cSrcweir         CHECK_FOR_WINDOW( XAccessibleComponent, pWin )
264cdf0e10cSrcweir 
265cdf0e10cSrcweir             Rectangle aPixBounds( pWin->GetWindowExtentsRelative( pWin->GetAccessibleParentWindow() ) );
266cdf0e10cSrcweir         awt::Rectangle aBox( aPixBounds.Left(), aPixBounds.Top(),
267cdf0e10cSrcweir             aPixBounds.GetWidth(), aPixBounds.GetHeight() );
268cdf0e10cSrcweir 
269cdf0e10cSrcweir         return aBox;
270cdf0e10cSrcweir     }
271*ca62e2c2SSteve Yin     catch(::com::sun::star::lang::IndexOutOfBoundsException e)
272*ca62e2c2SSteve Yin     {
273*ca62e2c2SSteve Yin         return awt::Rectangle();
274*ca62e2c2SSteve Yin     }
275*ca62e2c2SSteve Yin }
276cdf0e10cSrcweir 
277cdf0e10cSrcweir 
getLocation()278cdf0e10cSrcweir awt::Point SAL_CALL SwAccessibleDocumentBase::getLocation()
279cdf0e10cSrcweir         throw (uno::RuntimeException)
280cdf0e10cSrcweir {
281cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
282cdf0e10cSrcweir 
283cdf0e10cSrcweir     Window *pWin = GetWindow();
284cdf0e10cSrcweir 
285cdf0e10cSrcweir     CHECK_FOR_WINDOW( XAccessibleComponent, pWin )
286cdf0e10cSrcweir 
287cdf0e10cSrcweir     Point aPixPos( pWin->GetWindowExtentsRelative( pWin->GetAccessibleParentWindow() ).TopLeft() );
288cdf0e10cSrcweir     awt::Point aLoc( aPixPos.X(), aPixPos.Y() );
289cdf0e10cSrcweir 
290cdf0e10cSrcweir     return aLoc;
291cdf0e10cSrcweir }
292cdf0e10cSrcweir 
293cdf0e10cSrcweir 
getLocationOnScreen()294cdf0e10cSrcweir ::com::sun::star::awt::Point SAL_CALL SwAccessibleDocumentBase::getLocationOnScreen()
295cdf0e10cSrcweir         throw (uno::RuntimeException)
296cdf0e10cSrcweir {
297cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
298cdf0e10cSrcweir 
299cdf0e10cSrcweir     Window *pWin = GetWindow();
300cdf0e10cSrcweir 
301cdf0e10cSrcweir     CHECK_FOR_WINDOW( XAccessibleComponent, pWin )
302cdf0e10cSrcweir 
303cdf0e10cSrcweir     Point aPixPos( pWin->GetWindowExtentsRelative( 0 ).TopLeft() );
304cdf0e10cSrcweir     awt::Point aLoc( aPixPos.X(), aPixPos.Y() );
305cdf0e10cSrcweir 
306cdf0e10cSrcweir     return aLoc;
307cdf0e10cSrcweir }
308cdf0e10cSrcweir 
309cdf0e10cSrcweir 
getSize()310cdf0e10cSrcweir ::com::sun::star::awt::Size SAL_CALL SwAccessibleDocumentBase::getSize()
311cdf0e10cSrcweir         throw (uno::RuntimeException)
312cdf0e10cSrcweir {
313cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
314cdf0e10cSrcweir 
315cdf0e10cSrcweir     Window *pWin = GetWindow();
316cdf0e10cSrcweir 
317cdf0e10cSrcweir     CHECK_FOR_WINDOW( XAccessibleComponent, pWin )
318cdf0e10cSrcweir 
319cdf0e10cSrcweir     Size aPixSize( pWin->GetWindowExtentsRelative( 0 ).GetSize() );
320cdf0e10cSrcweir     awt::Size aSize( aPixSize.Width(), aPixSize.Height() );
321cdf0e10cSrcweir 
322cdf0e10cSrcweir     return aSize;
323cdf0e10cSrcweir }
324cdf0e10cSrcweir 
containsPoint(const awt::Point & aPoint)325cdf0e10cSrcweir sal_Bool SAL_CALL SwAccessibleDocumentBase::containsPoint(
326cdf0e10cSrcweir             const awt::Point& aPoint )
327cdf0e10cSrcweir         throw (uno::RuntimeException)
328cdf0e10cSrcweir {
329cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
330cdf0e10cSrcweir 
331cdf0e10cSrcweir     Window *pWin = GetWindow();
332cdf0e10cSrcweir 
333cdf0e10cSrcweir     CHECK_FOR_WINDOW( XAccessibleComponent, pWin )
334cdf0e10cSrcweir 
335cdf0e10cSrcweir     Rectangle aPixBounds( pWin->GetWindowExtentsRelative( 0 ) );
336cdf0e10cSrcweir     aPixBounds.Move(-aPixBounds.Left(), -aPixBounds.Top());
337cdf0e10cSrcweir 
338cdf0e10cSrcweir     Point aPixPoint( aPoint.X, aPoint.Y );
339cdf0e10cSrcweir     return aPixBounds.IsInside( aPixPoint );
340cdf0e10cSrcweir }
341cdf0e10cSrcweir 
getAccessibleAtPoint(const awt::Point & aPoint)342cdf0e10cSrcweir uno::Reference< XAccessible > SAL_CALL SwAccessibleDocumentBase::getAccessibleAtPoint(
343cdf0e10cSrcweir                 const awt::Point& aPoint )
344cdf0e10cSrcweir         throw (uno::RuntimeException)
345cdf0e10cSrcweir {
346cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
347cdf0e10cSrcweir 
348cdf0e10cSrcweir     if( mpChildWin  )
349cdf0e10cSrcweir     {
350cdf0e10cSrcweir         CHECK_FOR_DEFUNC( XAccessibleComponent )
351cdf0e10cSrcweir 
352cdf0e10cSrcweir         Window *pWin = GetWindow();
353cdf0e10cSrcweir         CHECK_FOR_WINDOW( XAccessibleComponent, pWin )
354cdf0e10cSrcweir 
355cdf0e10cSrcweir         Point aPixPoint( aPoint.X, aPoint.Y ); // px rel to window
356cdf0e10cSrcweir         if( mpChildWin->GetWindowExtentsRelative( pWin ).IsInside( aPixPoint ) )
357cdf0e10cSrcweir             return mpChildWin->GetAccessible();
358cdf0e10cSrcweir     }
359cdf0e10cSrcweir 
360cdf0e10cSrcweir     return SwAccessibleContext::getAccessibleAtPoint( aPoint );
361cdf0e10cSrcweir }
362cdf0e10cSrcweir 
363cdf0e10cSrcweir //
364cdf0e10cSrcweir // SwAccessibeDocument
365cdf0e10cSrcweir //
366cdf0e10cSrcweir 
GetStates(::utl::AccessibleStateSetHelper & rStateSet)367cdf0e10cSrcweir void SwAccessibleDocument::GetStates(
368cdf0e10cSrcweir         ::utl::AccessibleStateSetHelper& rStateSet )
369cdf0e10cSrcweir {
370cdf0e10cSrcweir     SwAccessibleContext::GetStates( rStateSet );
371cdf0e10cSrcweir 
372cdf0e10cSrcweir     // MULTISELECTABLE
373cdf0e10cSrcweir     rStateSet.AddState( AccessibleStateType::MULTI_SELECTABLE );
374*ca62e2c2SSteve Yin     rStateSet.AddState( AccessibleStateType::MANAGES_DESCENDANTS );
375cdf0e10cSrcweir }
376cdf0e10cSrcweir 
377cdf0e10cSrcweir 
SwAccessibleDocument(SwAccessibleMap * pInitMap)378cdf0e10cSrcweir SwAccessibleDocument::SwAccessibleDocument ( SwAccessibleMap* pInitMap ) :
379cdf0e10cSrcweir     SwAccessibleDocumentBase( pInitMap ),
380cdf0e10cSrcweir     maSelectionHelper( *this )
381cdf0e10cSrcweir {
382cdf0e10cSrcweir     SetName( GetResource( STR_ACCESS_DOC_NAME ) );
383cdf0e10cSrcweir     Window *pWin = pInitMap->GetShell()->GetWin();
384cdf0e10cSrcweir     if( pWin )
385cdf0e10cSrcweir     {
386cdf0e10cSrcweir         pWin->AddChildEventListener( LINK( this, SwAccessibleDocument, WindowChildEventListener ));
387cdf0e10cSrcweir         sal_uInt16 nCount =   pWin->GetChildCount();
388cdf0e10cSrcweir         for( sal_uInt16 i=0; i < nCount; i++ )
389cdf0e10cSrcweir         {
390cdf0e10cSrcweir             Window* pChildWin = pWin->GetChild( i );
391cdf0e10cSrcweir             if( pChildWin &&
392cdf0e10cSrcweir                 AccessibleRole::EMBEDDED_OBJECT == pChildWin->GetAccessibleRole() )
393cdf0e10cSrcweir                 AddChild( pChildWin, sal_False );
394cdf0e10cSrcweir         }
395cdf0e10cSrcweir     }
396cdf0e10cSrcweir }
397cdf0e10cSrcweir 
~SwAccessibleDocument()398cdf0e10cSrcweir SwAccessibleDocument::~SwAccessibleDocument()
399cdf0e10cSrcweir {
400cdf0e10cSrcweir     Window *pWin = GetMap() ? GetMap()->GetShell()->GetWin() : 0;
401cdf0e10cSrcweir     if( pWin )
402cdf0e10cSrcweir         pWin->RemoveChildEventListener( LINK( this, SwAccessibleDocument, WindowChildEventListener ));
403cdf0e10cSrcweir }
404cdf0e10cSrcweir 
Dispose(sal_Bool bRecursive)405cdf0e10cSrcweir void SwAccessibleDocument::Dispose( sal_Bool bRecursive )
406cdf0e10cSrcweir {
407cdf0e10cSrcweir     ASSERT( GetFrm() && GetMap(), "already disposed" );
408cdf0e10cSrcweir 
409cdf0e10cSrcweir     Window *pWin = GetMap() ? GetMap()->GetShell()->GetWin() : 0;
410cdf0e10cSrcweir     if( pWin )
411cdf0e10cSrcweir         pWin->RemoveChildEventListener( LINK( this, SwAccessibleDocument, WindowChildEventListener ));
412cdf0e10cSrcweir     SwAccessibleContext::Dispose( bRecursive );
413cdf0e10cSrcweir }
414cdf0e10cSrcweir 
IMPL_LINK(SwAccessibleDocument,WindowChildEventListener,VclSimpleEvent *,pEvent)415cdf0e10cSrcweir IMPL_LINK( SwAccessibleDocument, WindowChildEventListener, VclSimpleEvent*, pEvent )
416cdf0e10cSrcweir {
417cdf0e10cSrcweir     DBG_ASSERT( pEvent && pEvent->ISA( VclWindowEvent ), "Unknown WindowEvent!" );
418cdf0e10cSrcweir     if ( pEvent && pEvent->ISA( VclWindowEvent ) )
419cdf0e10cSrcweir     {
420cdf0e10cSrcweir         VclWindowEvent *pVclEvent = static_cast< VclWindowEvent * >( pEvent );
421cdf0e10cSrcweir         DBG_ASSERT( pVclEvent->GetWindow(), "Window???" );
422cdf0e10cSrcweir         switch ( pVclEvent->GetId() )
423cdf0e10cSrcweir         {
424cdf0e10cSrcweir         case VCLEVENT_WINDOW_SHOW:  // send create on show for direct accessible children
425cdf0e10cSrcweir             {
426cdf0e10cSrcweir                 Window* pChildWin = static_cast< Window* >( pVclEvent->GetData() );
427cdf0e10cSrcweir                 if( pChildWin && AccessibleRole::EMBEDDED_OBJECT == pChildWin->GetAccessibleRole() )
428cdf0e10cSrcweir                 {
429cdf0e10cSrcweir                     AddChild( pChildWin );
430cdf0e10cSrcweir                 }
431cdf0e10cSrcweir             }
432cdf0e10cSrcweir             break;
433cdf0e10cSrcweir         case VCLEVENT_WINDOW_HIDE:  // send destroy on hide for direct accessible children
434cdf0e10cSrcweir             {
435cdf0e10cSrcweir                 Window* pChildWin = static_cast< Window* >( pVclEvent->GetData() );
436cdf0e10cSrcweir                 if( pChildWin && AccessibleRole::EMBEDDED_OBJECT == pChildWin->GetAccessibleRole() )
437cdf0e10cSrcweir                 {
438cdf0e10cSrcweir                     RemoveChild( pChildWin );
439cdf0e10cSrcweir                 }
440cdf0e10cSrcweir             }
441cdf0e10cSrcweir             break;
442cdf0e10cSrcweir         case VCLEVENT_OBJECT_DYING:  // send destroy on hide for direct accessible children
443cdf0e10cSrcweir             {
444cdf0e10cSrcweir                 Window* pChildWin = pVclEvent->GetWindow();
445cdf0e10cSrcweir                 if( pChildWin && AccessibleRole::EMBEDDED_OBJECT == pChildWin->GetAccessibleRole() )
446cdf0e10cSrcweir                 {
447cdf0e10cSrcweir                     RemoveChild( pChildWin );
448cdf0e10cSrcweir                 }
449cdf0e10cSrcweir             }
450cdf0e10cSrcweir             break;
451cdf0e10cSrcweir         }
452cdf0e10cSrcweir     }
453cdf0e10cSrcweir     return 0;
454cdf0e10cSrcweir }
455cdf0e10cSrcweir 
456cdf0e10cSrcweir 
getImplementationName()457cdf0e10cSrcweir OUString SAL_CALL SwAccessibleDocument::getImplementationName()
458cdf0e10cSrcweir         throw( uno::RuntimeException )
459cdf0e10cSrcweir {
460cdf0e10cSrcweir     return OUString(RTL_CONSTASCII_USTRINGPARAM(sImplementationName));
461cdf0e10cSrcweir }
462cdf0e10cSrcweir 
supportsService(const::rtl::OUString & sTestServiceName)463cdf0e10cSrcweir sal_Bool SAL_CALL SwAccessibleDocument::supportsService(
464cdf0e10cSrcweir         const ::rtl::OUString& sTestServiceName)
465cdf0e10cSrcweir     throw (uno::RuntimeException)
466cdf0e10cSrcweir {
467cdf0e10cSrcweir     return sTestServiceName.equalsAsciiL( sServiceName,
468cdf0e10cSrcweir                                           sizeof(sServiceName)-1 ) ||
469cdf0e10cSrcweir            sTestServiceName.equalsAsciiL( sAccessibleServiceName,
470cdf0e10cSrcweir                                           sizeof(sAccessibleServiceName)-1 );
471cdf0e10cSrcweir }
472cdf0e10cSrcweir 
getSupportedServiceNames()473cdf0e10cSrcweir uno::Sequence< OUString > SAL_CALL SwAccessibleDocument::getSupportedServiceNames()
474cdf0e10cSrcweir         throw( uno::RuntimeException )
475cdf0e10cSrcweir {
476cdf0e10cSrcweir     uno::Sequence< OUString > aRet(2);
477cdf0e10cSrcweir     OUString* pArray = aRet.getArray();
478cdf0e10cSrcweir     pArray[0] = OUString( RTL_CONSTASCII_USTRINGPARAM(sServiceName) );
479cdf0e10cSrcweir     pArray[1] = OUString( RTL_CONSTASCII_USTRINGPARAM(sAccessibleServiceName) );
480cdf0e10cSrcweir     return aRet;
481cdf0e10cSrcweir }
482cdf0e10cSrcweir 
483cdf0e10cSrcweir //=====  XInterface  ======================================================
484cdf0e10cSrcweir 
queryInterface(const uno::Type & rType)485cdf0e10cSrcweir uno::Any SwAccessibleDocument::queryInterface(
486cdf0e10cSrcweir     const uno::Type& rType )
487cdf0e10cSrcweir     throw ( uno::RuntimeException )
488cdf0e10cSrcweir {
489cdf0e10cSrcweir     uno::Any aRet;
490cdf0e10cSrcweir     if ( rType == ::getCppuType( static_cast< uno::Reference< XAccessibleSelection > * >( 0 ) ) )
491cdf0e10cSrcweir     {
492cdf0e10cSrcweir         uno::Reference<XAccessibleSelection> aSelect = this;
493cdf0e10cSrcweir         aRet <<= aSelect;
494cdf0e10cSrcweir     }
495*ca62e2c2SSteve Yin     //Solution:Add XEventListener interface support.
496*ca62e2c2SSteve Yin     else if ( (rType == ::getCppuType((uno::Reference<com::sun::star::document::XEventListener> *)NULL)) )
497*ca62e2c2SSteve Yin     {
498*ca62e2c2SSteve Yin         uno::Reference<com::sun::star::document::XEventListener> aSelect = this;
499*ca62e2c2SSteve Yin         aRet <<= aSelect;
500*ca62e2c2SSteve Yin     }
501*ca62e2c2SSteve Yin     else  if ( rType == ::getCppuType((uno::Reference<XAccessibleExtendedAttributes> *)NULL) )
502*ca62e2c2SSteve Yin     {
503*ca62e2c2SSteve Yin         uno::Reference<XAccessibleExtendedAttributes> aAttribute = this;
504*ca62e2c2SSteve Yin         aRet <<= aAttribute;
505*ca62e2c2SSteve Yin     }
506*ca62e2c2SSteve Yin     else if(rType == ::getCppuType((uno::Reference<XAccessibleGetAccFlowTo> *)NULL) )
507*ca62e2c2SSteve Yin     {
508*ca62e2c2SSteve Yin         uno::Reference<XAccessibleGetAccFlowTo> AccFlowTo = this;
509*ca62e2c2SSteve Yin         aRet <<= AccFlowTo;
510*ca62e2c2SSteve Yin     }
511cdf0e10cSrcweir     else
512cdf0e10cSrcweir         aRet = SwAccessibleContext::queryInterface( rType );
513cdf0e10cSrcweir     return aRet;
514cdf0e10cSrcweir }
515cdf0e10cSrcweir 
516cdf0e10cSrcweir //====== XTypeProvider ====================================================
getTypes()517cdf0e10cSrcweir uno::Sequence< uno::Type > SAL_CALL SwAccessibleDocument::getTypes()
518cdf0e10cSrcweir     throw(uno::RuntimeException)
519cdf0e10cSrcweir {
520cdf0e10cSrcweir     uno::Sequence< uno::Type > aTypes( SwAccessibleDocumentBase::getTypes() );
521cdf0e10cSrcweir 
522cdf0e10cSrcweir     sal_Int32 nIndex = aTypes.getLength();
523*ca62e2c2SSteve Yin     //Solution:Reset types memory alloc
524*ca62e2c2SSteve Yin     //aTypes.realloc( nIndex + 1 );
525*ca62e2c2SSteve Yin     aTypes.realloc( nIndex + 2 );
526cdf0e10cSrcweir 
527cdf0e10cSrcweir     uno::Type* pTypes = aTypes.getArray();
528cdf0e10cSrcweir     pTypes[nIndex] = ::getCppuType( static_cast< uno::Reference< XAccessibleSelection > * >( 0 ) );
529*ca62e2c2SSteve Yin     //Solution:Add XEventListener interface support.
530*ca62e2c2SSteve Yin     pTypes[nIndex + 1 ] = ::getCppuType( static_cast< uno::Reference< com::sun::star::document::XEventListener > * >( 0 ) );
531cdf0e10cSrcweir     return aTypes;
532cdf0e10cSrcweir }
533cdf0e10cSrcweir 
getImplementationId()534cdf0e10cSrcweir uno::Sequence< sal_Int8 > SAL_CALL SwAccessibleDocument::getImplementationId()
535cdf0e10cSrcweir         throw(uno::RuntimeException)
536cdf0e10cSrcweir {
537cdf0e10cSrcweir     vos::OGuard aGuard(Application::GetSolarMutex());
538cdf0e10cSrcweir     static uno::Sequence< sal_Int8 > aId( 16 );
539cdf0e10cSrcweir     static sal_Bool bInit = sal_False;
540cdf0e10cSrcweir     if(!bInit)
541cdf0e10cSrcweir     {
542cdf0e10cSrcweir         rtl_createUuid( (sal_uInt8 *)(aId.getArray() ), 0, sal_True );
543cdf0e10cSrcweir         bInit = sal_True;
544cdf0e10cSrcweir     }
545cdf0e10cSrcweir     return aId;
546cdf0e10cSrcweir }
547cdf0e10cSrcweir 
548cdf0e10cSrcweir //=====  XAccessibleSelection  ============================================
549cdf0e10cSrcweir 
selectAccessibleChild(sal_Int32 nChildIndex)550cdf0e10cSrcweir void SwAccessibleDocument::selectAccessibleChild(
551cdf0e10cSrcweir     sal_Int32 nChildIndex )
552cdf0e10cSrcweir     throw ( lang::IndexOutOfBoundsException,
553cdf0e10cSrcweir             uno::RuntimeException )
554cdf0e10cSrcweir {
555cdf0e10cSrcweir     maSelectionHelper.selectAccessibleChild(nChildIndex);
556cdf0e10cSrcweir }
557cdf0e10cSrcweir 
isAccessibleChildSelected(sal_Int32 nChildIndex)558cdf0e10cSrcweir sal_Bool SwAccessibleDocument::isAccessibleChildSelected(
559cdf0e10cSrcweir     sal_Int32 nChildIndex )
560cdf0e10cSrcweir     throw ( lang::IndexOutOfBoundsException,
561cdf0e10cSrcweir             uno::RuntimeException )
562cdf0e10cSrcweir {
563cdf0e10cSrcweir     return maSelectionHelper.isAccessibleChildSelected(nChildIndex);
564cdf0e10cSrcweir }
565cdf0e10cSrcweir 
clearAccessibleSelection()566cdf0e10cSrcweir void SwAccessibleDocument::clearAccessibleSelection(  )
567cdf0e10cSrcweir     throw ( uno::RuntimeException )
568cdf0e10cSrcweir {
569cdf0e10cSrcweir     maSelectionHelper.clearAccessibleSelection();
570cdf0e10cSrcweir }
571cdf0e10cSrcweir 
selectAllAccessibleChildren()572cdf0e10cSrcweir void SwAccessibleDocument::selectAllAccessibleChildren(  )
573cdf0e10cSrcweir     throw ( uno::RuntimeException )
574cdf0e10cSrcweir {
575cdf0e10cSrcweir     maSelectionHelper.selectAllAccessibleChildren();
576cdf0e10cSrcweir }
577cdf0e10cSrcweir 
getSelectedAccessibleChildCount()578cdf0e10cSrcweir sal_Int32 SwAccessibleDocument::getSelectedAccessibleChildCount(  )
579cdf0e10cSrcweir     throw ( uno::RuntimeException )
580cdf0e10cSrcweir {
581cdf0e10cSrcweir     return maSelectionHelper.getSelectedAccessibleChildCount();
582cdf0e10cSrcweir }
583cdf0e10cSrcweir 
getSelectedAccessibleChild(sal_Int32 nSelectedChildIndex)584cdf0e10cSrcweir uno::Reference<XAccessible> SwAccessibleDocument::getSelectedAccessibleChild(
585cdf0e10cSrcweir     sal_Int32 nSelectedChildIndex )
586cdf0e10cSrcweir     throw ( lang::IndexOutOfBoundsException,
587cdf0e10cSrcweir             uno::RuntimeException)
588cdf0e10cSrcweir {
589cdf0e10cSrcweir     return maSelectionHelper.getSelectedAccessibleChild(nSelectedChildIndex);
590cdf0e10cSrcweir }
591cdf0e10cSrcweir 
592cdf0e10cSrcweir // --> OD 2004-11-16 #111714# - index has to be treated as global child index.
deselectAccessibleChild(sal_Int32 nChildIndex)593cdf0e10cSrcweir void SwAccessibleDocument::deselectAccessibleChild(
594cdf0e10cSrcweir     sal_Int32 nChildIndex )
595cdf0e10cSrcweir     throw ( lang::IndexOutOfBoundsException,
596cdf0e10cSrcweir             uno::RuntimeException )
597cdf0e10cSrcweir {
598cdf0e10cSrcweir     maSelectionHelper.deselectAccessibleChild( nChildIndex );
599cdf0e10cSrcweir }
600*ca62e2c2SSteve Yin //Solution:Implement XEventListener interfaces
notifyEvent(const::com::sun::star::document::EventObject & Event)601*ca62e2c2SSteve Yin void SAL_CALL SwAccessibleDocument::notifyEvent( const ::com::sun::star::document::EventObject& Event )
602*ca62e2c2SSteve Yin             throw (::com::sun::star::uno::RuntimeException)
603*ca62e2c2SSteve Yin {
604*ca62e2c2SSteve Yin     if ( Event.EventName.equalsAscii( "FirstPageShows" ) )
605*ca62e2c2SSteve Yin     {
606*ca62e2c2SSteve Yin         FireStateChangedEvent( AccessibleStateType::FOCUSED,sal_True );
607*ca62e2c2SSteve Yin     }
608*ca62e2c2SSteve Yin     else if ( Event.EventName.equalsAscii( "LoadFinished" ) )
609*ca62e2c2SSteve Yin     {
610*ca62e2c2SSteve Yin         // IA2 CWS. MT: OFFSCREEN == !SHOWING, should stay consistent
611*ca62e2c2SSteve Yin         // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,sal_True );
612*ca62e2c2SSteve Yin         // MT: LoadFinished => Why not SHOWING == TRUE?
613*ca62e2c2SSteve Yin         FireStateChangedEvent( AccessibleStateType::SHOWING,sal_False );
614*ca62e2c2SSteve Yin     }
615*ca62e2c2SSteve Yin     else if ( Event.EventName.equalsAscii( "FormatFinished" ) )
616*ca62e2c2SSteve Yin     {
617*ca62e2c2SSteve Yin         FireStateChangedEvent( AccessibleStateType::BUSY,sal_False );
618*ca62e2c2SSteve Yin         // FireStateChangedEvent( AccessibleStateType::OFFSCREEN,sal_False );
619*ca62e2c2SSteve Yin         FireStateChangedEvent( AccessibleStateType::SHOWING,sal_True );
620*ca62e2c2SSteve Yin     }
621*ca62e2c2SSteve Yin     else
622*ca62e2c2SSteve Yin     {
623*ca62e2c2SSteve Yin         isIfAsynLoad = sal_False;
624*ca62e2c2SSteve Yin     }
625*ca62e2c2SSteve Yin }
626*ca62e2c2SSteve Yin 
disposing(const::com::sun::star::lang::EventObject &)627*ca62e2c2SSteve Yin void SAL_CALL SwAccessibleDocument::disposing( const ::com::sun::star::lang::EventObject& )
628*ca62e2c2SSteve Yin             throw (::com::sun::star::uno::RuntimeException)
629*ca62e2c2SSteve Yin {
630*ca62e2c2SSteve Yin }
631*ca62e2c2SSteve Yin 
getExtendedAttributes()632*ca62e2c2SSteve Yin uno::Any SAL_CALL SwAccessibleDocument::getExtendedAttributes()
633*ca62e2c2SSteve Yin         throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException)
634*ca62e2c2SSteve Yin {
635*ca62e2c2SSteve Yin     uno::Any anyAtrribute;
636*ca62e2c2SSteve Yin     SwDoc *pDoc = GetShell()->GetDoc();
637*ca62e2c2SSteve Yin 
638*ca62e2c2SSteve Yin     if (!pDoc)
639*ca62e2c2SSteve Yin         return anyAtrribute;
640*ca62e2c2SSteve Yin     SwCrsrShell* pCrsrShell = GetCrsrShell();
641*ca62e2c2SSteve Yin     if( !pCrsrShell )
642*ca62e2c2SSteve Yin         return anyAtrribute;
643*ca62e2c2SSteve Yin 
644*ca62e2c2SSteve Yin     SwFEShell* pFEShell = pCrsrShell->ISA( SwFEShell )
645*ca62e2c2SSteve Yin                                 ? static_cast<SwFEShell*>( pCrsrShell )
646*ca62e2c2SSteve Yin                             : 0;
647*ca62e2c2SSteve Yin     rtl::OUString sAttrName;
648*ca62e2c2SSteve Yin     rtl::OUString sValue;
649*ca62e2c2SSteve Yin     sal_uInt16 nPage, nLogPage;
650*ca62e2c2SSteve Yin     String sDisplay;
651*ca62e2c2SSteve Yin 
652*ca62e2c2SSteve Yin     if( pFEShell )
653*ca62e2c2SSteve Yin     {
654*ca62e2c2SSteve Yin         pFEShell->GetPageNumber(-1,sal_True,nPage,nLogPage,sDisplay);
655*ca62e2c2SSteve Yin         sAttrName = rtl::OUString::createFromAscii("page-name:");
656*ca62e2c2SSteve Yin 
657*ca62e2c2SSteve Yin 
658*ca62e2c2SSteve Yin         sValue = sAttrName + sDisplay ;
659*ca62e2c2SSteve Yin         sAttrName = rtl::OUString::createFromAscii(";page-number:");
660*ca62e2c2SSteve Yin         sValue += sAttrName;
661*ca62e2c2SSteve Yin         sValue += String::CreateFromInt32( nPage ) ;
662*ca62e2c2SSteve Yin         sAttrName = rtl::OUString::createFromAscii(";total-pages:");
663*ca62e2c2SSteve Yin         sValue += sAttrName;
664*ca62e2c2SSteve Yin         sValue += String::CreateFromInt32( pCrsrShell->GetPageCnt() ) ;
665*ca62e2c2SSteve Yin         sValue +=  rtl::OUString::createFromAscii(";");
666*ca62e2c2SSteve Yin 
667*ca62e2c2SSteve Yin 
668*ca62e2c2SSteve Yin         sAttrName=rtl::OUString::createFromAscii("line-number:");
669*ca62e2c2SSteve Yin 
670*ca62e2c2SSteve Yin 
671*ca62e2c2SSteve Yin 
672*ca62e2c2SSteve Yin         SwCntntFrm* pCurrFrm = pCrsrShell->GetCurrFrm();
673*ca62e2c2SSteve Yin         SwPageFrm* pCurrPage=((SwFrm*)pCurrFrm)->FindPageFrm();
674*ca62e2c2SSteve Yin         sal_uLong nLineNum = 0;
675*ca62e2c2SSteve Yin         SwTxtFrm* pTxtFrm = NULL;
676*ca62e2c2SSteve Yin         SwTxtFrm* pCurrTxtFrm = NULL;
677*ca62e2c2SSteve Yin         pTxtFrm = static_cast< SwTxtFrm* >(static_cast< SwPageFrm* > (pCurrPage)->ContainsCntnt());
678*ca62e2c2SSteve Yin         if (pCurrFrm->IsInFly())//such as, graphic,chart
679*ca62e2c2SSteve Yin         {
680*ca62e2c2SSteve Yin             SwFlyFrm *pFlyFrm = pCurrFrm->FindFlyFrm();
681*ca62e2c2SSteve Yin             const SwFmtAnchor& rAnchor = pFlyFrm->GetFmt()->GetAnchor();
682*ca62e2c2SSteve Yin             RndStdIds eAnchorId = rAnchor.GetAnchorId();
683*ca62e2c2SSteve Yin             if(eAnchorId == FLY_AS_CHAR)
684*ca62e2c2SSteve Yin             {
685*ca62e2c2SSteve Yin                 const SwFrm *pSwFrm = pFlyFrm->GetAnchorFrm();
686*ca62e2c2SSteve Yin                 if(pSwFrm->IsTxtFrm())
687*ca62e2c2SSteve Yin                     pCurrTxtFrm = ((SwTxtFrm*)(pSwFrm));
688*ca62e2c2SSteve Yin             }
689*ca62e2c2SSteve Yin         }
690*ca62e2c2SSteve Yin         else
691*ca62e2c2SSteve Yin             pCurrTxtFrm = static_cast< SwTxtFrm* >(pCurrFrm);
692*ca62e2c2SSteve Yin         //check whether the text frame where the Graph/OLE/Frame anchored is in the Header/Footer
693*ca62e2c2SSteve Yin         SwFrm* pFrm = pCurrTxtFrm;
694*ca62e2c2SSteve Yin         while ( pFrm && !pFrm->IsHeaderFrm() && !pFrm->IsFooterFrm() )
695*ca62e2c2SSteve Yin             pFrm = pFrm->GetUpper();
696*ca62e2c2SSteve Yin         if ( pFrm )
697*ca62e2c2SSteve Yin             pCurrTxtFrm = NULL;
698*ca62e2c2SSteve Yin         //check shape
699*ca62e2c2SSteve Yin         if(pCrsrShell->Imp()->GetDrawView())
700*ca62e2c2SSteve Yin         {
701*ca62e2c2SSteve Yin             const SdrMarkList &rMrkList = pCrsrShell->Imp()->GetDrawView()->GetMarkedObjectList();
702*ca62e2c2SSteve Yin             for ( sal_uInt16 i = 0; i < rMrkList.GetMarkCount(); ++i )
703*ca62e2c2SSteve Yin             {
704*ca62e2c2SSteve Yin                 SdrObject *pObj = rMrkList.GetMark(i)->GetMarkedSdrObj();
705*ca62e2c2SSteve Yin                 SwFrmFmt* pFmt = ((SwDrawContact*)pObj->GetUserCall())->GetFmt();
706*ca62e2c2SSteve Yin                 const SwFmtAnchor& rAnchor = pFmt->GetAnchor();
707*ca62e2c2SSteve Yin                 if( FLY_AS_CHAR != rAnchor.GetAnchorId() )
708*ca62e2c2SSteve Yin                     pCurrTxtFrm = NULL;
709*ca62e2c2SSteve Yin             }
710*ca62e2c2SSteve Yin         }
711*ca62e2c2SSteve Yin         //calculate line number
712*ca62e2c2SSteve Yin         if (pCurrTxtFrm && pTxtFrm)
713*ca62e2c2SSteve Yin         {
714*ca62e2c2SSteve Yin             if (!(pCurrTxtFrm->IsInTab() || pCurrTxtFrm->IsInFtn()))
715*ca62e2c2SSteve Yin             {
716*ca62e2c2SSteve Yin                 while( pTxtFrm != pCurrTxtFrm )
717*ca62e2c2SSteve Yin                 {
718*ca62e2c2SSteve Yin                     //check header/footer
719*ca62e2c2SSteve Yin                     pFrm = pTxtFrm;
720*ca62e2c2SSteve Yin                     while ( pFrm && !pFrm->IsHeaderFrm() && !pFrm->IsFooterFrm() )
721*ca62e2c2SSteve Yin                         pFrm = pFrm->GetUpper();
722*ca62e2c2SSteve Yin                     if ( pFrm )
723*ca62e2c2SSteve Yin                     {
724*ca62e2c2SSteve Yin                         pTxtFrm = static_cast< SwTxtFrm*>(pTxtFrm->GetNextCntntFrm());
725*ca62e2c2SSteve Yin                         continue;
726*ca62e2c2SSteve Yin                     }
727*ca62e2c2SSteve Yin                     if (!(pTxtFrm->IsInTab() || pTxtFrm->IsInFtn() || pTxtFrm->IsInFly()))
728*ca62e2c2SSteve Yin                         nLineNum += pTxtFrm->GetThisLines();
729*ca62e2c2SSteve Yin                     pTxtFrm = static_cast< SwTxtFrm* >(pTxtFrm ->GetNextCntntFrm());
730*ca62e2c2SSteve Yin                 }
731*ca62e2c2SSteve Yin                 SwPaM* pCaret = pCrsrShell->GetCrsr();
732*ca62e2c2SSteve Yin                 if (!pCurrTxtFrm->IsEmpty() && pCaret)
733*ca62e2c2SSteve Yin                 {
734*ca62e2c2SSteve Yin                     sal_uInt16 nActPos = 0;
735*ca62e2c2SSteve Yin                     if (pCurrTxtFrm->IsTxtFrm())
736*ca62e2c2SSteve Yin                     {
737*ca62e2c2SSteve Yin                         const SwPosition* pPoint = NULL;
738*ca62e2c2SSteve Yin                         if(pCurrTxtFrm->IsInFly())
739*ca62e2c2SSteve Yin                         {
740*ca62e2c2SSteve Yin                             SwFlyFrm *pFlyFrm = pCurrTxtFrm->FindFlyFrm();
741*ca62e2c2SSteve Yin                             const SwFmtAnchor& rAnchor = pFlyFrm->GetFmt()->GetAnchor();
742*ca62e2c2SSteve Yin                             pPoint= rAnchor.GetCntntAnchor();
743*ca62e2c2SSteve Yin                         }
744*ca62e2c2SSteve Yin                         else
745*ca62e2c2SSteve Yin                             pPoint = pCaret->GetPoint();
746*ca62e2c2SSteve Yin                         nActPos = pPoint->nContent.GetIndex();
747*ca62e2c2SSteve Yin                         nLineNum += pCurrTxtFrm->GetLineCount( nActPos );
748*ca62e2c2SSteve Yin                     }
749*ca62e2c2SSteve Yin                     else//graphic, form, shape, etc.
750*ca62e2c2SSteve Yin                     {
751*ca62e2c2SSteve Yin                         SwPosition* pPoint =  pCaret->GetPoint();
752*ca62e2c2SSteve Yin                         Point aPt = pCrsrShell->_GetCrsr()->GetPtPos();
753*ca62e2c2SSteve Yin                         if( pCrsrShell->GetLayout()->GetCrsrOfst( pPoint, aPt/*,* &eTmpState*/ ) )
754*ca62e2c2SSteve Yin                         {
755*ca62e2c2SSteve Yin                             nActPos = pPoint->nContent.GetIndex();
756*ca62e2c2SSteve Yin                             nLineNum += pCurrTxtFrm->GetLineCount( nActPos );
757*ca62e2c2SSteve Yin                         }
758*ca62e2c2SSteve Yin                     }
759*ca62e2c2SSteve Yin                 }
760*ca62e2c2SSteve Yin                 else
761*ca62e2c2SSteve Yin                     ++nLineNum;
762*ca62e2c2SSteve Yin             }
763*ca62e2c2SSteve Yin         }
764*ca62e2c2SSteve Yin 
765*ca62e2c2SSteve Yin         sValue += sAttrName;
766*ca62e2c2SSteve Yin         sValue += String::CreateFromInt32( nLineNum ) ;
767*ca62e2c2SSteve Yin 
768*ca62e2c2SSteve Yin         sValue +=  rtl::OUString::createFromAscii(";");
769*ca62e2c2SSteve Yin 
770*ca62e2c2SSteve Yin 
771*ca62e2c2SSteve Yin         SwFrm* pCurrCol=((SwFrm*)pCurrFrm)->FindColFrm();
772*ca62e2c2SSteve Yin 
773*ca62e2c2SSteve Yin         sAttrName=rtl::OUString::createFromAscii("column-number:");
774*ca62e2c2SSteve Yin         sValue += sAttrName;
775*ca62e2c2SSteve Yin 
776*ca62e2c2SSteve Yin         sal_uInt16 nCurrCol = 1;
777*ca62e2c2SSteve Yin         if(pCurrCol!=NULL)
778*ca62e2c2SSteve Yin         {
779*ca62e2c2SSteve Yin             //SwLayoutFrm* pParent = pCurrCol->GetUpper();
780*ca62e2c2SSteve Yin             SwFrm* pCurrPageCol=((SwFrm*)pCurrFrm)->FindColFrm();
781*ca62e2c2SSteve Yin             while(pCurrPageCol && pCurrPageCol->GetUpper() && pCurrPageCol->GetUpper()->IsPageFrm())
782*ca62e2c2SSteve Yin             {
783*ca62e2c2SSteve Yin                 pCurrPageCol = pCurrPageCol->GetUpper();
784*ca62e2c2SSteve Yin             }
785*ca62e2c2SSteve Yin 
786*ca62e2c2SSteve Yin             SwLayoutFrm* pParent = (SwLayoutFrm*)(pCurrPageCol->GetUpper());
787*ca62e2c2SSteve Yin 
788*ca62e2c2SSteve Yin             if(pParent!=NULL)
789*ca62e2c2SSteve Yin             {
790*ca62e2c2SSteve Yin                 SwFrm* pCol = pParent->Lower();
791*ca62e2c2SSteve Yin                 while(pCol&&(pCol!=pCurrPageCol))
792*ca62e2c2SSteve Yin                 {
793*ca62e2c2SSteve Yin                     pCol = pCol->GetNext();
794*ca62e2c2SSteve Yin                     nCurrCol +=1;
795*ca62e2c2SSteve Yin                 }
796*ca62e2c2SSteve Yin             }
797*ca62e2c2SSteve Yin         }
798*ca62e2c2SSteve Yin         sValue += String::CreateFromInt32( nCurrCol ) ;
799*ca62e2c2SSteve Yin         sValue +=  rtl::OUString::createFromAscii(";");
800*ca62e2c2SSteve Yin 
801*ca62e2c2SSteve Yin         sAttrName=rtl::OUString::createFromAscii("total-columns:");
802*ca62e2c2SSteve Yin 
803*ca62e2c2SSteve Yin         const SwFmtCol &rFmtCol=pCurrPage->GetAttrSet()->GetCol();
804*ca62e2c2SSteve Yin         sal_uInt16 nColCount=rFmtCol.GetNumCols();
805*ca62e2c2SSteve Yin         nColCount = nColCount>0?nColCount:1;
806*ca62e2c2SSteve Yin         sValue += sAttrName;
807*ca62e2c2SSteve Yin         sValue += String::CreateFromInt32( nColCount ) ;
808*ca62e2c2SSteve Yin 
809*ca62e2c2SSteve Yin         sValue +=  rtl::OUString::createFromAscii(";");
810*ca62e2c2SSteve Yin 
811*ca62e2c2SSteve Yin         if(pCurrFrm!=NULL)
812*ca62e2c2SSteve Yin         {
813*ca62e2c2SSteve Yin             SwSectionFrm* pCurrSctFrm=((SwFrm*)pCurrFrm)->FindSctFrm();
814*ca62e2c2SSteve Yin             if(pCurrSctFrm!=NULL && pCurrSctFrm->GetSection()!=NULL )
815*ca62e2c2SSteve Yin             {
816*ca62e2c2SSteve Yin                 sAttrName = rtl::OUString::createFromAscii("section-name:");
817*ca62e2c2SSteve Yin 
818*ca62e2c2SSteve Yin                 sValue += sAttrName;
819*ca62e2c2SSteve Yin                 String sectionName = pCurrSctFrm->GetSection()->GetSectionName();
820*ca62e2c2SSteve Yin 
821*ca62e2c2SSteve Yin                 sectionName.SearchAndReplace( String::CreateFromAscii( "\\" ), String::CreateFromAscii("\\\\" ));
822*ca62e2c2SSteve Yin                 sectionName.SearchAndReplace( String::CreateFromAscii( "=" ), String::CreateFromAscii("\\=" ) );
823*ca62e2c2SSteve Yin                 sectionName.SearchAndReplace( String::CreateFromAscii( ";" ), String::CreateFromAscii("\\;" ) );
824*ca62e2c2SSteve Yin                 sectionName.SearchAndReplace( String::CreateFromAscii( "," ), String::CreateFromAscii("\\," ) );
825*ca62e2c2SSteve Yin                 sectionName.SearchAndReplace( String::CreateFromAscii( ":" ), String::CreateFromAscii("\\:" ) );
826*ca62e2c2SSteve Yin 
827*ca62e2c2SSteve Yin                 sValue += sectionName;
828*ca62e2c2SSteve Yin                 //sValue += pCurrSctFrm->GetSection()->GetName();
829*ca62e2c2SSteve Yin 
830*ca62e2c2SSteve Yin                 sValue += rtl::OUString::createFromAscii(";");
831*ca62e2c2SSteve Yin 
832*ca62e2c2SSteve Yin                 //section-columns-number
833*ca62e2c2SSteve Yin                 {
834*ca62e2c2SSteve Yin                 sAttrName=rtl::OUString::createFromAscii("section-columns-number:");
835*ca62e2c2SSteve Yin 
836*ca62e2c2SSteve Yin                 nCurrCol = 1;
837*ca62e2c2SSteve Yin 
838*ca62e2c2SSteve Yin                 if(pCurrCol!=NULL)
839*ca62e2c2SSteve Yin                 {
840*ca62e2c2SSteve Yin                     SwLayoutFrm* pParent = pCurrCol->GetUpper();
841*ca62e2c2SSteve Yin                     if(pParent!=NULL)
842*ca62e2c2SSteve Yin                     {
843*ca62e2c2SSteve Yin                         SwFrm* pCol = pParent->Lower();
844*ca62e2c2SSteve Yin                         while(pCol&&(pCol!=pCurrCol))
845*ca62e2c2SSteve Yin                         {
846*ca62e2c2SSteve Yin                             pCol = pCol->GetNext();
847*ca62e2c2SSteve Yin                             nCurrCol +=1;
848*ca62e2c2SSteve Yin                         }
849*ca62e2c2SSteve Yin                     }
850*ca62e2c2SSteve Yin                 }
851*ca62e2c2SSteve Yin                 sValue += sAttrName;
852*ca62e2c2SSteve Yin                 sValue += String::CreateFromInt32( nCurrCol ) ;
853*ca62e2c2SSteve Yin                 sValue +=  rtl::OUString::createFromAscii(";");
854*ca62e2c2SSteve Yin                 }
855*ca62e2c2SSteve Yin 
856*ca62e2c2SSteve Yin                 //section-total-columns
857*ca62e2c2SSteve Yin                 {
858*ca62e2c2SSteve Yin                 sAttrName=rtl::OUString::createFromAscii("section-total-columns:");
859*ca62e2c2SSteve Yin                 const SwFmtCol &rFmtSctCol=pCurrSctFrm->GetAttrSet()->GetCol();
860*ca62e2c2SSteve Yin                 sal_uInt16 nSctColCount=rFmtSctCol.GetNumCols();
861*ca62e2c2SSteve Yin                 nSctColCount = nSctColCount>0?nSctColCount:1;
862*ca62e2c2SSteve Yin                 sValue += sAttrName;
863*ca62e2c2SSteve Yin                 sValue += String::CreateFromInt32( nSctColCount ) ;
864*ca62e2c2SSteve Yin 
865*ca62e2c2SSteve Yin                 sValue +=  rtl::OUString::createFromAscii(";");
866*ca62e2c2SSteve Yin                 }
867*ca62e2c2SSteve Yin             }
868*ca62e2c2SSteve Yin         }
869*ca62e2c2SSteve Yin         anyAtrribute <<= sValue;
870*ca62e2c2SSteve Yin     }
871*ca62e2c2SSteve Yin     return anyAtrribute;
872*ca62e2c2SSteve Yin }
873*ca62e2c2SSteve Yin 
getBackground()874*ca62e2c2SSteve Yin sal_Int32 SAL_CALL SwAccessibleDocument::getBackground()
875*ca62e2c2SSteve Yin         throw (::com::sun::star::uno::RuntimeException)
876*ca62e2c2SSteve Yin {
877*ca62e2c2SSteve Yin     vos::OGuard aGuard(Application::GetSolarMutex());
878*ca62e2c2SSteve Yin     return SW_MOD()->GetColorConfig().GetColorValue( ::svtools::DOCCOLOR ).nColor;
879*ca62e2c2SSteve Yin }
880*ca62e2c2SSteve Yin 
881*ca62e2c2SSteve Yin ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >
get_AccFlowTo(const::com::sun::star::uno::Any & rAny,sal_Int32 nType)882*ca62e2c2SSteve Yin         SAL_CALL SwAccessibleDocument::get_AccFlowTo(const ::com::sun::star::uno::Any& rAny, sal_Int32 nType)
883*ca62e2c2SSteve Yin         throw ( ::com::sun::star::uno::RuntimeException )
884*ca62e2c2SSteve Yin {
885*ca62e2c2SSteve Yin     const sal_Int32 FORSPELLCHECKFLOWTO = 1;
886*ca62e2c2SSteve Yin     const sal_Int32 FORFINDREPLACEFLOWTO = 2;
887*ca62e2c2SSteve Yin     SwAccessibleMap* pAccMap = GetMap();
888*ca62e2c2SSteve Yin     if ( !pAccMap )
889*ca62e2c2SSteve Yin     {
890*ca62e2c2SSteve Yin         goto Rt;
891*ca62e2c2SSteve Yin     }
892*ca62e2c2SSteve Yin 
893*ca62e2c2SSteve Yin     if ( nType == FORSPELLCHECKFLOWTO )
894*ca62e2c2SSteve Yin     {
895*ca62e2c2SSteve Yin         uno::Reference< ::com::sun::star::drawing::XShape > xShape;
896*ca62e2c2SSteve Yin         rAny >>= xShape;
897*ca62e2c2SSteve Yin         if( xShape.is() )
898*ca62e2c2SSteve Yin         {
899*ca62e2c2SSteve Yin             SdrObject* pObj = GetSdrObjectFromXShape(xShape);
900*ca62e2c2SSteve Yin             if( pObj )
901*ca62e2c2SSteve Yin             {
902*ca62e2c2SSteve Yin                 uno::Reference<XAccessible> xAcc = pAccMap->GetContext(pObj, this, sal_False);
903*ca62e2c2SSteve Yin                 uno::Reference < XAccessibleSelection > xAccSelection( xAcc, uno::UNO_QUERY );
904*ca62e2c2SSteve Yin                 if ( xAccSelection.is() )
905*ca62e2c2SSteve Yin                 {
906*ca62e2c2SSteve Yin                     try
907*ca62e2c2SSteve Yin                     {
908*ca62e2c2SSteve Yin                         if ( xAccSelection->getSelectedAccessibleChildCount() )
909*ca62e2c2SSteve Yin                         {
910*ca62e2c2SSteve Yin                             uno::Reference < XAccessible > xSel = xAccSelection->getSelectedAccessibleChild( 0 );
911*ca62e2c2SSteve Yin                             if ( xSel.is() )
912*ca62e2c2SSteve Yin                             {
913*ca62e2c2SSteve Yin                                 uno::Reference < XAccessibleContext > xSelContext( xSel->getAccessibleContext() );
914*ca62e2c2SSteve Yin                                 if ( xSelContext.is() )
915*ca62e2c2SSteve Yin                                 {
916*ca62e2c2SSteve Yin                                     //if in sw we find the selected paragraph here
917*ca62e2c2SSteve Yin                                     if ( xSelContext->getAccessibleRole() == AccessibleRole::PARAGRAPH )
918*ca62e2c2SSteve Yin                                     {
919*ca62e2c2SSteve Yin                                         uno::Sequence<uno::Any> aRet( 1 );
920*ca62e2c2SSteve Yin                                         aRet[0] = uno::makeAny( xSel );
921*ca62e2c2SSteve Yin                                         return aRet;
922*ca62e2c2SSteve Yin                                     }
923*ca62e2c2SSteve Yin                                 }
924*ca62e2c2SSteve Yin                             }
925*ca62e2c2SSteve Yin                         }
926*ca62e2c2SSteve Yin                     }
927*ca62e2c2SSteve Yin                     catch ( com::sun::star::lang::IndexOutOfBoundsException )
928*ca62e2c2SSteve Yin                     {
929*ca62e2c2SSteve Yin                         //return empty sequence
930*ca62e2c2SSteve Yin                         goto Rt;
931*ca62e2c2SSteve Yin                     }
932*ca62e2c2SSteve Yin                     //end of try...catch
933*ca62e2c2SSteve Yin                 }
934*ca62e2c2SSteve Yin                 /*uno::Sequence< uno::Any > aRet(1);
935*ca62e2c2SSteve Yin                 aRet[0] = uno::makeAny( xAcc );
936*ca62e2c2SSteve Yin                 return aRet;*/
937*ca62e2c2SSteve Yin             }
938*ca62e2c2SSteve Yin         }
939*ca62e2c2SSteve Yin         else
940*ca62e2c2SSteve Yin         {
941*ca62e2c2SSteve Yin             uno::Reference< XAccessible > xAcc = pAccMap->GetCursorContext();
942*ca62e2c2SSteve Yin             SwAccessibleContext *pAccImpl = static_cast< SwAccessibleContext *>( xAcc.get() );
943*ca62e2c2SSteve Yin             if ( pAccImpl && pAccImpl->getAccessibleRole() == AccessibleRole::PARAGRAPH )
944*ca62e2c2SSteve Yin             {
945*ca62e2c2SSteve Yin                 uno::Sequence< uno::Any > aRet(1);
946*ca62e2c2SSteve Yin                 aRet[0] = uno::makeAny( xAcc );
947*ca62e2c2SSteve Yin                 return aRet;
948*ca62e2c2SSteve Yin             }
949*ca62e2c2SSteve Yin         }
950*ca62e2c2SSteve Yin     }
951*ca62e2c2SSteve Yin     else if ( nType == FORFINDREPLACEFLOWTO )
952*ca62e2c2SSteve Yin     {
953*ca62e2c2SSteve Yin         SwCrsrShell* pCrsrShell = GetCrsrShell();
954*ca62e2c2SSteve Yin         if ( pCrsrShell )
955*ca62e2c2SSteve Yin         {
956*ca62e2c2SSteve Yin             SwPaM *_pStartCrsr = pCrsrShell->GetCrsr(), *__pStartCrsr = _pStartCrsr;
957*ca62e2c2SSteve Yin             SwCntntNode* pPrevNode = NULL;
958*ca62e2c2SSteve Yin             std::vector<SwFrm*> vFrmList;
959*ca62e2c2SSteve Yin             do
960*ca62e2c2SSteve Yin             {
961*ca62e2c2SSteve Yin                 if ( _pStartCrsr && _pStartCrsr->HasMark() )
962*ca62e2c2SSteve Yin                 {
963*ca62e2c2SSteve Yin                     SwCntntNode* pCntntNode = _pStartCrsr->GetCntntNode();
964*ca62e2c2SSteve Yin                     if ( pCntntNode == pPrevNode )
965*ca62e2c2SSteve Yin                     {
966*ca62e2c2SSteve Yin                         continue;
967*ca62e2c2SSteve Yin                     }
968*ca62e2c2SSteve Yin                     SwFrm* pFrm = pCntntNode ? pCntntNode->getLayoutFrm( pCrsrShell->GetLayout() ) : NULL;
969*ca62e2c2SSteve Yin                     if ( pFrm )
970*ca62e2c2SSteve Yin                     {
971*ca62e2c2SSteve Yin                         vFrmList.push_back( pFrm );
972*ca62e2c2SSteve Yin                     }
973*ca62e2c2SSteve Yin 
974*ca62e2c2SSteve Yin                     pPrevNode = pCntntNode;
975*ca62e2c2SSteve Yin                 }
976*ca62e2c2SSteve Yin             }
977*ca62e2c2SSteve Yin 
978*ca62e2c2SSteve Yin             while( _pStartCrsr && ( (_pStartCrsr=(SwPaM *)_pStartCrsr->GetNext()) != __pStartCrsr) );
979*ca62e2c2SSteve Yin 
980*ca62e2c2SSteve Yin             if ( vFrmList.size() )
981*ca62e2c2SSteve Yin             {
982*ca62e2c2SSteve Yin                 uno::Sequence< uno::Any > aRet(vFrmList.size());
983*ca62e2c2SSteve Yin                 std::vector<SwFrm*>::iterator aIter = vFrmList.begin();
984*ca62e2c2SSteve Yin                 for ( sal_Int32 nIndex = 0; aIter != vFrmList.end(); aIter++, nIndex++ )
985*ca62e2c2SSteve Yin                 {
986*ca62e2c2SSteve Yin                     uno::Reference< XAccessible > xAcc = pAccMap->GetContext(*aIter, sal_False);
987*ca62e2c2SSteve Yin                     if ( xAcc.is() )
988*ca62e2c2SSteve Yin                     {
989*ca62e2c2SSteve Yin                         SwAccessibleContext *pAccImpl = static_cast< SwAccessibleContext *>( xAcc.get() );
990*ca62e2c2SSteve Yin                         if ( pAccImpl && pAccImpl->getAccessibleRole() == AccessibleRole::PARAGRAPH )
991*ca62e2c2SSteve Yin                         {
992*ca62e2c2SSteve Yin                             aRet[nIndex] = uno::makeAny( xAcc );
993*ca62e2c2SSteve Yin                         }
994*ca62e2c2SSteve Yin                     }
995*ca62e2c2SSteve Yin                 }
996*ca62e2c2SSteve Yin 
997*ca62e2c2SSteve Yin                 return aRet;
998*ca62e2c2SSteve Yin             }
999*ca62e2c2SSteve Yin         }
1000*ca62e2c2SSteve Yin     }
1001*ca62e2c2SSteve Yin 
1002*ca62e2c2SSteve Yin Rt:
1003*ca62e2c2SSteve Yin     uno::Sequence< uno::Any > aEmpty;
1004*ca62e2c2SSteve Yin     return aEmpty;
1005*ca62e2c2SSteve Yin }
1006