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_sd.hxx"
26*b1cdbd2cSJim Jagielski #include "AccessibleDocumentViewBase.hxx"
27*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XDrawPage.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XDrawView.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XShapes.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XChild.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XController.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFrame.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XEventBroadcaster.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleEventId.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
38*b1cdbd2cSJim Jagielski #include <rtl/ustring.h>
39*b1cdbd2cSJim Jagielski #include<sfx2/viewfrm.hxx>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp>
41*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
42*b1cdbd2cSJim Jagielski #include <svx/AccessibleShape.hxx>
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski #include <svx/svdobj.hxx>
45*b1cdbd2cSJim Jagielski #include <svx/svdmodel.hxx>
46*b1cdbd2cSJim Jagielski #include <svx/unoapi.hxx>
47*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
48*b1cdbd2cSJim Jagielski #include "Window.hxx"
49*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
50*b1cdbd2cSJim Jagielski #include "OutlineViewShell.hxx"
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski #include "SlideViewShell.hxx"
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski #include <svx/svdlayer.hxx>
55*b1cdbd2cSJim Jagielski #include <editeng/editobj.hxx>
56*b1cdbd2cSJim Jagielski #include "LayerTabBar.hxx"
57*b1cdbd2cSJim Jagielski #include <svtools/colorcfg.hxx>
58*b1cdbd2cSJim Jagielski #include "ViewShell.hxx"
59*b1cdbd2cSJim Jagielski #include "View.hxx"
60*b1cdbd2cSJim Jagielski #include <memory>
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski using ::rtl::OUString;
63*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
64*b1cdbd2cSJim Jagielski using namespace	::com::sun::star::accessibility;
65*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Reference;
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski class SfxViewFrame;
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski namespace accessibility {
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski //=====  internal  ============================================================
AccessibleDocumentViewBase(::sd::Window * pSdWindow,::sd::ViewShell * pViewShell,const uno::Reference<frame::XController> & rxController,const uno::Reference<XAccessible> & rxParent)72*b1cdbd2cSJim Jagielski AccessibleDocumentViewBase::AccessibleDocumentViewBase (
73*b1cdbd2cSJim Jagielski     ::sd::Window* pSdWindow,
74*b1cdbd2cSJim Jagielski     ::sd::ViewShell* pViewShell,
75*b1cdbd2cSJim Jagielski     const uno::Reference<frame::XController>& rxController,
76*b1cdbd2cSJim Jagielski     const uno::Reference<XAccessible>& rxParent)
77*b1cdbd2cSJim Jagielski     : AccessibleContextBase (rxParent, AccessibleRole::DOCUMENT),
78*b1cdbd2cSJim Jagielski       mpWindow (pSdWindow),
79*b1cdbd2cSJim Jagielski       mxController (rxController),
80*b1cdbd2cSJim Jagielski       mxModel (NULL),
81*b1cdbd2cSJim Jagielski       maViewForwarder (
82*b1cdbd2cSJim Jagielski         static_cast<SdrPaintView*>(pViewShell->GetView()),
83*b1cdbd2cSJim Jagielski         *static_cast<OutputDevice*>(pSdWindow))
84*b1cdbd2cSJim Jagielski {
85*b1cdbd2cSJim Jagielski     if (mxController.is())
86*b1cdbd2cSJim Jagielski         mxModel = mxController->getModel();
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski     // Fill the shape tree info.
89*b1cdbd2cSJim Jagielski     maShapeTreeInfo.SetModelBroadcaster (
90*b1cdbd2cSJim Jagielski         uno::Reference<document::XEventBroadcaster>(
91*b1cdbd2cSJim Jagielski             mxModel, uno::UNO_QUERY));
92*b1cdbd2cSJim Jagielski     maShapeTreeInfo.SetController (mxController);
93*b1cdbd2cSJim Jagielski     maShapeTreeInfo.SetSdrView (pViewShell->GetView());
94*b1cdbd2cSJim Jagielski     maShapeTreeInfo.SetWindow (pSdWindow);
95*b1cdbd2cSJim Jagielski     maShapeTreeInfo.SetViewForwarder (&maViewForwarder);
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski     mxWindow = ::VCLUnoHelper::GetInterface (pSdWindow);
98*b1cdbd2cSJim Jagielski 	mpViewShell = pViewShell;
99*b1cdbd2cSJim Jagielski }
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski 
~AccessibleDocumentViewBase(void)104*b1cdbd2cSJim Jagielski AccessibleDocumentViewBase::~AccessibleDocumentViewBase (void)
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski     // At this place we should be disposed.  You may want to add a
107*b1cdbd2cSJim Jagielski     // corresponding assertion into the destructor of a derived class.
108*b1cdbd2cSJim Jagielski }
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski 
Init(void)113*b1cdbd2cSJim Jagielski void AccessibleDocumentViewBase::Init (void)
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski     // Finish the initialization of the shape tree info container.
116*b1cdbd2cSJim Jagielski     maShapeTreeInfo.SetDocumentWindow (this);
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski     // Register as window listener to stay up to date with its size and
119*b1cdbd2cSJim Jagielski     // position.
120*b1cdbd2cSJim Jagielski     mxWindow->addWindowListener (this);
121*b1cdbd2cSJim Jagielski     // Register as focus listener to
122*b1cdbd2cSJim Jagielski     mxWindow->addFocusListener (this);
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski     // Determine the list of shapes on the current page.
125*b1cdbd2cSJim Jagielski     uno::Reference<drawing::XShapes> xShapeList;
126*b1cdbd2cSJim Jagielski     uno::Reference<drawing::XDrawView> xView (mxController, uno::UNO_QUERY);
127*b1cdbd2cSJim Jagielski     if (xView.is())
128*b1cdbd2cSJim Jagielski         xShapeList = uno::Reference<drawing::XShapes> (
129*b1cdbd2cSJim Jagielski             xView->getCurrentPage(), uno::UNO_QUERY);
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski     // Register this object as dispose event listener at the model.
132*b1cdbd2cSJim Jagielski 	if (mxModel.is())
133*b1cdbd2cSJim Jagielski 		mxModel->addEventListener (
134*b1cdbd2cSJim Jagielski             static_cast<awt::XWindowListener*>(this));
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski     // Register as property change listener at the controller.
137*b1cdbd2cSJim Jagielski     uno::Reference<beans::XPropertySet> xSet (mxController, uno::UNO_QUERY);
138*b1cdbd2cSJim Jagielski     if (xSet.is())
139*b1cdbd2cSJim Jagielski         xSet->addPropertyChangeListener (
140*b1cdbd2cSJim Jagielski             OUString (RTL_CONSTASCII_USTRINGPARAM("")),
141*b1cdbd2cSJim Jagielski             static_cast<beans::XPropertyChangeListener*>(this));
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski     // Register this object as dispose event listener at the controller.
144*b1cdbd2cSJim Jagielski     if (mxController.is())
145*b1cdbd2cSJim Jagielski         mxController->addEventListener (
146*b1cdbd2cSJim Jagielski             static_cast<awt::XWindowListener*>(this));
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski     // Register at VCL Window to be informed of activated and deactivated
149*b1cdbd2cSJim Jagielski     // OLE objects.
150*b1cdbd2cSJim Jagielski     Window* pWindow = maShapeTreeInfo.GetWindow();
151*b1cdbd2cSJim Jagielski     if (pWindow != NULL)
152*b1cdbd2cSJim Jagielski     {
153*b1cdbd2cSJim Jagielski         maWindowLink = LINK(
154*b1cdbd2cSJim Jagielski             this, AccessibleDocumentViewBase, WindowChildEventListener);
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski         pWindow->AddChildEventListener (maWindowLink);
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski         sal_uInt16 nCount = pWindow->GetChildCount();
159*b1cdbd2cSJim Jagielski         for (sal_uInt16 i=0; i<nCount; i++)
160*b1cdbd2cSJim Jagielski         {
161*b1cdbd2cSJim Jagielski             Window* pChildWindow = pWindow->GetChild (i);
162*b1cdbd2cSJim Jagielski             if (pChildWindow &&
163*b1cdbd2cSJim Jagielski                 (AccessibleRole::EMBEDDED_OBJECT
164*b1cdbd2cSJim Jagielski                     ==pChildWindow->GetAccessibleRole()))
165*b1cdbd2cSJim Jagielski             {
166*b1cdbd2cSJim Jagielski                 SetAccessibleOLEObject (pChildWindow->GetAccessible());
167*b1cdbd2cSJim Jagielski             }
168*b1cdbd2cSJim Jagielski         }
169*b1cdbd2cSJim Jagielski     }
170*b1cdbd2cSJim Jagielski 	SfxObjectShell* pObjShell = mpViewShell->GetViewFrame()->GetObjectShell();
171*b1cdbd2cSJim Jagielski 	if(!pObjShell->IsReadOnly())
172*b1cdbd2cSJim Jagielski 		SetState(AccessibleStateType::EDITABLE);
173*b1cdbd2cSJim Jagielski }
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 
IMPL_LINK(AccessibleDocumentViewBase,WindowChildEventListener,VclSimpleEvent *,pEvent)178*b1cdbd2cSJim Jagielski IMPL_LINK(AccessibleDocumentViewBase, WindowChildEventListener,
179*b1cdbd2cSJim Jagielski     VclSimpleEvent*, pEvent)
180*b1cdbd2cSJim Jagielski {
181*b1cdbd2cSJim Jagielski     OSL_ASSERT(pEvent!=NULL && pEvent->ISA(VclWindowEvent));
182*b1cdbd2cSJim Jagielski     if (pEvent!=NULL && pEvent->ISA(VclWindowEvent))
183*b1cdbd2cSJim Jagielski     {
184*b1cdbd2cSJim Jagielski         VclWindowEvent* pWindowEvent = static_cast<VclWindowEvent*>(pEvent);
185*b1cdbd2cSJim Jagielski         //      DBG_ASSERT( pVclEvent->GetWindow(), "Window???" );
186*b1cdbd2cSJim Jagielski         switch (pWindowEvent->GetId())
187*b1cdbd2cSJim Jagielski         {
188*b1cdbd2cSJim Jagielski             case VCLEVENT_OBJECT_DYING:
189*b1cdbd2cSJim Jagielski             {
190*b1cdbd2cSJim Jagielski                 // Window is dying.  Unregister from VCL Window.
191*b1cdbd2cSJim Jagielski                 // This is also attempted in the disposing() method.
192*b1cdbd2cSJim Jagielski                 Window* pWindow = maShapeTreeInfo.GetWindow();
193*b1cdbd2cSJim Jagielski                 Window* pDyingWindow = static_cast<Window*>(
194*b1cdbd2cSJim Jagielski                     pWindowEvent->GetWindow());
195*b1cdbd2cSJim Jagielski                 if (pWindow==pDyingWindow && pWindow!=NULL && maWindowLink.IsSet())
196*b1cdbd2cSJim Jagielski                 {
197*b1cdbd2cSJim Jagielski                     pWindow->RemoveChildEventListener (maWindowLink);
198*b1cdbd2cSJim Jagielski                     maWindowLink = Link();
199*b1cdbd2cSJim Jagielski                 }
200*b1cdbd2cSJim Jagielski             }
201*b1cdbd2cSJim Jagielski             break;
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski             case VCLEVENT_WINDOW_SHOW:
204*b1cdbd2cSJim Jagielski             {
205*b1cdbd2cSJim Jagielski                 // A new window has been created.  Is it an OLE object?
206*b1cdbd2cSJim Jagielski                 Window* pChildWindow = static_cast<Window*>(
207*b1cdbd2cSJim Jagielski                     pWindowEvent->GetData());
208*b1cdbd2cSJim Jagielski                 if (pChildWindow!=NULL
209*b1cdbd2cSJim Jagielski                     && (pChildWindow->GetAccessibleRole()
210*b1cdbd2cSJim Jagielski                         == AccessibleRole::EMBEDDED_OBJECT))
211*b1cdbd2cSJim Jagielski                 {
212*b1cdbd2cSJim Jagielski                     SetAccessibleOLEObject (pChildWindow->GetAccessible());
213*b1cdbd2cSJim Jagielski                 }
214*b1cdbd2cSJim Jagielski             }
215*b1cdbd2cSJim Jagielski             break;
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski             case VCLEVENT_WINDOW_HIDE:
218*b1cdbd2cSJim Jagielski             {
219*b1cdbd2cSJim Jagielski                 // A window has been destroyed.  Has that been an OLE
220*b1cdbd2cSJim Jagielski                 // object?
221*b1cdbd2cSJim Jagielski                 Window* pChildWindow = static_cast<Window*>(
222*b1cdbd2cSJim Jagielski                     pWindowEvent->GetData());
223*b1cdbd2cSJim Jagielski                 if (pChildWindow!=NULL
224*b1cdbd2cSJim Jagielski                     && (pChildWindow->GetAccessibleRole()
225*b1cdbd2cSJim Jagielski                         == AccessibleRole::EMBEDDED_OBJECT))
226*b1cdbd2cSJim Jagielski                 {
227*b1cdbd2cSJim Jagielski                     SetAccessibleOLEObject (NULL);
228*b1cdbd2cSJim Jagielski                 }
229*b1cdbd2cSJim Jagielski             }
230*b1cdbd2cSJim Jagielski             break;
231*b1cdbd2cSJim Jagielski         }
232*b1cdbd2cSJim Jagielski     }
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski     return 0;
235*b1cdbd2cSJim Jagielski }
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski //=====  IAccessibleViewForwarderListener  ====================================
241*b1cdbd2cSJim Jagielski 
ViewForwarderChanged(ChangeType,const IAccessibleViewForwarder *)242*b1cdbd2cSJim Jagielski void AccessibleDocumentViewBase::ViewForwarderChanged(ChangeType, const IAccessibleViewForwarder* )
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski     // Empty
245*b1cdbd2cSJim Jagielski }
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski //=====  XAccessibleContext  ==================================================
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski Reference<XAccessible> SAL_CALL
getAccessibleParent(void)253*b1cdbd2cSJim Jagielski    	AccessibleDocumentViewBase::getAccessibleParent (void)
254*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
255*b1cdbd2cSJim Jagielski {
256*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski     return AccessibleContextBase::getAccessibleParent();
259*b1cdbd2cSJim Jagielski }
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL
getAccessibleChildCount(void)264*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::getAccessibleChildCount (void)
265*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
266*b1cdbd2cSJim Jagielski {
267*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski     if (mxAccessibleOLEObject.is())
270*b1cdbd2cSJim Jagielski         return 1;
271*b1cdbd2cSJim Jagielski     else
272*b1cdbd2cSJim Jagielski         return 0;
273*b1cdbd2cSJim Jagielski }
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski Reference<XAccessible> SAL_CALL
getAccessibleChild(sal_Int32 nIndex)279*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::getAccessibleChild (sal_Int32 nIndex)
280*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException, lang::IndexOutOfBoundsException)
281*b1cdbd2cSJim Jagielski {
282*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard (maMutex);
285*b1cdbd2cSJim Jagielski     if (mxAccessibleOLEObject.is())
286*b1cdbd2cSJim Jagielski         if (nIndex == 0)
287*b1cdbd2cSJim Jagielski             return mxAccessibleOLEObject;
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski     throw lang::IndexOutOfBoundsException (
290*b1cdbd2cSJim Jagielski         ::rtl::OUString::createFromAscii ("no child with index ")
291*b1cdbd2cSJim Jagielski         + rtl::OUString::valueOf(nIndex),
292*b1cdbd2cSJim Jagielski 		NULL);
293*b1cdbd2cSJim Jagielski }
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski //=====  XAccessibleComponent  ================================================
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski /** Iterate over all children and test whether the specified point lies
301*b1cdbd2cSJim Jagielski     within one of their bounding boxes.  Return the first child for which
302*b1cdbd2cSJim Jagielski     this is true.
303*b1cdbd2cSJim Jagielski */
304*b1cdbd2cSJim Jagielski uno::Reference<XAccessible > SAL_CALL
getAccessibleAtPoint(const awt::Point & aPoint)305*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::getAccessibleAtPoint (
306*b1cdbd2cSJim Jagielski         const awt::Point& aPoint)
307*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
308*b1cdbd2cSJim Jagielski {
309*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard (maMutex);
312*b1cdbd2cSJim Jagielski     uno::Reference<XAccessible> xChildAtPosition;
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski     sal_Int32 nChildCount = getAccessibleChildCount ();
315*b1cdbd2cSJim Jagielski     for (sal_Int32 i=nChildCount-1; i>=0; --i)
316*b1cdbd2cSJim Jagielski     {
317*b1cdbd2cSJim Jagielski         Reference<XAccessible> xChild (getAccessibleChild (i));
318*b1cdbd2cSJim Jagielski         if (xChild.is())
319*b1cdbd2cSJim Jagielski         {
320*b1cdbd2cSJim Jagielski             Reference<XAccessibleComponent> xChildComponent (
321*b1cdbd2cSJim Jagielski                 xChild->getAccessibleContext(), uno::UNO_QUERY);
322*b1cdbd2cSJim Jagielski             if (xChildComponent.is())
323*b1cdbd2cSJim Jagielski             {
324*b1cdbd2cSJim Jagielski                 awt::Rectangle aBBox (xChildComponent->getBounds());
325*b1cdbd2cSJim Jagielski                 if ( (aPoint.X >= aBBox.X)
326*b1cdbd2cSJim Jagielski                     && (aPoint.Y >= aBBox.Y)
327*b1cdbd2cSJim Jagielski                     && (aPoint.X < aBBox.X+aBBox.Width)
328*b1cdbd2cSJim Jagielski                     && (aPoint.Y < aBBox.Y+aBBox.Height) )
329*b1cdbd2cSJim Jagielski                 {
330*b1cdbd2cSJim Jagielski                     xChildAtPosition = xChild;
331*b1cdbd2cSJim Jagielski                     break;
332*b1cdbd2cSJim Jagielski                 }
333*b1cdbd2cSJim Jagielski             }
334*b1cdbd2cSJim Jagielski         }
335*b1cdbd2cSJim Jagielski     }
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski     // Have not found a child under the given point.  Returning empty
338*b1cdbd2cSJim Jagielski     // reference to indicate this.
339*b1cdbd2cSJim Jagielski     return xChildAtPosition;
340*b1cdbd2cSJim Jagielski }
341*b1cdbd2cSJim Jagielski 
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski awt::Rectangle SAL_CALL
getBounds(void)346*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::getBounds (void)
347*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
348*b1cdbd2cSJim Jagielski {
349*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski     // Transform visible area into screen coordinates.
352*b1cdbd2cSJim Jagielski     ::Rectangle aVisibleArea (
353*b1cdbd2cSJim Jagielski         maShapeTreeInfo.GetViewForwarder()->GetVisibleArea());
354*b1cdbd2cSJim Jagielski     ::Point aPixelTopLeft (
355*b1cdbd2cSJim Jagielski         maShapeTreeInfo.GetViewForwarder()->LogicToPixel (
356*b1cdbd2cSJim Jagielski             aVisibleArea.TopLeft()));
357*b1cdbd2cSJim Jagielski     ::Point aPixelSize (
358*b1cdbd2cSJim Jagielski         maShapeTreeInfo.GetViewForwarder()->LogicToPixel (
359*b1cdbd2cSJim Jagielski             aVisibleArea.BottomRight())
360*b1cdbd2cSJim Jagielski         - aPixelTopLeft);
361*b1cdbd2cSJim Jagielski 
362*b1cdbd2cSJim Jagielski     // Prepare to subtract the parent position to transform into relative
363*b1cdbd2cSJim Jagielski     // coordinates.
364*b1cdbd2cSJim Jagielski     awt::Point aParentPosition;
365*b1cdbd2cSJim Jagielski     Reference<XAccessible> xParent = getAccessibleParent ();
366*b1cdbd2cSJim Jagielski     if (xParent.is())
367*b1cdbd2cSJim Jagielski     {
368*b1cdbd2cSJim Jagielski         Reference<XAccessibleComponent> xParentComponent (
369*b1cdbd2cSJim Jagielski             xParent->getAccessibleContext(), uno::UNO_QUERY);
370*b1cdbd2cSJim Jagielski         if (xParentComponent.is())
371*b1cdbd2cSJim Jagielski             aParentPosition = xParentComponent->getLocationOnScreen();
372*b1cdbd2cSJim Jagielski     }
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski     return awt::Rectangle (
375*b1cdbd2cSJim Jagielski         aPixelTopLeft.X() - aParentPosition.X,
376*b1cdbd2cSJim Jagielski         aPixelTopLeft.Y() - aParentPosition.Y,
377*b1cdbd2cSJim Jagielski         aPixelSize.X(),
378*b1cdbd2cSJim Jagielski         aPixelSize.Y());
379*b1cdbd2cSJim Jagielski }
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski 
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski awt::Point SAL_CALL
getLocation(void)385*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::getLocation (void)
386*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
387*b1cdbd2cSJim Jagielski {
388*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
389*b1cdbd2cSJim Jagielski     awt::Rectangle aBoundingBox (getBounds());
390*b1cdbd2cSJim Jagielski     return awt::Point (aBoundingBox.X, aBoundingBox.Y);
391*b1cdbd2cSJim Jagielski }
392*b1cdbd2cSJim Jagielski 
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski 
396*b1cdbd2cSJim Jagielski awt::Point SAL_CALL
getLocationOnScreen(void)397*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::getLocationOnScreen (void)
398*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
399*b1cdbd2cSJim Jagielski {
400*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
401*b1cdbd2cSJim Jagielski     ::Point aLogicalPoint (maShapeTreeInfo.GetViewForwarder()->GetVisibleArea().TopLeft());
402*b1cdbd2cSJim Jagielski     ::Point aPixelPoint (maShapeTreeInfo.GetViewForwarder()->LogicToPixel (aLogicalPoint));
403*b1cdbd2cSJim Jagielski     return awt::Point (aPixelPoint.X(), aPixelPoint.Y());
404*b1cdbd2cSJim Jagielski }
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski 
408*b1cdbd2cSJim Jagielski 
409*b1cdbd2cSJim Jagielski awt::Size SAL_CALL
getSize(void)410*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::getSize (void)
411*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
412*b1cdbd2cSJim Jagielski {
413*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
414*b1cdbd2cSJim Jagielski 
415*b1cdbd2cSJim Jagielski     // Transform visible area into screen coordinates.
416*b1cdbd2cSJim Jagielski     ::Rectangle aVisibleArea (
417*b1cdbd2cSJim Jagielski         maShapeTreeInfo.GetViewForwarder()->GetVisibleArea());
418*b1cdbd2cSJim Jagielski     ::Point aPixelTopLeft (
419*b1cdbd2cSJim Jagielski         maShapeTreeInfo.GetViewForwarder()->LogicToPixel (
420*b1cdbd2cSJim Jagielski             aVisibleArea.TopLeft()));
421*b1cdbd2cSJim Jagielski     ::Point aPixelSize (
422*b1cdbd2cSJim Jagielski         maShapeTreeInfo.GetViewForwarder()->LogicToPixel (
423*b1cdbd2cSJim Jagielski             aVisibleArea.BottomRight())
424*b1cdbd2cSJim Jagielski         - aPixelTopLeft);
425*b1cdbd2cSJim Jagielski 
426*b1cdbd2cSJim Jagielski     return awt::Size (aPixelSize.X(), aPixelSize.Y());
427*b1cdbd2cSJim Jagielski }
428*b1cdbd2cSJim Jagielski 
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski 
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski //=====  XInterface  ==========================================================
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski uno::Any SAL_CALL
queryInterface(const uno::Type & rType)435*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::queryInterface (const uno::Type & rType)
436*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
437*b1cdbd2cSJim Jagielski {
438*b1cdbd2cSJim Jagielski     uno::Any aReturn = AccessibleContextBase::queryInterface (rType);
439*b1cdbd2cSJim Jagielski     if ( ! aReturn.hasValue())
440*b1cdbd2cSJim Jagielski         aReturn = ::cppu::queryInterface (rType,
441*b1cdbd2cSJim Jagielski             static_cast<XAccessibleComponent*>(this),
442*b1cdbd2cSJim Jagielski             static_cast<XAccessibleSelection*>(this),
443*b1cdbd2cSJim Jagielski             static_cast<lang::XEventListener*>(
444*b1cdbd2cSJim Jagielski                 static_cast<awt::XWindowListener*>(this)),
445*b1cdbd2cSJim Jagielski             static_cast<beans::XPropertyChangeListener*>(this),
446*b1cdbd2cSJim Jagielski             static_cast<awt::XWindowListener*>(this),
447*b1cdbd2cSJim Jagielski             static_cast<awt::XFocusListener*>(this)
448*b1cdbd2cSJim Jagielski 		   ,static_cast<XAccessibleExtendedAttributes*>(this)
449*b1cdbd2cSJim Jagielski 		   ,static_cast<XAccessibleGetAccFlowTo*>(this)
450*b1cdbd2cSJim Jagielski             );
451*b1cdbd2cSJim Jagielski     return aReturn;
452*b1cdbd2cSJim Jagielski }
453*b1cdbd2cSJim Jagielski 
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski void SAL_CALL
acquire(void)458*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::acquire (void)
459*b1cdbd2cSJim Jagielski     throw ()
460*b1cdbd2cSJim Jagielski {
461*b1cdbd2cSJim Jagielski     AccessibleContextBase::acquire ();
462*b1cdbd2cSJim Jagielski }
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski void SAL_CALL
release(void)468*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::release (void)
469*b1cdbd2cSJim Jagielski     throw ()
470*b1cdbd2cSJim Jagielski {
471*b1cdbd2cSJim Jagielski     AccessibleContextBase::release ();
472*b1cdbd2cSJim Jagielski }
473*b1cdbd2cSJim Jagielski 
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski //=====  XServiceInfo  ========================================================
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski ::rtl::OUString SAL_CALL
getImplementationName(void)480*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::getImplementationName (void)
481*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
482*b1cdbd2cSJim Jagielski {
483*b1cdbd2cSJim Jagielski 	return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AccessibleDocumentViewBase"));
484*b1cdbd2cSJim Jagielski }
485*b1cdbd2cSJim Jagielski 
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL
getSupportedServiceNames(void)490*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::getSupportedServiceNames (void)
491*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
492*b1cdbd2cSJim Jagielski {
493*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
494*b1cdbd2cSJim Jagielski     return AccessibleContextBase::getSupportedServiceNames ();
495*b1cdbd2cSJim Jagielski }
496*b1cdbd2cSJim Jagielski 
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski //=====  XTypeProvider  =======================================================
502*b1cdbd2cSJim Jagielski 
503*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL
getTypes(void)504*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::getTypes (void)
505*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
506*b1cdbd2cSJim Jagielski {
507*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski     // Get list of types from the context base implementation, ...
510*b1cdbd2cSJim Jagielski 	uno::Sequence<uno::Type> aTypeList (AccessibleContextBase::getTypes());
511*b1cdbd2cSJim Jagielski     // ... get list of types from component base implementation, ...
512*b1cdbd2cSJim Jagielski 	uno::Sequence<uno::Type> aComponentTypeList (AccessibleComponentBase::getTypes());
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 
515*b1cdbd2cSJim Jagielski     // ...and add the additional type for the component, ...
516*b1cdbd2cSJim Jagielski     const uno::Type aLangEventListenerType =
517*b1cdbd2cSJim Jagielski      	::getCppuType((const uno::Reference<lang::XEventListener>*)0);
518*b1cdbd2cSJim Jagielski     const uno::Type aPropertyChangeListenerType =
519*b1cdbd2cSJim Jagielski      	::getCppuType((const uno::Reference<beans::XPropertyChangeListener>*)0);
520*b1cdbd2cSJim Jagielski     const uno::Type aWindowListenerType =
521*b1cdbd2cSJim Jagielski      	::getCppuType((const uno::Reference<awt::XWindowListener>*)0);
522*b1cdbd2cSJim Jagielski     const uno::Type aFocusListenerType =
523*b1cdbd2cSJim Jagielski      	::getCppuType((const uno::Reference<awt::XFocusListener>*)0);
524*b1cdbd2cSJim Jagielski     const uno::Type aEventBroadcaster =
525*b1cdbd2cSJim Jagielski      	::getCppuType((const uno::Reference<XAccessibleEventBroadcaster>*)0);
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski     // ... and merge them all into one list.
528*b1cdbd2cSJim Jagielski     sal_Int32 nTypeCount (aTypeList.getLength()),
529*b1cdbd2cSJim Jagielski         nComponentTypeCount (aComponentTypeList.getLength()),
530*b1cdbd2cSJim Jagielski         i;
531*b1cdbd2cSJim Jagielski 
532*b1cdbd2cSJim Jagielski     aTypeList.realloc (nTypeCount + nComponentTypeCount + 5);
533*b1cdbd2cSJim Jagielski 
534*b1cdbd2cSJim Jagielski     for (i=0; i<nComponentTypeCount; i++)
535*b1cdbd2cSJim Jagielski         aTypeList[nTypeCount + i] = aComponentTypeList[i];
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski     aTypeList[nTypeCount + i++ ] = aLangEventListenerType;
538*b1cdbd2cSJim Jagielski     aTypeList[nTypeCount + i++] = aPropertyChangeListenerType;
539*b1cdbd2cSJim Jagielski     aTypeList[nTypeCount + i++] = aWindowListenerType;
540*b1cdbd2cSJim Jagielski     aTypeList[nTypeCount + i++] = aFocusListenerType;
541*b1cdbd2cSJim Jagielski     aTypeList[nTypeCount + i++] = aEventBroadcaster;
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski 	return aTypeList;
544*b1cdbd2cSJim Jagielski }
545*b1cdbd2cSJim Jagielski 
546*b1cdbd2cSJim Jagielski 
547*b1cdbd2cSJim Jagielski 
548*b1cdbd2cSJim Jagielski 
impl_dispose()549*b1cdbd2cSJim Jagielski void AccessibleDocumentViewBase::impl_dispose()
550*b1cdbd2cSJim Jagielski {
551*b1cdbd2cSJim Jagielski     // Unregister from VCL Window.
552*b1cdbd2cSJim Jagielski     Window* pWindow = maShapeTreeInfo.GetWindow();
553*b1cdbd2cSJim Jagielski     if (maWindowLink.IsSet())
554*b1cdbd2cSJim Jagielski     {
555*b1cdbd2cSJim Jagielski         if (pWindow)
556*b1cdbd2cSJim Jagielski             pWindow->RemoveChildEventListener (maWindowLink);
557*b1cdbd2cSJim Jagielski         maWindowLink = Link();
558*b1cdbd2cSJim Jagielski     }
559*b1cdbd2cSJim Jagielski     else
560*b1cdbd2cSJim Jagielski     {
561*b1cdbd2cSJim Jagielski         DBG_ASSERT (pWindow, "AccessibleDocumentViewBase::disposing");
562*b1cdbd2cSJim Jagielski     }
563*b1cdbd2cSJim Jagielski 
564*b1cdbd2cSJim Jagielski     // Unregister from window.
565*b1cdbd2cSJim Jagielski     if (mxWindow.is())
566*b1cdbd2cSJim Jagielski     {
567*b1cdbd2cSJim Jagielski         mxWindow->removeWindowListener (this);
568*b1cdbd2cSJim Jagielski         mxWindow->removeFocusListener (this);
569*b1cdbd2cSJim Jagielski         mxWindow = NULL;
570*b1cdbd2cSJim Jagielski     }
571*b1cdbd2cSJim Jagielski 
572*b1cdbd2cSJim Jagielski     // Unregister form the model.
573*b1cdbd2cSJim Jagielski     if (mxModel.is())
574*b1cdbd2cSJim Jagielski         mxModel->removeEventListener (
575*b1cdbd2cSJim Jagielski             static_cast<awt::XWindowListener*>(this));
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski     // Unregister from the controller.
578*b1cdbd2cSJim Jagielski     if (mxController.is())
579*b1cdbd2cSJim Jagielski     {
580*b1cdbd2cSJim Jagielski         uno::Reference<beans::XPropertySet> xSet (mxController, uno::UNO_QUERY);
581*b1cdbd2cSJim Jagielski         if (xSet.is())
582*b1cdbd2cSJim Jagielski             xSet->removePropertyChangeListener (
583*b1cdbd2cSJim Jagielski                 OUString (RTL_CONSTASCII_USTRINGPARAM("")),
584*b1cdbd2cSJim Jagielski                 static_cast<beans::XPropertyChangeListener*>(this));
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski         mxController->removeEventListener (
587*b1cdbd2cSJim Jagielski             static_cast<awt::XWindowListener*>(this));
588*b1cdbd2cSJim Jagielski     }
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski     // Propagate change of controller down the shape tree.
591*b1cdbd2cSJim Jagielski     maShapeTreeInfo.SetControllerBroadcaster (NULL);
592*b1cdbd2cSJim Jagielski 
593*b1cdbd2cSJim Jagielski     // Reset the model reference.
594*b1cdbd2cSJim Jagielski     mxModel = NULL;
595*b1cdbd2cSJim Jagielski     // Reset the model reference.
596*b1cdbd2cSJim Jagielski     mxController = NULL;
597*b1cdbd2cSJim Jagielski 
598*b1cdbd2cSJim Jagielski     maShapeTreeInfo.SetDocumentWindow (NULL);
599*b1cdbd2cSJim Jagielski }
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski 
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski 
604*b1cdbd2cSJim Jagielski //=====  XEventListener  ======================================================
605*b1cdbd2cSJim Jagielski 
606*b1cdbd2cSJim Jagielski void SAL_CALL
disposing(const lang::EventObject & rEventObject)607*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::disposing (const lang::EventObject& rEventObject)
608*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
609*b1cdbd2cSJim Jagielski {
610*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
611*b1cdbd2cSJim Jagielski 
612*b1cdbd2cSJim Jagielski     // Register this object as dispose event and document::XEventListener
613*b1cdbd2cSJim Jagielski     // listener at the model.
614*b1cdbd2cSJim Jagielski 
615*b1cdbd2cSJim Jagielski     if ( ! rEventObject.Source.is())
616*b1cdbd2cSJim Jagielski     {
617*b1cdbd2cSJim Jagielski         // Paranoia. Can this really happen?
618*b1cdbd2cSJim Jagielski     }
619*b1cdbd2cSJim Jagielski     else if (rEventObject.Source == mxModel || rEventObject.Source == mxController)
620*b1cdbd2cSJim Jagielski     {
621*b1cdbd2cSJim Jagielski         impl_dispose();
622*b1cdbd2cSJim Jagielski     }
623*b1cdbd2cSJim Jagielski }
624*b1cdbd2cSJim Jagielski 
625*b1cdbd2cSJim Jagielski //=====  XPropertyChangeListener  =============================================
626*b1cdbd2cSJim Jagielski 
propertyChange(const beans::PropertyChangeEvent &)627*b1cdbd2cSJim Jagielski void SAL_CALL AccessibleDocumentViewBase::propertyChange (const beans::PropertyChangeEvent& )
628*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
629*b1cdbd2cSJim Jagielski {
630*b1cdbd2cSJim Jagielski     // Empty
631*b1cdbd2cSJim Jagielski }
632*b1cdbd2cSJim Jagielski 
633*b1cdbd2cSJim Jagielski 
634*b1cdbd2cSJim Jagielski 
635*b1cdbd2cSJim Jagielski 
636*b1cdbd2cSJim Jagielski //=====  XWindowListener  =====================================================
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski void SAL_CALL
windowResized(const::com::sun::star::awt::WindowEvent &)639*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::windowResized (const ::com::sun::star::awt::WindowEvent& )
640*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
641*b1cdbd2cSJim Jagielski {
642*b1cdbd2cSJim Jagielski     if( IsDisposed() )
643*b1cdbd2cSJim Jagielski         return;
644*b1cdbd2cSJim Jagielski 
645*b1cdbd2cSJim Jagielski     ViewForwarderChanged (
646*b1cdbd2cSJim Jagielski         IAccessibleViewForwarderListener::VISIBLE_AREA,
647*b1cdbd2cSJim Jagielski         &maViewForwarder);
648*b1cdbd2cSJim Jagielski }
649*b1cdbd2cSJim Jagielski 
650*b1cdbd2cSJim Jagielski 
651*b1cdbd2cSJim Jagielski 
652*b1cdbd2cSJim Jagielski 
653*b1cdbd2cSJim Jagielski void SAL_CALL
windowMoved(const::com::sun::star::awt::WindowEvent &)654*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::windowMoved (const ::com::sun::star::awt::WindowEvent& )
655*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
656*b1cdbd2cSJim Jagielski {
657*b1cdbd2cSJim Jagielski     if( IsDisposed() )
658*b1cdbd2cSJim Jagielski         return;
659*b1cdbd2cSJim Jagielski 
660*b1cdbd2cSJim Jagielski     ViewForwarderChanged (
661*b1cdbd2cSJim Jagielski         IAccessibleViewForwarderListener::VISIBLE_AREA,
662*b1cdbd2cSJim Jagielski         &maViewForwarder);
663*b1cdbd2cSJim Jagielski }
664*b1cdbd2cSJim Jagielski 
665*b1cdbd2cSJim Jagielski 
666*b1cdbd2cSJim Jagielski 
667*b1cdbd2cSJim Jagielski 
668*b1cdbd2cSJim Jagielski void SAL_CALL
windowShown(const::com::sun::star::lang::EventObject &)669*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::windowShown (const ::com::sun::star::lang::EventObject& )
670*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
671*b1cdbd2cSJim Jagielski {
672*b1cdbd2cSJim Jagielski     if( IsDisposed() )
673*b1cdbd2cSJim Jagielski         return;
674*b1cdbd2cSJim Jagielski 
675*b1cdbd2cSJim Jagielski     ViewForwarderChanged (
676*b1cdbd2cSJim Jagielski         IAccessibleViewForwarderListener::VISIBLE_AREA,
677*b1cdbd2cSJim Jagielski         &maViewForwarder);
678*b1cdbd2cSJim Jagielski }
679*b1cdbd2cSJim Jagielski 
680*b1cdbd2cSJim Jagielski 
681*b1cdbd2cSJim Jagielski 
682*b1cdbd2cSJim Jagielski 
683*b1cdbd2cSJim Jagielski void SAL_CALL
windowHidden(const::com::sun::star::lang::EventObject &)684*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::windowHidden (const ::com::sun::star::lang::EventObject& )
685*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
686*b1cdbd2cSJim Jagielski {
687*b1cdbd2cSJim Jagielski     if( IsDisposed() )
688*b1cdbd2cSJim Jagielski         return;
689*b1cdbd2cSJim Jagielski 
690*b1cdbd2cSJim Jagielski     ViewForwarderChanged (
691*b1cdbd2cSJim Jagielski         IAccessibleViewForwarderListener::VISIBLE_AREA,
692*b1cdbd2cSJim Jagielski         &maViewForwarder);
693*b1cdbd2cSJim Jagielski }
694*b1cdbd2cSJim Jagielski 
695*b1cdbd2cSJim Jagielski 
696*b1cdbd2cSJim Jagielski 
697*b1cdbd2cSJim Jagielski 
698*b1cdbd2cSJim Jagielski //=====  XFocusListener  ==================================================
699*b1cdbd2cSJim Jagielski 
focusGained(const::com::sun::star::awt::FocusEvent & e)700*b1cdbd2cSJim Jagielski void AccessibleDocumentViewBase::focusGained (const ::com::sun::star::awt::FocusEvent& e)
701*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
702*b1cdbd2cSJim Jagielski {
703*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
704*b1cdbd2cSJim Jagielski     if (e.Source == mxWindow)
705*b1cdbd2cSJim Jagielski         Activated ();
706*b1cdbd2cSJim Jagielski }
707*b1cdbd2cSJim Jagielski 
focusLost(const::com::sun::star::awt::FocusEvent & e)708*b1cdbd2cSJim Jagielski void AccessibleDocumentViewBase::focusLost (const ::com::sun::star::awt::FocusEvent& e)
709*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
710*b1cdbd2cSJim Jagielski {
711*b1cdbd2cSJim Jagielski     ThrowIfDisposed ();
712*b1cdbd2cSJim Jagielski     if (e.Source == mxWindow)
713*b1cdbd2cSJim Jagielski         Deactivated ();
714*b1cdbd2cSJim Jagielski }
715*b1cdbd2cSJim Jagielski 
716*b1cdbd2cSJim Jagielski 
717*b1cdbd2cSJim Jagielski 
718*b1cdbd2cSJim Jagielski 
719*b1cdbd2cSJim Jagielski //=====  protected internal  ==================================================
720*b1cdbd2cSJim Jagielski 
721*b1cdbd2cSJim Jagielski // This method is called from the component helper base class while disposing.
disposing(void)722*b1cdbd2cSJim Jagielski void SAL_CALL AccessibleDocumentViewBase::disposing (void)
723*b1cdbd2cSJim Jagielski {
724*b1cdbd2cSJim Jagielski     impl_dispose();
725*b1cdbd2cSJim Jagielski 
726*b1cdbd2cSJim Jagielski     AccessibleContextBase::disposing ();
727*b1cdbd2cSJim Jagielski }
728*b1cdbd2cSJim Jagielski 
729*b1cdbd2cSJim Jagielski 
730*b1cdbd2cSJim Jagielski 
731*b1cdbd2cSJim Jagielski 
732*b1cdbd2cSJim Jagielski ///	Create a name for this view.
733*b1cdbd2cSJim Jagielski ::rtl::OUString
CreateAccessibleName(void)734*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::CreateAccessibleName (void)
735*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
736*b1cdbd2cSJim Jagielski {
737*b1cdbd2cSJim Jagielski 	return ::rtl::OUString (
738*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM("AccessibleDocumentViewBase"));
739*b1cdbd2cSJim Jagielski }
740*b1cdbd2cSJim Jagielski 
741*b1cdbd2cSJim Jagielski 
742*b1cdbd2cSJim Jagielski 
743*b1cdbd2cSJim Jagielski 
744*b1cdbd2cSJim Jagielski /** Create a description for this view.  Use the model's description or URL
745*b1cdbd2cSJim Jagielski     if a description is not available.
746*b1cdbd2cSJim Jagielski */
747*b1cdbd2cSJim Jagielski ::rtl::OUString
CreateAccessibleDescription(void)748*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::CreateAccessibleDescription (void)
749*b1cdbd2cSJim Jagielski     throw (::com::sun::star::uno::RuntimeException)
750*b1cdbd2cSJim Jagielski {
751*b1cdbd2cSJim Jagielski 	rtl::OUString sDescription;
752*b1cdbd2cSJim Jagielski 
753*b1cdbd2cSJim Jagielski     uno::Reference<lang::XServiceInfo> xInfo (mxController, uno::UNO_QUERY);
754*b1cdbd2cSJim Jagielski     if (xInfo.is())
755*b1cdbd2cSJim Jagielski     {
756*b1cdbd2cSJim Jagielski         OUString sFirstService = xInfo->getSupportedServiceNames()[0];
757*b1cdbd2cSJim Jagielski         if (sFirstService == OUString (
758*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.DrawingDocumentDrawView")))
759*b1cdbd2cSJim Jagielski         {
760*b1cdbd2cSJim Jagielski             sDescription = OUString (RTL_CONSTASCII_USTRINGPARAM("Draw Document"));
761*b1cdbd2cSJim Jagielski         }
762*b1cdbd2cSJim Jagielski         else
763*b1cdbd2cSJim Jagielski             sDescription = sFirstService;
764*b1cdbd2cSJim Jagielski     }
765*b1cdbd2cSJim Jagielski     else
766*b1cdbd2cSJim Jagielski         sDescription = OUString (
767*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("Accessible Draw Document"));
768*b1cdbd2cSJim Jagielski 	return sDescription;
769*b1cdbd2cSJim Jagielski }
770*b1cdbd2cSJim Jagielski 
771*b1cdbd2cSJim Jagielski 
772*b1cdbd2cSJim Jagielski 
773*b1cdbd2cSJim Jagielski 
Activated(void)774*b1cdbd2cSJim Jagielski void AccessibleDocumentViewBase::Activated (void)
775*b1cdbd2cSJim Jagielski {
776*b1cdbd2cSJim Jagielski     // Empty.  Overwrite to do something usefull.
777*b1cdbd2cSJim Jagielski }
778*b1cdbd2cSJim Jagielski 
779*b1cdbd2cSJim Jagielski 
780*b1cdbd2cSJim Jagielski 
781*b1cdbd2cSJim Jagielski 
Deactivated(void)782*b1cdbd2cSJim Jagielski void AccessibleDocumentViewBase::Deactivated (void)
783*b1cdbd2cSJim Jagielski {
784*b1cdbd2cSJim Jagielski     // Empty.  Overwrite to do something usefull.
785*b1cdbd2cSJim Jagielski }
786*b1cdbd2cSJim Jagielski 
787*b1cdbd2cSJim Jagielski 
788*b1cdbd2cSJim Jagielski 
789*b1cdbd2cSJim Jagielski 
SetAccessibleOLEObject(const Reference<XAccessible> & xOLEObject)790*b1cdbd2cSJim Jagielski void AccessibleDocumentViewBase::SetAccessibleOLEObject (
791*b1cdbd2cSJim Jagielski     const Reference <XAccessible>& xOLEObject)
792*b1cdbd2cSJim Jagielski {
793*b1cdbd2cSJim Jagielski     // Send child event about removed accessible OLE object if necessary.
794*b1cdbd2cSJim Jagielski     if (mxAccessibleOLEObject != xOLEObject)
795*b1cdbd2cSJim Jagielski         if (mxAccessibleOLEObject.is())
796*b1cdbd2cSJim Jagielski             CommitChange (
797*b1cdbd2cSJim Jagielski                 AccessibleEventId::CHILD,
798*b1cdbd2cSJim Jagielski                 uno::Any(),
799*b1cdbd2cSJim Jagielski                 uno::makeAny (mxAccessibleOLEObject));
800*b1cdbd2cSJim Jagielski 
801*b1cdbd2cSJim Jagielski     // Assume that the accessible OLE Object disposes itself correctly.
802*b1cdbd2cSJim Jagielski 
803*b1cdbd2cSJim Jagielski     {
804*b1cdbd2cSJim Jagielski         ::osl::MutexGuard aGuard (maMutex);
805*b1cdbd2cSJim Jagielski         mxAccessibleOLEObject = xOLEObject;
806*b1cdbd2cSJim Jagielski     }
807*b1cdbd2cSJim Jagielski 
808*b1cdbd2cSJim Jagielski     // Send child event about new accessible OLE object if necessary.
809*b1cdbd2cSJim Jagielski     if (mxAccessibleOLEObject.is())
810*b1cdbd2cSJim Jagielski         CommitChange (
811*b1cdbd2cSJim Jagielski             AccessibleEventId::CHILD,
812*b1cdbd2cSJim Jagielski             uno::makeAny (mxAccessibleOLEObject),
813*b1cdbd2cSJim Jagielski             uno::Any());
814*b1cdbd2cSJim Jagielski }
815*b1cdbd2cSJim Jagielski 
816*b1cdbd2cSJim Jagielski 
817*b1cdbd2cSJim Jagielski 
818*b1cdbd2cSJim Jagielski 
819*b1cdbd2cSJim Jagielski //=====  methods from AccessibleSelectionBase ==================================================
820*b1cdbd2cSJim Jagielski 
821*b1cdbd2cSJim Jagielski // return the member maMutex;
822*b1cdbd2cSJim Jagielski ::osl::Mutex&
implGetMutex()823*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::implGetMutex()
824*b1cdbd2cSJim Jagielski {
825*b1cdbd2cSJim Jagielski     return( maMutex );
826*b1cdbd2cSJim Jagielski }
827*b1cdbd2cSJim Jagielski 
828*b1cdbd2cSJim Jagielski // return ourself as context in default case
829*b1cdbd2cSJim Jagielski uno::Reference< XAccessibleContext >
implGetAccessibleContext()830*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::implGetAccessibleContext()
831*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
832*b1cdbd2cSJim Jagielski {
833*b1cdbd2cSJim Jagielski     return( this );
834*b1cdbd2cSJim Jagielski }
835*b1cdbd2cSJim Jagielski 
836*b1cdbd2cSJim Jagielski // return sal_False in default case
837*b1cdbd2cSJim Jagielski sal_Bool
implIsSelected(sal_Int32)838*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::implIsSelected( sal_Int32 )
839*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
840*b1cdbd2cSJim Jagielski {
841*b1cdbd2cSJim Jagielski     return( sal_False );
842*b1cdbd2cSJim Jagielski }
843*b1cdbd2cSJim Jagielski 
844*b1cdbd2cSJim Jagielski // return nothing in default case
845*b1cdbd2cSJim Jagielski void
implSelect(sal_Int32,sal_Bool)846*b1cdbd2cSJim Jagielski     AccessibleDocumentViewBase::implSelect( sal_Int32, sal_Bool )
847*b1cdbd2cSJim Jagielski     throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
848*b1cdbd2cSJim Jagielski {
849*b1cdbd2cSJim Jagielski }
850*b1cdbd2cSJim Jagielski 
getExtendedAttributes()851*b1cdbd2cSJim Jagielski uno::Any SAL_CALL AccessibleDocumentViewBase::getExtendedAttributes()
852*b1cdbd2cSJim Jagielski 		throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException)
853*b1cdbd2cSJim Jagielski {
854*b1cdbd2cSJim Jagielski 	uno::Any anyAtrribute;
855*b1cdbd2cSJim Jagielski 	rtl::OUString sValue;
856*b1cdbd2cSJim Jagielski 	if (mpViewShell && mpViewShell->ISA(::sd::DrawViewShell))
857*b1cdbd2cSJim Jagielski 	{
858*b1cdbd2cSJim Jagielski 		::sd::DrawViewShell* pDrViewSh = (::sd::DrawViewShell*) mpViewShell;
859*b1cdbd2cSJim Jagielski 		rtl::OUString sName;
860*b1cdbd2cSJim Jagielski 		String sDisplay;
861*b1cdbd2cSJim Jagielski 			sName = rtl::OUString::createFromAscii("page-name:");
862*b1cdbd2cSJim Jagielski 			// MT IA2: Not used...
863*b1cdbd2cSJim Jagielski 			// SdPage*	pCurrPge = pDrViewSh->getCurrentPage();
864*b1cdbd2cSJim Jagielski 			SdDrawDocument* pDoc = pDrViewSh->GetDoc();
865*b1cdbd2cSJim Jagielski 			sDisplay = pDrViewSh->getCurrentPage()->GetName();
866*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( "\\" ), String::CreateFromAscii("\\\\" ));
867*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( "=" ), String::CreateFromAscii("\\=" ) );
868*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( ";" ), String::CreateFromAscii("\\;" ) );
869*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( "," ), String::CreateFromAscii("\\," ) );
870*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( ":" ), String::CreateFromAscii("\\:" ) );
871*b1cdbd2cSJim Jagielski 			sValue = sName + sDisplay ;
872*b1cdbd2cSJim Jagielski 			sName = rtl::OUString::createFromAscii(";page-number:");
873*b1cdbd2cSJim Jagielski 			sValue += sName;
874*b1cdbd2cSJim Jagielski 			sValue += String::CreateFromInt32((sal_Int16)((sal_uInt16)((pDrViewSh->getCurrentPage()->GetPageNum()-1)>>1) + 1)) ;
875*b1cdbd2cSJim Jagielski 			sName = rtl::OUString::createFromAscii(";total-pages:");
876*b1cdbd2cSJim Jagielski 			sValue += sName;
877*b1cdbd2cSJim Jagielski 			sValue += String::CreateFromInt32(pDrViewSh->GetPageTabControl()->GetPageCount()) ;
878*b1cdbd2cSJim Jagielski 			sValue +=  rtl::OUString::createFromAscii(";");
879*b1cdbd2cSJim Jagielski 		if(pDrViewSh->IsLayerModeActive() )
880*b1cdbd2cSJim Jagielski 		{
881*b1cdbd2cSJim Jagielski 			sName = rtl::OUString::createFromAscii("page-name:");
882*b1cdbd2cSJim Jagielski 			sValue = sName;
883*b1cdbd2cSJim Jagielski 			sDisplay = pDrViewSh->GetLayerTabControl()->GetPageText(pDrViewSh->GetLayerTabControl()->GetCurPageId());
884*b1cdbd2cSJim Jagielski 			if( pDoc )
885*b1cdbd2cSJim Jagielski 			{
886*b1cdbd2cSJim Jagielski 				SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin();
887*b1cdbd2cSJim Jagielski 				SdrLayer* aSdrLayer = rLayerAdmin.GetLayer(sDisplay, sal_False);
888*b1cdbd2cSJim Jagielski 				if( aSdrLayer )
889*b1cdbd2cSJim Jagielski 				{
890*b1cdbd2cSJim Jagielski 					String layerAltText = aSdrLayer->GetTitle();
891*b1cdbd2cSJim Jagielski 					if(  layerAltText.Len() > 0)
892*b1cdbd2cSJim Jagielski 					{
893*b1cdbd2cSJim Jagielski 						sName = rtl::OUString::createFromAscii(" ");
894*b1cdbd2cSJim Jagielski 						sDisplay = sDisplay + sName;
895*b1cdbd2cSJim Jagielski 						sDisplay += layerAltText;
896*b1cdbd2cSJim Jagielski 					}
897*b1cdbd2cSJim Jagielski 				}
898*b1cdbd2cSJim Jagielski 			}
899*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( "\\" ), String::CreateFromAscii("\\\\" ));
900*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( "=" ), String::CreateFromAscii("\\=" ));
901*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( ";" ), String::CreateFromAscii("\\;" ));
902*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( "," ), String::CreateFromAscii("\\," ));
903*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( ":" ), String::CreateFromAscii("\\:" ));
904*b1cdbd2cSJim Jagielski 			sValue +=  sDisplay;
905*b1cdbd2cSJim Jagielski 			sName = rtl::OUString::createFromAscii(";page-number:");
906*b1cdbd2cSJim Jagielski 			sValue += sName;
907*b1cdbd2cSJim Jagielski 			sValue += String::CreateFromInt32(pDrViewSh->GetActiveTabLayerIndex()+1) ;
908*b1cdbd2cSJim Jagielski 			sName = rtl::OUString::createFromAscii(";total-pages:");
909*b1cdbd2cSJim Jagielski 			sValue += sName;
910*b1cdbd2cSJim Jagielski 			sValue += String::CreateFromInt32(pDrViewSh->GetLayerTabControl()->GetPageCount()) ;
911*b1cdbd2cSJim Jagielski 			sValue +=  rtl::OUString::createFromAscii(";");
912*b1cdbd2cSJim Jagielski 		}
913*b1cdbd2cSJim Jagielski 	}
914*b1cdbd2cSJim Jagielski 	if (mpViewShell && mpViewShell->ISA(::sd::PresentationViewShell))
915*b1cdbd2cSJim Jagielski 	{
916*b1cdbd2cSJim Jagielski 		::sd::PresentationViewShell* pPresViewSh = (::sd::PresentationViewShell*) mpViewShell;
917*b1cdbd2cSJim Jagielski 		SdPage*	pCurrPge = pPresViewSh->getCurrentPage();
918*b1cdbd2cSJim Jagielski 		SdDrawDocument* pDoc = pPresViewSh->GetDoc();
919*b1cdbd2cSJim Jagielski 		SdPage*	pNotesPge = (SdPage*)pDoc->GetSdPage((pCurrPge->GetPageNum()-1)>>1, PK_NOTES);
920*b1cdbd2cSJim Jagielski 		if (pNotesPge)
921*b1cdbd2cSJim Jagielski 		{
922*b1cdbd2cSJim Jagielski 			SdrObject* pNotesObj = pNotesPge->GetPresObj(PRESOBJ_NOTES);
923*b1cdbd2cSJim Jagielski 			if (pNotesObj)
924*b1cdbd2cSJim Jagielski 			{
925*b1cdbd2cSJim Jagielski 				OutlinerParaObject* pPara = pNotesObj->GetOutlinerParaObject();
926*b1cdbd2cSJim Jagielski 				if (pPara)
927*b1cdbd2cSJim Jagielski 				{
928*b1cdbd2cSJim Jagielski 					sValue += rtl::OUString::createFromAscii("note:");
929*b1cdbd2cSJim Jagielski 					const EditTextObject& rEdit = pPara->GetTextObject();
930*b1cdbd2cSJim Jagielski 					for (sal_uInt16 i=0;i<rEdit.GetParagraphCount();i++)
931*b1cdbd2cSJim Jagielski 					{
932*b1cdbd2cSJim Jagielski 						String strNote = rEdit.GetText(i);
933*b1cdbd2cSJim Jagielski 						strNote.SearchAndReplace( String::CreateFromAscii( "\\" ), String::CreateFromAscii("\\\\" ));
934*b1cdbd2cSJim Jagielski 						strNote.SearchAndReplace( String::CreateFromAscii( "=" ), String::CreateFromAscii("\\=" ));
935*b1cdbd2cSJim Jagielski 						strNote.SearchAndReplace( String::CreateFromAscii( ";" ), String::CreateFromAscii("\\;" ));
936*b1cdbd2cSJim Jagielski 						strNote.SearchAndReplace( String::CreateFromAscii( "," ), String::CreateFromAscii("\\," ));
937*b1cdbd2cSJim Jagielski 						strNote.SearchAndReplace( String::CreateFromAscii( ":" ), String::CreateFromAscii("\\:" ));
938*b1cdbd2cSJim Jagielski 						sValue += rtl::OUString( strNote );
939*b1cdbd2cSJim Jagielski 						sValue += rtl::OUString::createFromAscii(";");//to divide each paragraph
940*b1cdbd2cSJim Jagielski 					}
941*b1cdbd2cSJim Jagielski 				}
942*b1cdbd2cSJim Jagielski 			}
943*b1cdbd2cSJim Jagielski 		}
944*b1cdbd2cSJim Jagielski 	}
945*b1cdbd2cSJim Jagielski 	if (mpViewShell && mpViewShell->ISA(::sd::OutlineViewShell) )
946*b1cdbd2cSJim Jagielski 	{
947*b1cdbd2cSJim Jagielski 		rtl::OUString sName;
948*b1cdbd2cSJim Jagielski 		String sDisplay;
949*b1cdbd2cSJim Jagielski 		SdPage*	pCurrPge = mpViewShell->GetActualPage();
950*b1cdbd2cSJim Jagielski 		SdDrawDocument* pDoc = mpViewShell->GetDoc();
951*b1cdbd2cSJim Jagielski 		if(pCurrPge && pDoc)
952*b1cdbd2cSJim Jagielski 		{
953*b1cdbd2cSJim Jagielski 			sName = rtl::OUString::createFromAscii("page-name:");
954*b1cdbd2cSJim Jagielski 			sDisplay = pCurrPge->GetName();
955*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( "=" ), String::CreateFromAscii("\\=" ) );
956*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( ";" ), String::CreateFromAscii("\\;" ) );
957*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( "," ), String::CreateFromAscii("\\," ) );
958*b1cdbd2cSJim Jagielski 			sDisplay.SearchAndReplace( String::CreateFromAscii( ":" ), String::CreateFromAscii("\\:" ) );
959*b1cdbd2cSJim Jagielski 			sValue = sName + sDisplay ;
960*b1cdbd2cSJim Jagielski 			sName = rtl::OUString::createFromAscii(";page-number:");
961*b1cdbd2cSJim Jagielski 			sValue += sName;
962*b1cdbd2cSJim Jagielski 			sValue += String::CreateFromInt32((sal_Int16)((sal_uInt16)((pCurrPge->GetPageNum()-1)>>1) + 1)) ;
963*b1cdbd2cSJim Jagielski 			sName = rtl::OUString::createFromAscii(";total-pages:");
964*b1cdbd2cSJim Jagielski 			sValue += sName;
965*b1cdbd2cSJim Jagielski 			sValue += String::CreateFromInt32(pDoc->GetSdPageCount(PK_STANDARD)) ;
966*b1cdbd2cSJim Jagielski 			sValue +=  rtl::OUString::createFromAscii(";");
967*b1cdbd2cSJim Jagielski 		}
968*b1cdbd2cSJim Jagielski 	}
969*b1cdbd2cSJim Jagielski 	if (sValue.getLength())
970*b1cdbd2cSJim Jagielski 		anyAtrribute <<= sValue;
971*b1cdbd2cSJim Jagielski 	return anyAtrribute;
972*b1cdbd2cSJim Jagielski }
973*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >
get_AccFlowTo(const::com::sun::star::uno::Any &,sal_Int32)974*b1cdbd2cSJim Jagielski 		SAL_CALL AccessibleDocumentViewBase::get_AccFlowTo(const ::com::sun::star::uno::Any&, sal_Int32 )
975*b1cdbd2cSJim Jagielski 		throw ( ::com::sun::star::uno::RuntimeException )
976*b1cdbd2cSJim Jagielski {
977*b1cdbd2cSJim Jagielski 	::com::sun::star::uno::Sequence< uno::Any> aRet;
978*b1cdbd2cSJim Jagielski 
979*b1cdbd2cSJim Jagielski 	return aRet;
980*b1cdbd2cSJim Jagielski }
981*b1cdbd2cSJim Jagielski 
getForeground()982*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL AccessibleDocumentViewBase::getForeground(  )
983*b1cdbd2cSJim Jagielski         throw (uno::RuntimeException)
984*b1cdbd2cSJim Jagielski {
985*b1cdbd2cSJim Jagielski     return COL_BLACK;
986*b1cdbd2cSJim Jagielski }
987*b1cdbd2cSJim Jagielski 
getBackground()988*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL AccessibleDocumentViewBase::getBackground(  )
989*b1cdbd2cSJim Jagielski         throw (uno::RuntimeException)
990*b1cdbd2cSJim Jagielski {
991*b1cdbd2cSJim Jagielski 	 ThrowIfDisposed ();
992*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard (maMutex);
993*b1cdbd2cSJim Jagielski     return mpViewShell->GetView()->getColorConfig().GetColorValue( ::svtools::DOCCOLOR ).nColor;
994*b1cdbd2cSJim Jagielski }
995*b1cdbd2cSJim Jagielski } // end of namespace accessibility
996