Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : :
30 : : #include "AccessibleSlideSorterObject.hxx"
31 : :
32 : : #include "SlideSorter.hxx"
33 : : #include "controller/SlideSorterController.hxx"
34 : : #include "controller/SlsPageSelector.hxx"
35 : : #include "controller/SlsFocusManager.hxx"
36 : : #include "model/SlideSorterModel.hxx"
37 : : #include "model/SlsPageDescriptor.hxx"
38 : : #include "view/SlideSorterView.hxx"
39 : : #include "view/SlsLayouter.hxx"
40 : : #include "view/SlsPageObjectLayouter.hxx"
41 : : #include <com/sun/star/accessibility/AccessibleRole.hpp>
42 : : #include <com/sun/star/accessibility/AccessibleStateType.hpp>
43 : : #include <comphelper/accessibleeventnotifier.hxx>
44 : : #include <unotools/accessiblestatesethelper.hxx>
45 : :
46 : : #include "sdpage.hxx"
47 : : #include "sdresid.hxx"
48 : : #include <vcl/svapp.hxx>
49 : :
50 : : #include "glob.hrc"
51 : :
52 : : using ::rtl::OUString;
53 : : using namespace ::com::sun::star;
54 : : using namespace ::com::sun::star::uno;
55 : : using namespace ::com::sun::star::accessibility;
56 : :
57 : :
58 : : namespace accessibility {
59 : :
60 : :
61 : 0 : AccessibleSlideSorterObject::AccessibleSlideSorterObject(
62 : : const Reference<XAccessible>& rxParent,
63 : : ::sd::slidesorter::SlideSorter& rSlideSorter,
64 : : sal_uInt16 nPageNumber)
65 : : : AccessibleSlideSorterObjectBase(::sd::MutexOwner::maMutex),
66 : : mxParent(rxParent),
67 : : mnPageNumber(nPageNumber),
68 : : mrSlideSorter(rSlideSorter),
69 : 0 : mnClientId(0)
70 : : {
71 : 0 : }
72 : :
73 : :
74 : :
75 : :
76 [ # # ]: 0 : AccessibleSlideSorterObject::~AccessibleSlideSorterObject (void)
77 : : {
78 [ # # ]: 0 : if ( ! IsDisposed())
79 [ # # ]: 0 : dispose();
80 [ # # ]: 0 : }
81 : :
82 : :
83 : :
84 : :
85 : 0 : sal_uInt16 AccessibleSlideSorterObject::GetPageNumber (void) const
86 : : {
87 : 0 : return mnPageNumber;
88 : : }
89 : :
90 : :
91 : :
92 : :
93 : 0 : void AccessibleSlideSorterObject::FireAccessibleEvent (
94 : : short nEventId,
95 : : const uno::Any& rOldValue,
96 : : const uno::Any& rNewValue)
97 : : {
98 [ # # ]: 0 : if (mnClientId != 0)
99 : : {
100 [ # # ]: 0 : AccessibleEventObject aEventObject;
101 : :
102 [ # # ][ # # ]: 0 : aEventObject.Source = Reference<XWeak>(this);
103 : 0 : aEventObject.EventId = nEventId;
104 : 0 : aEventObject.NewValue = rNewValue;
105 : 0 : aEventObject.OldValue = rOldValue;
106 : :
107 [ # # ][ # # ]: 0 : comphelper::AccessibleEventNotifier::addEvent(mnClientId, aEventObject);
108 : : }
109 : 0 : }
110 : :
111 : :
112 : :
113 : :
114 : 0 : void SAL_CALL AccessibleSlideSorterObject::disposing (void)
115 : : {
116 [ # # ]: 0 : const SolarMutexGuard aSolarGuard;
117 : :
118 : : // Send a disposing to all listeners.
119 [ # # ]: 0 : if (mnClientId != 0)
120 : : {
121 [ # # ][ # # ]: 0 : comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing(mnClientId, *this);
122 : 0 : mnClientId = 0;
123 [ # # ]: 0 : }
124 : 0 : }
125 : :
126 : :
127 : :
128 : : //===== XAccessible ===========================================================
129 : :
130 : : Reference<XAccessibleContext> SAL_CALL
131 : 0 : AccessibleSlideSorterObject::getAccessibleContext (void)
132 : : throw (uno::RuntimeException)
133 : : {
134 : 0 : ThrowIfDisposed();
135 : 0 : return this;
136 : : }
137 : :
138 : :
139 : :
140 : : //===== XAccessibleContext ====================================================
141 : :
142 : 0 : sal_Int32 SAL_CALL AccessibleSlideSorterObject::getAccessibleChildCount (void)
143 : : throw (uno::RuntimeException)
144 : : {
145 : 0 : ThrowIfDisposed();
146 : 0 : return 0;
147 : : }
148 : :
149 : :
150 : :
151 : :
152 : 0 : Reference<XAccessible> SAL_CALL AccessibleSlideSorterObject::getAccessibleChild (sal_Int32 )
153 : : throw (lang::IndexOutOfBoundsException, RuntimeException)
154 : : {
155 : 0 : ThrowIfDisposed();
156 [ # # ]: 0 : throw lang::IndexOutOfBoundsException();
157 : : }
158 : :
159 : :
160 : :
161 : :
162 : 0 : Reference<XAccessible> SAL_CALL AccessibleSlideSorterObject::getAccessibleParent (void)
163 : : throw (uno::RuntimeException)
164 : : {
165 : 0 : ThrowIfDisposed();
166 : 0 : return mxParent;
167 : : }
168 : :
169 : :
170 : :
171 : :
172 : 0 : sal_Int32 SAL_CALL AccessibleSlideSorterObject::getAccessibleIndexInParent()
173 : : throw (uno::RuntimeException)
174 : : {
175 [ # # ]: 0 : ThrowIfDisposed();
176 [ # # ]: 0 : const SolarMutexGuard aSolarGuard;
177 : 0 : sal_Int32 nIndexInParent(-1);
178 : :
179 [ # # ]: 0 : if (mxParent.is())
180 : : {
181 [ # # ][ # # ]: 0 : Reference<XAccessibleContext> xParentContext (mxParent->getAccessibleContext());
182 [ # # ]: 0 : if (xParentContext.is())
183 : : {
184 [ # # ][ # # ]: 0 : sal_Int32 nChildCount (xParentContext->getAccessibleChildCount());
185 [ # # ]: 0 : for (sal_Int32 i=0; i<nChildCount; ++i)
186 [ # # ][ # # ]: 0 : if (xParentContext->getAccessibleChild(i).get()
[ # # ][ # # ]
187 : : == static_cast<XAccessible*>(this))
188 : : {
189 : 0 : nIndexInParent = i;
190 : 0 : break;
191 : : }
192 : 0 : }
193 : : }
194 : :
195 [ # # ]: 0 : return nIndexInParent;
196 : : }
197 : :
198 : :
199 : :
200 : :
201 : 0 : sal_Int16 SAL_CALL AccessibleSlideSorterObject::getAccessibleRole (void)
202 : : throw (uno::RuntimeException)
203 : : {
204 : 0 : ThrowIfDisposed();
205 : : static sal_Int16 nRole = AccessibleRole::LIST_ITEM;
206 : 0 : return nRole;
207 : : }
208 : :
209 : :
210 : :
211 : :
212 : 0 : ::rtl::OUString SAL_CALL AccessibleSlideSorterObject::getAccessibleDescription (void)
213 : : throw (uno::RuntimeException)
214 : : {
215 : 0 : ThrowIfDisposed();
216 [ # # ][ # # ]: 0 : return String(SdResId(STR_PAGE));
[ # # ]
217 : : }
218 : :
219 : :
220 : :
221 : :
222 : 0 : ::rtl::OUString SAL_CALL AccessibleSlideSorterObject::getAccessibleName (void)
223 : : throw (uno::RuntimeException)
224 : : {
225 [ # # ]: 0 : ThrowIfDisposed();
226 [ # # ]: 0 : const SolarMutexGuard aSolarGuard;
227 : :
228 [ # # ]: 0 : SdPage* pPage = GetPage();
229 [ # # ]: 0 : if (pPage != NULL)
230 [ # # ][ # # ]: 0 : return pPage->GetName();
231 : : else
232 [ # # ][ # # ]: 0 : return String();
[ # # ][ # # ]
233 : : }
234 : :
235 : :
236 : :
237 : :
238 : : Reference<XAccessibleRelationSet> SAL_CALL
239 : 0 : AccessibleSlideSorterObject::getAccessibleRelationSet (void)
240 : : throw (uno::RuntimeException)
241 : : {
242 : 0 : ThrowIfDisposed();
243 : 0 : return Reference<XAccessibleRelationSet>();
244 : : }
245 : :
246 : :
247 : :
248 : :
249 : : Reference<XAccessibleStateSet> SAL_CALL
250 : 0 : AccessibleSlideSorterObject::getAccessibleStateSet (void)
251 : : throw (uno::RuntimeException)
252 : : {
253 [ # # ]: 0 : ThrowIfDisposed();
254 [ # # ]: 0 : const SolarMutexGuard aSolarGuard;
255 [ # # ]: 0 : ::utl::AccessibleStateSetHelper* pStateSet = new ::utl::AccessibleStateSetHelper();
256 : :
257 [ # # ]: 0 : if (mxParent.is())
258 : : {
259 : : // Unconditional states.
260 [ # # ]: 0 : pStateSet->AddState(AccessibleStateType::SELECTABLE);
261 [ # # ]: 0 : pStateSet->AddState(AccessibleStateType::FOCUSABLE);
262 [ # # ]: 0 : pStateSet->AddState(AccessibleStateType::ENABLED);
263 [ # # ]: 0 : pStateSet->AddState(AccessibleStateType::VISIBLE);
264 [ # # ]: 0 : pStateSet->AddState(AccessibleStateType::SHOWING);
265 [ # # ]: 0 : pStateSet->AddState(AccessibleStateType::ACTIVE);
266 [ # # ]: 0 : pStateSet->AddState(AccessibleStateType::SENSITIVE);
267 : :
268 : : // Conditional states.
269 [ # # ][ # # ]: 0 : if (mrSlideSorter.GetController().GetPageSelector().IsPageSelected(mnPageNumber))
[ # # ][ # # ]
270 [ # # ]: 0 : pStateSet->AddState(AccessibleStateType::SELECTED);
271 [ # # ][ # # ]: 0 : if (mrSlideSorter.GetController().GetFocusManager().GetFocusedPageIndex() == mnPageNumber)
[ # # ][ # # ]
272 [ # # ][ # # ]: 0 : if (mrSlideSorter.GetController().GetFocusManager().IsFocusShowing())
[ # # ][ # # ]
273 [ # # ]: 0 : pStateSet->AddState(AccessibleStateType::FOCUSED);
274 : : }
275 : :
276 [ # # ][ # # ]: 0 : return pStateSet;
[ # # ]
277 : : }
278 : :
279 : :
280 : :
281 : :
282 : 0 : lang::Locale SAL_CALL AccessibleSlideSorterObject::getLocale (void)
283 : : throw (IllegalAccessibleComponentStateException,
284 : : RuntimeException)
285 : : {
286 : 0 : ThrowIfDisposed();
287 : : // Delegate request to parent.
288 [ # # ]: 0 : if (mxParent.is())
289 : : {
290 [ # # ][ # # ]: 0 : Reference<XAccessibleContext> xParentContext (mxParent->getAccessibleContext());
291 [ # # ]: 0 : if (xParentContext.is())
292 [ # # ][ # # ]: 0 : return xParentContext->getLocale ();
[ # # ]
293 : : }
294 : :
295 : : // No locale and no parent. Therefore throw exception to indicate this
296 : : // cluelessness.
297 [ # # ]: 0 : throw IllegalAccessibleComponentStateException();
298 : : }
299 : :
300 : :
301 : :
302 : :
303 : :
304 : : //===== XAccessibleEventBroadcaster ===========================================
305 : :
306 : 0 : void SAL_CALL AccessibleSlideSorterObject::addEventListener(
307 : : const Reference<XAccessibleEventListener>& rxListener)
308 : : throw (RuntimeException)
309 : : {
310 [ # # ]: 0 : if (rxListener.is())
311 : : {
312 [ # # ]: 0 : const osl::MutexGuard aGuard(maMutex);
313 : :
314 [ # # ]: 0 : if (IsDisposed())
315 : : {
316 [ # # ]: 0 : uno::Reference<uno::XInterface> x ((lang::XComponent *)this, uno::UNO_QUERY);
317 [ # # ][ # # ]: 0 : rxListener->disposing (lang::EventObject (x));
[ # # ][ # # ]
318 : : }
319 : : else
320 : : {
321 [ # # ]: 0 : if (mnClientId == 0)
322 [ # # ]: 0 : mnClientId = comphelper::AccessibleEventNotifier::registerClient();
323 [ # # ]: 0 : comphelper::AccessibleEventNotifier::addEventListener(mnClientId, rxListener);
324 [ # # ]: 0 : }
325 : : }
326 : 0 : }
327 : :
328 : :
329 : :
330 : :
331 : 0 : void SAL_CALL AccessibleSlideSorterObject::removeEventListener(
332 : : const Reference<XAccessibleEventListener>& rxListener)
333 : : throw (uno::RuntimeException)
334 : : {
335 : 0 : ThrowIfDisposed();
336 [ # # ]: 0 : if (rxListener.is())
337 : : {
338 [ # # ]: 0 : const osl::MutexGuard aGuard(maMutex);
339 : :
340 [ # # ]: 0 : sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( mnClientId, rxListener );
341 [ # # ]: 0 : if ( !nListenerCount )
342 : : {
343 : : // no listeners anymore
344 : : // -> revoke ourself. This may lead to the notifier thread dying (if we were the last client),
345 : : // and at least to us not firing any events anymore, in case somebody calls
346 : : // NotifyAccessibleEvent, again
347 [ # # ]: 0 : comphelper::AccessibleEventNotifier::revokeClient( mnClientId );
348 : 0 : mnClientId = 0;
349 [ # # ]: 0 : }
350 : : }
351 : 0 : }
352 : :
353 : :
354 : :
355 : :
356 : : //===== XAccessibleComponent ==================================================
357 : :
358 : 0 : sal_Bool SAL_CALL AccessibleSlideSorterObject::containsPoint(const awt::Point& aPoint)
359 : : throw (uno::RuntimeException)
360 : : {
361 [ # # ]: 0 : ThrowIfDisposed();
362 [ # # ]: 0 : const awt::Size aSize (getSize());
363 : : return (aPoint.X >= 0)
364 : : && (aPoint.X < aSize.Width)
365 : : && (aPoint.Y >= 0)
366 [ # # ][ # # ]: 0 : && (aPoint.Y < aSize.Height);
[ # # ][ # # ]
367 : : }
368 : :
369 : :
370 : :
371 : :
372 : : Reference<XAccessible> SAL_CALL
373 : 0 : AccessibleSlideSorterObject::getAccessibleAtPoint(const awt::Point& )
374 : : throw (uno::RuntimeException)
375 : : {
376 : 0 : return NULL;
377 : : }
378 : :
379 : :
380 : :
381 : :
382 : 0 : awt::Rectangle SAL_CALL AccessibleSlideSorterObject::getBounds (void)
383 : : throw (RuntimeException)
384 : : {
385 [ # # ]: 0 : ThrowIfDisposed ();
386 : :
387 [ # # ]: 0 : const SolarMutexGuard aSolarGuard;
388 : :
389 : : Rectangle aBBox (
390 [ # # ][ # # ]: 0 : mrSlideSorter.GetView().GetLayouter().GetPageObjectLayouter()->GetBoundingBox(
391 [ # # ]: 0 : mrSlideSorter.GetModel().GetPageDescriptor(mnPageNumber),
392 : : ::sd::slidesorter::view::PageObjectLayouter::PageObject,
393 [ # # ][ # # ]: 0 : ::sd::slidesorter::view::PageObjectLayouter::WindowCoordinateSystem));
[ # # ][ # # ]
[ # # ]
394 : :
395 [ # # ]: 0 : if (mxParent.is())
396 : : {
397 [ # # ][ # # ]: 0 : Reference<XAccessibleComponent> xParentComponent(mxParent->getAccessibleContext(), UNO_QUERY);
[ # # ]
398 [ # # ]: 0 : if (xParentComponent.is())
399 : : {
400 [ # # ][ # # ]: 0 : awt::Rectangle aParentBBox (xParentComponent->getBounds());
401 : : aBBox.Intersection(Rectangle(
402 : : aParentBBox.X,
403 : : aParentBBox.Y,
404 : : aParentBBox.Width,
405 [ # # ][ # # ]: 0 : aParentBBox.Height));
406 : 0 : }
407 : : }
408 : :
409 : : return awt::Rectangle(
410 : 0 : aBBox.Left(),
411 : 0 : aBBox.Top(),
412 [ # # ]: 0 : aBBox.GetWidth(),
413 [ # # # # ]: 0 : aBBox.GetHeight());
414 : : }
415 : :
416 : :
417 : :
418 : :
419 : 0 : awt::Point SAL_CALL AccessibleSlideSorterObject::getLocation ()
420 : : throw (RuntimeException)
421 : : {
422 [ # # ]: 0 : ThrowIfDisposed ();
423 [ # # ]: 0 : const awt::Rectangle aBBox (getBounds());
424 : 0 : return awt::Point(aBBox.X, aBBox.Y);
425 : : }
426 : :
427 : :
428 : :
429 : :
430 : 0 : awt::Point SAL_CALL AccessibleSlideSorterObject::getLocationOnScreen (void)
431 : : throw (RuntimeException)
432 : : {
433 [ # # ]: 0 : ThrowIfDisposed ();
434 : :
435 [ # # ]: 0 : const SolarMutexGuard aSolarGuard;
436 : :
437 [ # # ]: 0 : awt::Point aLocation (getLocation());
438 : :
439 [ # # ]: 0 : if (mxParent.is())
440 : : {
441 [ # # ][ # # ]: 0 : Reference<XAccessibleComponent> xParentComponent(mxParent->getAccessibleContext(),UNO_QUERY);
[ # # ]
442 [ # # ]: 0 : if (xParentComponent.is())
443 : : {
444 [ # # ][ # # ]: 0 : const awt::Point aParentLocationOnScreen(xParentComponent->getLocationOnScreen());
445 : 0 : aLocation.X += aParentLocationOnScreen.X;
446 : 0 : aLocation.Y += aParentLocationOnScreen.Y;
447 : 0 : }
448 : : }
449 : :
450 [ # # ]: 0 : return aLocation;
451 : : }
452 : :
453 : :
454 : :
455 : :
456 : 0 : awt::Size SAL_CALL AccessibleSlideSorterObject::getSize (void)
457 : : throw (RuntimeException)
458 : : {
459 [ # # ]: 0 : ThrowIfDisposed ();
460 [ # # ]: 0 : const awt::Rectangle aBBox (getBounds());
461 : 0 : return awt::Size(aBBox.Width,aBBox.Height);
462 : : }
463 : :
464 : :
465 : :
466 : :
467 : 0 : void SAL_CALL AccessibleSlideSorterObject::grabFocus (void)
468 : : throw (RuntimeException)
469 : : {
470 : : // nothing to do
471 : 0 : }
472 : :
473 : :
474 : :
475 : :
476 : 0 : sal_Int32 SAL_CALL AccessibleSlideSorterObject::getForeground (void)
477 : : throw (::com::sun::star::uno::RuntimeException)
478 : : {
479 [ # # ]: 0 : ThrowIfDisposed ();
480 [ # # ]: 0 : svtools::ColorConfig aColorConfig;
481 [ # # ]: 0 : sal_uInt32 nColor = aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor;
482 [ # # ]: 0 : return static_cast<sal_Int32>(nColor);
483 : : }
484 : :
485 : :
486 : :
487 : :
488 : 0 : sal_Int32 SAL_CALL AccessibleSlideSorterObject::getBackground (void)
489 : : throw (::com::sun::star::uno::RuntimeException)
490 : : {
491 : 0 : ThrowIfDisposed ();
492 : 0 : sal_uInt32 nColor = Application::GetSettings().GetStyleSettings().GetWindowColor().GetColor();
493 : 0 : return static_cast<sal_Int32>(nColor);
494 : : }
495 : :
496 : :
497 : :
498 : :
499 : :
500 : : //===== XServiceInfo ========================================================
501 : :
502 : : ::rtl::OUString SAL_CALL
503 : 0 : AccessibleSlideSorterObject::getImplementationName (void)
504 : : throw (::com::sun::star::uno::RuntimeException)
505 : : {
506 : 0 : return OUString("AccessibleSlideSorterObject");
507 : : }
508 : :
509 : :
510 : :
511 : :
512 : : sal_Bool SAL_CALL
513 : 0 : AccessibleSlideSorterObject::supportsService (const OUString& sServiceName)
514 : : throw (::com::sun::star::uno::RuntimeException)
515 : : {
516 [ # # ]: 0 : ThrowIfDisposed ();
517 : :
518 : : // Iterate over all supported service names and return true if on of them
519 : : // matches the given name.
520 : : uno::Sequence< ::rtl::OUString> aSupportedServices (
521 [ # # ]: 0 : getSupportedServiceNames ());
522 [ # # ]: 0 : for (int i=0; i<aSupportedServices.getLength(); i++)
523 [ # # ][ # # ]: 0 : if (sServiceName == aSupportedServices[i])
524 : 0 : return sal_True;
525 [ # # ]: 0 : return sal_False;
526 : : }
527 : :
528 : :
529 : :
530 : :
531 : : uno::Sequence< ::rtl::OUString> SAL_CALL
532 : 0 : AccessibleSlideSorterObject::getSupportedServiceNames (void)
533 : : throw (::com::sun::star::uno::RuntimeException)
534 : : {
535 : 0 : ThrowIfDisposed ();
536 : :
537 : : static const OUString sServiceNames[2] = {
538 : : OUString("com.sun.star.accessibility.Accessible"),
539 : : OUString("com.sun.star.accessibility.AccessibleContext")
540 [ # # ][ # # ]: 0 : };
[ # # ]
541 : 0 : return uno::Sequence<OUString> (sServiceNames, 2);
542 : : }
543 : :
544 : :
545 : :
546 : :
547 : 0 : void AccessibleSlideSorterObject::ThrowIfDisposed (void)
548 : : throw (lang::DisposedException)
549 : : {
550 [ # # ][ # # ]: 0 : if (rBHelper.bDisposed || rBHelper.bInDispose)
551 : : {
552 : : OSL_TRACE ("Calling disposed object. Throwing exception:");
553 : : throw lang::DisposedException ("object has been already disposed",
554 [ # # ][ # # ]: 0 : static_cast<uno::XWeak*>(this));
555 : : }
556 : 0 : }
557 : :
558 : :
559 : :
560 : 0 : sal_Bool AccessibleSlideSorterObject::IsDisposed (void)
561 : : {
562 [ # # ][ # # ]: 0 : return (rBHelper.bDisposed || rBHelper.bInDispose);
563 : : }
564 : :
565 : 0 : SdPage* AccessibleSlideSorterObject::GetPage (void) const
566 : : {
567 : : ::sd::slidesorter::model::SharedPageDescriptor pDescriptor(
568 [ # # ][ # # ]: 0 : mrSlideSorter.GetModel().GetPageDescriptor(mnPageNumber));
569 [ # # ]: 0 : if (pDescriptor.get() != NULL)
570 [ # # ]: 0 : return pDescriptor->GetPage();
571 : : else
572 [ # # ]: 0 : return NULL;
573 : : }
574 : :
575 : : } // end of namespace ::accessibility
576 : :
577 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|