LibreOffice Module svx (master) 1
svxrectctaccessiblecontext.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
21#include <com/sun/star/accessibility/AccessibleRole.hpp>
22#include <com/sun/star/accessibility/AccessibleEventId.hpp>
23#include <com/sun/star/accessibility/AccessibleStateType.hpp>
24#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
26#include <utility>
27#include <vcl/svapp.hxx>
28#include <osl/mutex.hxx>
29#include <tools/debug.hxx>
30#include <tools/gen.hxx>
31#include <sal/log.hxx>
32#include <vcl/settings.hxx>
33#include <svx/strings.hrc>
34#include <svx/dlgctrl.hxx>
35#include <svx/dialmgr.hxx>
36#include <com/sun/star/accessibility/AccessibleRelationType.hpp>
38
39using namespace ::cppu;
40using namespace ::osl;
41using namespace ::com::sun::star;
42using namespace ::com::sun::star::uno;
43using namespace ::com::sun::star::accessibility;
44
45using namespace ::com::sun::star::lang;
46
47#define MAX_NUM_OF_CHILDREN 9
48#define NOCHILDSELECTED -1
49
50// internal
51namespace
52{
53 struct ChildIndexToPointData
54 {
55 TranslateId pResIdName;
56 TranslateId pResIdDescr;
57 RectPoint ePoint;
58 };
59}
60
61
62static const ChildIndexToPointData* IndexToPoint( tools::Long nIndex )
63{
64 DBG_ASSERT( nIndex < 9 && nIndex >= 0, "-IndexToPoint(): invalid child index! You have been warned..." );
65
66 // corners are counted from left to right and top to bottom
67 static const ChildIndexToPointData pCornerData[] =
68 { // index
69 { RID_SVXSTR_RECTCTL_ACC_CHLD_LT, RID_SVXSTR_RECTCTL_ACC_CHLD_LT, RectPoint::LT }, // 0
70 { RID_SVXSTR_RECTCTL_ACC_CHLD_MT, RID_SVXSTR_RECTCTL_ACC_CHLD_MT, RectPoint::MT }, // 1
71 { RID_SVXSTR_RECTCTL_ACC_CHLD_RT, RID_SVXSTR_RECTCTL_ACC_CHLD_RT, RectPoint::RT }, // 2
72 { RID_SVXSTR_RECTCTL_ACC_CHLD_LM, RID_SVXSTR_RECTCTL_ACC_CHLD_LM, RectPoint::LM }, // 3
73 { RID_SVXSTR_RECTCTL_ACC_CHLD_MM, RID_SVXSTR_RECTCTL_ACC_CHLD_MM, RectPoint::MM }, // 4
74 { RID_SVXSTR_RECTCTL_ACC_CHLD_RM, RID_SVXSTR_RECTCTL_ACC_CHLD_RM, RectPoint::RM }, // 5
75 { RID_SVXSTR_RECTCTL_ACC_CHLD_LB, RID_SVXSTR_RECTCTL_ACC_CHLD_LB, RectPoint::LB }, // 6
76 { RID_SVXSTR_RECTCTL_ACC_CHLD_MB, RID_SVXSTR_RECTCTL_ACC_CHLD_MB, RectPoint::MB }, // 7
77 { RID_SVXSTR_RECTCTL_ACC_CHLD_RB, RID_SVXSTR_RECTCTL_ACC_CHLD_RB, RectPoint::RB } // 8
78 };
79
80 return pCornerData + nIndex;
81}
82
83
85{
86 tools::Long nRet( static_cast<tools::Long>(ePoint) );
87 // corner control
88 // corners are counted from left to right and top to bottom
89 DBG_ASSERT( int(RectPoint::LT) == 0 && int(RectPoint::MT) == 1 && int(RectPoint::RT) == 2 && int(RectPoint::LM) == 3 && int(RectPoint::MM) == 4 && int(RectPoint::RM) == 5 &&
90 int(RectPoint::LB) == 6 && int(RectPoint::MB) == 7 && int(RectPoint::RB) == 8, "*PointToIndex(): unexpected enum value!" );
91
92 nRet = static_cast<tools::Long>(ePoint);
93
94 return nRet;
95}
96
98 : mpRepr(pRepr)
99 , mnSelectedChild(NOCHILDSELECTED)
100{
101 {
102 ::SolarMutexGuard aSolarGuard;
103 msName = SvxResId( RID_SVXSTR_RECTCTL_ACC_CORN_NAME );
104 msDescription = SvxResId( RID_SVXSTR_RECTCTL_ACC_CORN_DESCR );
105 }
106
108}
109
111{
112 ensureDisposed();
113}
114
117
118Reference< XAccessible > SAL_CALL SvxRectCtlAccessibleContext::getAccessibleAtPoint( const awt::Point& rPoint )
119{
120 ::osl::MutexGuard aGuard( m_aMutex );
121
122 Reference< XAccessible > xRet;
123
124 tools::Long nChild = mpRepr ? PointToIndex(mpRepr->GetApproxRPFromPixPt(rPoint)) : NOCHILDSELECTED;
125
126 if (nChild != NOCHILDSELECTED)
127 xRet = getAccessibleChild( nChild );
128
129 return xRet;
130}
131
132// XAccessibleContext
134{
135 ::osl::MutexGuard aGuard( m_aMutex );
136
138}
139
140Reference< XAccessible > SAL_CALL SvxRectCtlAccessibleContext::getAccessibleChild( sal_Int64 nIndex )
141{
143
144 Reference< XAccessible > xChild(mvChildren[ nIndex ]);
145 if( !xChild.is() )
146 {
147 ::SolarMutexGuard aSolarGuard;
148
149 ::osl::MutexGuard aGuard( m_aMutex );
150
151 xChild = mvChildren[ nIndex ].get();
152
153 if (!xChild.is() && mpRepr)
154 {
155 const ChildIndexToPointData* p = IndexToPoint( nIndex );
156 OUString aName(SvxResId(p->pResIdName));
157 OUString aDescr(SvxResId(p->pResIdDescr));
158
159 tools::Rectangle aFocusRect( mpRepr->CalculateFocusRectangle( p->ePoint ) );
160
162 aDescr, aFocusRect, nIndex );
163 mvChildren[ nIndex ] = pChild;
164 xChild = pChild;
165
166 // set actual state
167 if( mnSelectedChild == nIndex )
168 pChild->setStateChecked( true );
169 }
170 }
171
172 return xChild;
173}
174
175Reference< XAccessible > SAL_CALL SvxRectCtlAccessibleContext::getAccessibleParent()
176{
177 ::osl::MutexGuard aGuard( m_aMutex );
178 if (mpRepr)
179 return mpRepr->getAccessibleParent();
180 return uno::Reference<css::accessibility::XAccessible>();
181}
182
184{
185 return AccessibleRole::PANEL;
186}
187
189{
190 ::osl::MutexGuard aGuard( m_aMutex );
191 return msDescription + " Please use arrow key to selection.";
192}
193
195{
196 ::osl::MutexGuard aGuard( m_aMutex );
197 return msName;
198}
199
203Reference< XAccessibleRelationSet > SAL_CALL SvxRectCtlAccessibleContext::getAccessibleRelationSet()
204{
205 ::osl::MutexGuard aGuard( m_aMutex );
206 if (mpRepr)
208 return uno::Reference<css::accessibility::XAccessibleRelationSet>();
209}
210
212{
213 ::osl::MutexGuard aGuard( m_aMutex );
214 sal_Int64 nStateSet = 0;
215
216 if (mpRepr)
217 {
218 nStateSet |= AccessibleStateType::ENABLED;
219 nStateSet |= AccessibleStateType::FOCUSABLE;
220 if( mpRepr->HasFocus() )
221 nStateSet |= AccessibleStateType::FOCUSED;
222 nStateSet |= AccessibleStateType::OPAQUE;
223
224 nStateSet |= AccessibleStateType::SHOWING;
225
226 if( mpRepr->IsVisible() )
227 nStateSet |= AccessibleStateType::VISIBLE;
228 }
229 else
230 nStateSet |= AccessibleStateType::DEFUNC;
231
232 return nStateSet;
233}
234
236{
237 ::SolarMutexGuard aSolarGuard;
238 ::osl::MutexGuard aGuard( m_aMutex );
239
240 if (mpRepr)
241 mpRepr->GrabFocus();
242}
243
245{
246 ::SolarMutexGuard aSolarGuard;
247 ::osl::MutexGuard aGuard( m_aMutex );
248
249 //see SvxRectCtl::Paint
251 return sal_Int32(rStyles.GetLabelTextColor());
252}
253
255{
256 ::SolarMutexGuard aSolarGuard;
257 ::osl::MutexGuard aGuard( m_aMutex );
258
259 //see SvxRectCtl::Paint
261 return sal_Int32(rStyles.GetDialogColor());
262}
263
264// XAccessibleSelection
265void SvxRectCtlAccessibleContext::implSelect(sal_Int64 nIndex, bool bSelect)
266{
267 ::SolarMutexGuard aSolarGuard;
268
269 ::osl::MutexGuard aGuard( m_aMutex );
270
272
273 const ChildIndexToPointData* pData = IndexToPoint( nIndex );
274
275 DBG_ASSERT(pData, "SvxRectCtlAccessibleContext::selectAccessibleChild(): this is an impossible state! Or at least should be...");
276
277 if (mpRepr)
278 {
279 if (bSelect)
280 {
281 // this does all what is needed, including the change of the child's state!
282 mpRepr->SetActualRP( pData->ePoint );
283 }
284 else
285 {
286 SAL_WARN( "svx", "SvxRectCtlAccessibleContext::clearAccessibleSelection() is not possible!" );
287 }
288 }
289}
290
292{
293 ::osl::MutexGuard aGuard( m_aMutex );
294
296
297 return nIndex == mnSelectedChild;
298}
299
300// internals
302{
303 if( nIndex < 0 || nIndex >= getAccessibleChildCount() )
304 throw lang::IndexOutOfBoundsException();
305}
306
308{
309 ::osl::MutexGuard aGuard( m_aMutex );
310 tools::Long nNew = PointToIndex( eButton );
311 tools::Long nNumOfChildren = getAccessibleChildCount();
312 if( nNew < nNumOfChildren )
313 {
314 // select new child
315 mnSelectedChild = nNew;
316 if( nNew != NOCHILDSELECTED )
317 {
318 if( mvChildren[ nNew ].is() )
319 mvChildren[ nNew ]->FireFocusEvent();
320 }
321 else
322 {
323 Any aOld;
324 Any aNew;
325 aNew <<= AccessibleStateType::FOCUSED;
326 NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, aOld, aNew);
327 }
328 }
329 else
331}
332
334{
335 ::osl::MutexGuard aGuard( m_aMutex );
336 if( nNew == mnSelectedChild )
337 return;
338
339 tools::Long nNumOfChildren = getAccessibleChildCount();
340 if( nNew < nNumOfChildren )
341 { // valid index
343 { // deselect old selected child if one is selected
345 if( pChild )
346 pChild->setStateChecked( false );
347 }
348
349 // select new child
350 mnSelectedChild = nNew;
351
352 if( nNew != NOCHILDSELECTED )
353 {
354 if( mvChildren[ nNew ].is() )
355 mvChildren[ nNew ]->setStateChecked( true );
356 }
357 }
358 else
360}
361
363{
364 // no guard -> is done in next selectChild
365 selectChild(PointToIndex( eButton ));
366}
367
369{
370 ::osl::MutexGuard aGuard(m_aMutex);
371 OAccessibleSelectionHelper::disposing();
372 for (auto & rxChild : mvChildren)
373 {
374 if( rxChild.is() )
375 rxChild->dispose();
376 }
377 mvChildren.clear();
378 mpRepr = nullptr;
379}
380
382{
383 ::SolarMutexGuard aSolarGuard;
384 ::osl::MutexGuard aGuard( m_aMutex );
385
386 awt::Rectangle aRet;
387
388 if (mpRepr)
389 {
390 const Point aOutPos;
391 Size aOutSize(mpRepr->GetOutputSizePixel());
392
393 aRet.X = aOutPos.X();
394 aRet.Y = aOutPos.Y();
395 aRet.Width = aOutSize.Width();
396 aRet.Height = aOutSize.Height();
397 }
398
399 return aRet;
400}
401
403 const Reference<XAccessible>& rxParent,
404 OUString aName,
405 OUString aDescription,
406 const tools::Rectangle& rBoundingBox,
407 tools::Long nIndexInParent )
408 : msDescription(std::move( aDescription ))
409 , msName(std::move( aName ))
410 , mxParent(rxParent)
411 , maBoundingBox( rBoundingBox )
412 , mnIndexInParent( nIndexInParent )
413 , mbIsChecked( false )
414{
415}
416
418{
420}
421
422Reference< XAccessible > SAL_CALL SvxRectCtlChildAccessibleContext::getAccessibleAtPoint( const awt::Point& /*rPoint*/ )
423{
424 return Reference< XAccessible >();
425}
426
428{
429}
430
432{
433 ::SolarMutexGuard aSolarGuard;
434 ::osl::MutexGuard aGuard( m_aMutex );
435
436 //see SvxRectCtl::Paint
438 return sal_Int32(rStyles.GetLabelTextColor());
439}
440
442{
443 ::SolarMutexGuard aSolarGuard;
444 ::osl::MutexGuard aGuard( m_aMutex );
445
446 //see SvxRectCtl::Paint
448 return sal_Int32(rStyles.GetDialogColor());
449}
450
451// XAccessibleContext
453{
454 return 0;
455}
456
457Reference< XAccessible > SAL_CALL SvxRectCtlChildAccessibleContext::getAccessibleChild( sal_Int64 /*nIndex*/ )
458{
459 throw lang::IndexOutOfBoundsException();
460}
461
463{
464 return mxParent;
465}
466
468{
469 return AccessibleRole::RADIO_BUTTON;
470}
471
473{
474 ::osl::MutexGuard aGuard( m_aMutex );
475 return msDescription;
476}
477
479{
480 ::osl::MutexGuard aGuard( m_aMutex );
481 return msName;
482}
483
487Reference<XAccessibleRelationSet> SAL_CALL SvxRectCtlChildAccessibleContext::getAccessibleRelationSet()
488{
490 if( mxParent.is() )
491 {
492 uno::Sequence< uno::Reference< uno::XInterface > > aSequence { mxParent };
493 pRelationSetHelper->AddRelation( css::accessibility::AccessibleRelation( css::accessibility::AccessibleRelationType::MEMBER_OF, aSequence ) );
494 }
495
496 return pRelationSetHelper;
497}
498
500{
501 ::osl::MutexGuard aGuard( m_aMutex );
502 sal_Int64 nStateSet = 0;
503
504 if (!rBHelper.bDisposed)
505 {
506 if( mbIsChecked )
507 {
508 nStateSet |= AccessibleStateType::CHECKED;
509 }
510
511 nStateSet |= AccessibleStateType::ENABLED;
512 nStateSet |= AccessibleStateType::SENSITIVE;
513 nStateSet |= AccessibleStateType::OPAQUE;
514 nStateSet |= AccessibleStateType::SELECTABLE;
515 nStateSet |= AccessibleStateType::SHOWING;
516 nStateSet |= AccessibleStateType::VISIBLE;
517 }
518 else
519 nStateSet |= AccessibleStateType::DEFUNC;
520
521 return nStateSet;
522}
523
524// XAccessibleValue
526{
527 Any aRet;
528 aRet <<= ( mbIsChecked? 1.0 : 0.0 );
529 return aRet;
530}
531
533{
534 return false;
535}
536
538{
539 Any aRet;
540 aRet <<= 1.0;
541 return aRet;
542}
543
545{
546 Any aRet;
547 aRet <<= 0.0;
548 return aRet;
549}
550
552{
553 Any aRet;
554 aRet <<= 1.0;
555 return aRet;
556}
557
558
559// XAccessibleAction
560
561
563{
564 return 1;
565}
566
567
569{
570 ::osl::MutexGuard aGuard( m_aMutex );
571
572 if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
573 throw IndexOutOfBoundsException();
574
575 Reference<XAccessibleSelection> xSelection( mxParent, UNO_QUERY);
576
577 xSelection->selectAccessibleChild(mnIndexInParent);
578
579 return true;
580}
581
582
584{
585 ::osl::MutexGuard aGuard( m_aMutex );
586
587 if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
588 throw IndexOutOfBoundsException();
589
590 return "select";
591}
592
593
594Reference< XAccessibleKeyBinding > SvxRectCtlChildAccessibleContext::getAccessibleActionKeyBinding( sal_Int32 nIndex )
595{
596 ::osl::MutexGuard aGuard( m_aMutex );
597
598 if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
599 throw IndexOutOfBoundsException();
600
601 return Reference< XAccessibleKeyBinding >();
602}
603
605{
606 OAccessibleComponentHelper::disposing();
607 mxParent.clear();
608}
609
611{
612 // no guard necessary, because no one changes maBoundingBox after creating it
614}
615
617{
618 if( mbIsChecked == bChecked )
619 return;
620
621 mbIsChecked = bChecked;
622
623 Any aOld;
624 Any aNew;
625 Any& rMod = bChecked? aNew : aOld;
626
627 //Send the STATE_CHANGED(Focused) event to accessible
628 rMod <<= AccessibleStateType::FOCUSED;
629 NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, aOld, aNew);
630
631 rMod <<= AccessibleStateType::CHECKED;
632
633 NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, aOld, aNew);
634}
635
637{
638 Any aOld;
639 Any aNew;
640 aNew <<= AccessibleStateType::FOCUSED;
641 NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, aOld, aNew);
642}
643
646
647/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
WeakReference< XInterface > mxParent
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
constexpr tools::Long Height() const
constexpr tools::Long Width() const
const Color & GetLabelTextColor() const
const Color & GetDialogColor() const
virtual css::awt::Rectangle implGetBounds() override
virtual OUString SAL_CALL getAccessibleDescription() override
virtual bool implIsSelected(sal_Int64 nAccessibleChildIndex) override
virtual sal_Int32 SAL_CALL getForeground() override
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
Return empty reference to indicate that the relation set is not supported.
virtual void SAL_CALL disposing() override
void selectChild(RectPoint ePoint)
Selects a new child by point.
virtual void SAL_CALL grabFocus() override
virtual sal_Int16 SAL_CALL getAccessibleRole() override
SvxRectCtlAccessibleContext(SvxRectCtl *pRepresentation)
std::vector< rtl::Reference< SvxRectCtlChildAccessibleContext > > mvChildren
array for all possible children
virtual sal_Int32 SAL_CALL getBackground() override
SvxRectCtl * mpRepr
pointer to internal representation
OUString msDescription
Description of this object.
virtual sal_Int64 SAL_CALL getAccessibleStateSet() override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
virtual sal_Int64 SAL_CALL getAccessibleChildCount() override
tools::Long mnSelectedChild
actual selected child
virtual void implSelect(sal_Int64 nAccessibleChildIndex, bool bSelect) override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int64 nIndex) override
OUString msName
Name of this object.
virtual OUString SAL_CALL getAccessibleName() override
bool mbIsChecked
Indicates, if object is checked.
virtual css::uno::Any SAL_CALL getMaximumValue() override
virtual css::uno::Reference< css::accessibility::XAccessibleKeyBinding > SAL_CALL getAccessibleActionKeyBinding(sal_Int32 nIndex) override
virtual sal_Bool SAL_CALL doAccessibleAction(sal_Int32 nIndex) override
virtual void SAL_CALL grabFocus() override
virtual void SAL_CALL disposing() override
virtual css::uno::Any SAL_CALL getMinimumIncrement() override
tools::Long mnIndexInParent
index of child in parent
virtual OUString SAL_CALL getAccessibleActionDescription(sal_Int32 nIndex) override
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
Return empty reference to indicate that the relation set is not supported.
virtual OUString SAL_CALL getAccessibleName() override
css::uno::Reference< css::accessibility::XAccessible > mxParent
Reference to the parent object.
virtual sal_Int64 SAL_CALL getAccessibleChildCount() override
virtual OUString SAL_CALL getAccessibleDescription() override
SvxRectCtlChildAccessibleContext(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, OUString aName, OUString aDescription, const tools::Rectangle &rBoundingBox, tools::Long nIndexInParent)
virtual sal_Bool SAL_CALL setCurrentValue(const css::uno::Any &aNumber) override
virtual sal_Int32 SAL_CALL getForeground() override
virtual sal_Int32 SAL_CALL getBackground() override
tools::Rectangle maBoundingBox
Bounding box.
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint(const css::awt::Point &rPoint) override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
OUString msDescription
Description of this object.
void setStateChecked(bool bChecked)
Sets the checked status.
virtual sal_Int32 SAL_CALL getAccessibleActionCount() override
virtual css::uno::Any SAL_CALL getCurrentValue() override
virtual css::awt::Rectangle implGetBounds() override
implements the calculation of the bounding rectangle
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int64 nIndex) override
virtual sal_Int16 SAL_CALL getAccessibleRole() override
virtual sal_Int64 SAL_CALL getAccessibleStateSet() override
virtual css::uno::Any SAL_CALL getMinimumValue() override
a11yrelationset get_accessible_relation_set() const
Definition: dlgctrl.hxx:130
tools::Rectangle CalculateFocusRectangle() const
Definition: dlgctrl.cxx:535
css::uno::Reference< css::accessibility::XAccessible > getAccessibleParent() const
Definition: dlgctrl.hxx:128
static const sal_uInt8 NO_CHILDREN
Definition: dlgctrl.hxx:123
void SetActualRP(RectPoint eNewRP)
Definition: dlgctrl.cxx:502
void NotifyAccessibleEvent(const sal_Int16 _nEventId, const css::uno::Any &_rOldValue, const css::uno::Any &_rNewValue)
Size const & GetOutputSizePixel() const
css::awt::Rectangle AWTRectangle(const ::tools::Rectangle &rVCLRect)
#define DBG_ASSERT(sCon, aError)
OUString SvxResId(TranslateId aId)
Definition: dialmgr.cxx:24
std::mutex m_aMutex
sal_Int32 nIndex
OUString aName
void * p
#define SAL_WARN(area, stream)
std::unique_ptr< sal_Int32[]> pData
IMPLEMENT_FORWARD_XTYPEPROVIDER2(ChildWindowPane, ChildWindowPaneInterfaceBase, Pane)
IMPLEMENT_FORWARD_XINTERFACE2(ChildWindowPane, ChildWindowPaneInterfaceBase, Pane)
long Long
RectPoint
Definition: rectenum.hxx:23
#define NOCHILDSELECTED
static const ChildIndexToPointData * IndexToPoint(tools::Long nIndex)
static tools::Long PointToIndex(RectPoint ePoint)
#define MAX_NUM_OF_CHILDREN
OUString msName
unsigned char sal_Bool